网络排错与网络命令的理解ping-traceroute-host(nslookup)-tcpdump获取对方的mac

 

1.  虚拟机中NAT架构的网络结构中, 虚拟网卡VMnet8(192.168.134.1)是链接宿主主机。linux

  用虚拟网段中主机(192.168.134.133),ping  VMnet8 为何没有响应,说明此网卡不在虚拟网段???正则表达式

  NAT虚拟网段中:shell

  (1)NAT服务器,DNS服务器的IP,  A:192.168.134.2(充当网关,要进行网络地址转换)windows

  (2)虚拟主机IP,          B:192.168.134.133服务器

  (3)与宿主主机通讯的虚拟网卡,  C:192.168.134.1网络

  宿主主机IP架构

  (1)宿主主机IP:   D
less

  测试:tcp

  宿主环境测试:分布式

  D ping C,B  成功!

  D ping A ,   失败!

  NAT局域网测试

  B ping D, A 成功

    B ping C ,   失败!

  


 

-------ping命令------

  Win: ping

  Linux: ping

  在网络中Ping 是一个十分好用的TCP/IP工具。它主要的功能是用来检测网络的连通状况和分析网络速度。

  检测两台主机联通性的判断。

  做为一个生活在网络上的管理员或者黑客来讲,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有惟一肯定的IP地址, 咱们给目标IP地址发送一个数据包,对方就要返回一个一样大小的数据包,根据返回的数据包咱们能够肯定目标主机的存在,能够初步判断目标主机的操做系统 等。

  ping /? 例出ping 如下是PING的一些参数

  -n 定义向目标IP发送数据包的次数,默认为3次。若是网络速度比较慢,3次对咱们来讲也浪费了很多时间,由于如今咱们的目的仅仅是判断目标IP是否存在,那 么就定义为一次吧。说明一下,若是-t 参数和 -n参数一块儿使用,ping命令就以放在后面的参数为标准,好比“ping IP -t -n 3”,虽然使用了-t参数,但并非一直ping下去,而是只ping 3次。另外,ping命令不必定非得ping IP,也能够直接ping主机域名,这样就能够获得主机的IP。

  -a 将地址解析为计算机名。

 

  -n count 发送 count 指定的 ECHO 数据包数。默认值为 4。

 

  测试网络的设备:

1. ping本网段的网关/路由器的IP地址;

  Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也能够检查本机与本地网络链接是否正常;(在非局域网中这一步骤能够忽略)

2. ping中心的中心交换机的IP地址;

3. ping中心的主页服务器的域名“www.cc.shu.edu.cn”

4. Ping 本身的主机

  (1)127.0.0.1      回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好

  (2)本身主机的IP  这样是为了检查本机的IP地址是否设置有误

5. Ping远程IP地址,这主要是检查本网或本机与外部的链接是否正常

 

 对Ping后返回信息的分析

  

1.Request timed out

(1) 对方已关机,或者网络上根本没有这个地址:好比在上图中主机A中PING 192.168.0.7 ,或者主机B关机了,在主机A中PING 192.168.0.5 都会获得超时的信息。

 一个本网段中不存在的IP,实例。

(2)对方与本身不在同一网段内,经过路由也没法找到对方,但有时对方确实是存在的,固然不存在也是返回超时的信息。

(3)对方确实存在,但设置了ICMP数据包过滤(好比防火墙设置)。

  怎样知道对方是存在,仍是不存在呢,能够用带参数 -a 的Ping命令探测对方,若是能获得对方的NETBIOS名称,则说明对方是存在的,是有防火墙设置,若是得不到,多半是对方不存在或关机,或不在同一网段内。

(4)错误设置IP地址

正常状况下,一台主机应该有一个网卡,一个IP地址,或多个网卡,多个IP地址(这些地址必定要处于不 同的IP子网)。但若是一台电脑的“拨号网络适配器”(至关于一块软网卡)的TCP/IP设置中,设置了一个与网卡IP地址处于同一子网的IP地址,这 样,在IP层协议看来,这台主机就有两个不一样的接口处于同一网段内。当从这台主机Ping其余的机器时,会存在这样的问题:

A.主机不知道将数据包发到哪一个网络接口,由于有两个网络接口都链接在同一网段。

B.主机不知道用哪一个地址做为数据包的源地址。所以,从这台主机去Ping其余机器,IP层协议会没法 处理,超时后,Ping 就会给出一个“超时无应答”的错误信息提示。但从其余主机Ping这台主机时,请求包从特定的网卡来,ICMP只须简单地将目的、源地址互换,并更改一些 标志便可,ICMP应答包能顺利发出,其余主机也就能成功Ping通这台机器了。

2.Destination host Unreachable

(1) 对方与本身不在同一网段内,而本身又未设置默认的路由,好比上例中A机中不设定默认的路由,运行Ping 192.168.0.4就会出现“Destination host Unreachable”。

(2)或者网络上根本没有这个地址:好比在上图中主机A中PING 192.168.0.7

  

(3)网线出了故障

  这里要说明一下“destination host unreachable”和 “time out”的区别,若是所通过的路由器的路由表中具备到达目标的路由,而目标由于其余缘由不可到达,这时候会出现“time out”,若是路由表中连到达目标的路由都没有,那就会出现“destination host unreachable”。

3.Bad IP address

这个信息表示您可能没有链接到DNS服务器,因此没法解析这个IP地址,也多是IP地址不存在。

4. Unknown host——不知名主机

  这种出错信息的意思是,该远程主机的名字不能被域名服务器(DNS)转换成IP地址

  (1)故障缘由多是域名服务器有故障

  (2)或者其名字不正确

  (3)或者网络管理员的系统与远程主机之间的通讯线路有故障。


-------Traceroute命令------

 Win: Tracert

 Linux: Traceroute

  Tracert(跟踪路由)是路由跟踪实用程序,用于肯定 IP 数据报访问目标所采起的路径。  

  通 过Traceroute咱们能够知道信息从你的计算机到互联网另外一端的主机是走的什么路径。固然每次数据包由某一一样的出发点(source)到达某一同 样的目的地(destination)走的路径可能会不同,但基本上来讲大部分时候所走的路由是相同的。

  UNIX系统中,咱们称之为 Traceroute,MS Windows中为Tracert。

Tracert 工做原理

经过向目标发送不一样 IP 生存时间 (TTL) 值的“Internet 控制消息协议 (ICMP)”回应数据包,Tracert 诊断程序肯定到目标所采起的路由。要求路径上的每一个路由器在转发数据包以前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。

  Traceroute经过发送小的数据包到目的设备直到其返回,来测量其须要多长时间。一条路径上的每一个设备Traceroute要测3次。

  输出结果中包 括:

  (1)每次测试的时间(ms)  

  (2)设备的名称(若有的话)

  (3)其IP地址。

windows之tracert

  tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name

参数
-d
指定不对计算机名解析地址(直接返回的全是IP),不然,须要检索是否有这个IP对应的域名,而后显示域名+IP
-h maximum_hops
指定查找目标的跳转的最大数目。
-jcomputer-list
指定在 computer-list 中松散源路由。
-w timeout
等待由 timeout 对每一个应答指定的毫秒数。
target_name
目标1. 主机域名(2. IP)。

  

说明:

(1)从返回的IP特征能够断定,本次的“路由追踪”通过了那些网段。且一共通过了20个节点到达目的IP。

(2)中间这三列,单位是ms,是表示咱们链接到每一个路由节点的速度  返回速度和  屡次连接反馈的平均值

(3)后面的IP,就是每一个路由(路由器)节点对应的IP

  若是在测试的时候,大量的都是*和返回超时,那就说明这个IP,在各个路由节点都有问题。

  其中带有星号(*)的信息表示该次ICMP包返回时间超时。

(4)记录按序列号从1开始,每一个纪录就是一跳 ,每跳表示一个网关

linux的traceroute

  traceroute[参数][主机]

  具体参数格式:traceroute [-dFlnrvx] [-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p< 通讯端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包 大小]

-d 使用Socket层级的排错功能。

-f 设置第一个检测数据包的存活数值TTL的大小。

-F 设置勿离断位。

-g 设置来源路由网关,最多可设置8个。

-i 使用指定的网络界面送出数据包。

-I 使用ICMP回应取代UDP资料信息。

-m 设置检测数据包的最大存活数值TTL的大小。

-n 直接使用IP地址而非主机名称。显示IP地址,不查主机名

-p 设置UDP传输协议的通讯端口。

-r 忽略普通的Routing Table,直接将数据包送到远端主机上。

-s 设置本地主机送出数据包的IP地址。

-t 设置检测数据包的TOS数值。

-v 详细显示指令的执行过程。

-w 设置等待远端主机回报的时间。

-x 开启或关闭数据包的正确性检验。

  NAT局域网中,主机到宿主主机的链路。能够看到是从NAT服务器IP中进行路由转换除去的,可是后面通过防火墙,因此出现了***

(1)有时咱们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的状况,可能是防火墙封掉了ICMP的返回信息,因此咱们得不到什么相关的数据包返回数据。

(2)有时咱们在某一网关处延时比较长,有多是某台网关比较阻塞,也多是物理设备自己的缘由。固然若是某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您能够加-n 参数来避免DNS解析,以IP格式输出数据。

(3)若是在局域网中的不一样网段之间,咱们能够经过traceroute 来排查问题所在,是主机的问题仍是网关的问题。若是咱们经过远程来访问某台服务器遇到问题时,咱们用到traceroute 追踪数据包所通过的网关


-------host命令------

linux:host

Win: nslookup

  host,经常使用来分析域名的工具。能够测试域名系统是否正常。

  目前只有linux系统中提供host命令。

1. 追踪地址

(1)显示域名的全部iP

  host 域名

  (1)显示其余的域名,(2)显示全部有效的IP,(3)测试一个域名是不是另外一个域名的别名

  

  

(2)要显示地址为 202.106.121.66 的主机名

host命令是经常使用的分析域名查询工具,能够用来测试域名系统工做是否正常

来自: http://man.linuxde.net/host
host命令是经常使用的分析域名查询工具,能够用来测试域名系统工做是否正常。

来自: http://man.linuxde.net/host
host命令是经常使用的分析域名查询工具,能够用来测试域名系统工做是否正常。

来自: http://man.linuxde.net/host

Win之nslookup:   name Search -- ns

  Nslookup 是一个监测网络中DNS服务器是否能正确实现域名解析的命令行工具。它在 Windows NT/2000/XP(在以后的windows系统也均可以用的,好比win7,win8等) 中都可使用,

 

测试Win环境测试域名的地址IP

  

(1)以上结果显示,正在工做的 DNS 服务器的主机名为 server20.hust.edu.cn,它的(DNS) IP 地址是202.114.40.242 ,而域名tencetn.com 所对应的 IP 地址为 180.163.32.150 。域名系统正常。

  若是域名不存在,则显示:

  

(2)若是一个正确的域名,可是不能解析,如上图所示

  说明测试主机在目前的网络中,根本没有找到可使用的 DNS 服务器。此时,咱们要对整个网络的连通性做全面的检测,并检查DNS服务器是否处于正常工做状态,采用逐步排错的方法,找出 DNS 服务不能启动的根源。

 


 

-------tcpdump抓包命令------

 

linux:tcpdump

TCPdump抓包命令

 

  若是,ping,或者 route printe ,以及 host 没法检测网络古装,能够经过“分析数据包”的流向。来分析网络。

  tcpdump必须使用root的身份启动。tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。 tcpdump提供了源代码,公开了接口,所以具有很强的可扩展性,对于网络维护和入侵者都是很是有用的工具。

  根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump能够将网络中传送的数据包的“头”彻底截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

TCPdump命令格式

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [ 表达式 ]

通常咱们的服务器里边只有一个网卡,使用tcpdump能够直接抓取数据包,可是这样查看太麻烦了,因此都会添加参数来进行获取的。

(1)参数选项

-a  将 网络地址广播地址转变成名字;
-d  将匹配信息包的代码以人们可以理解的汇编格式给出;
-dd  将匹配信息包的代码以 c语言 程序段的格式给出;
-ddd  将匹配信息包的代码以十进制的形式给出;
-e  在输出行打印出数据链路层的头部信息;
-f  将外部的Internet地址以数字的形式打印出来;
-l  使标准输出变为缓冲行形式;
-n  不把网络地址转换成名字;
-nn  直接以IP和Port端口号显示,不适用主机域名与服务名显示。
-X  直接列出hex以及ASCII,显示16进制,以及ASCII数据包的内容,这样能够监听数据包的内容。
-t  在输出的每一行不打印 时间戳
-v  输出一个稍微详细的信息,例如在ip包中能够包括ttl和服务类型的信息;
-vv  输出详细的报文信息;
-c  在收到指定的包的数目后,tcpdump就会中止;
-F  从指定的文件中读取表达式,忽略其它的表达式;
-i  指定监听的网络接口; 本主机;eth0
-r  从指定的文件中读取包(这包通常经过-w选项产生);
-w  直接将包写入文件中,并不分析和打印出来;
-T  将监听到的包直接解释为指定的类型的 报文,常见的类型有rpc (远程过程调用)和snmp(简单 网络管理协议;)
(2)表达式
  表达式是一个正则表达式,tcpdump利用它做为过滤报文的条件,若是一个报文知足表达式的条件,则这个报文将会被捕获。若是没有给出任何条件,则网络上全部的信息包将会被截获。
  在表达式中通常以下几种类型的关键字:
1. 一种是关于类型的关键字,主要包括host,net,port,
  以下,若是没有指定类型,缺省的类型是host.
  •    host 210.27.48.2,指明 210.27.48.2是一台主机
  •   net 202.0.0.0 指明202.0.0.0是一个网络地址  
  •   port 23   指明端口号是23。
2. 第二种是肯定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。
  以下,若是没有指明方向关键字,则缺省是src or dst关键字。
  •   src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 
  •   dst net 202.0.0.0 指明目的网络地址是202.0.0.0
3. 第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。
  Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具备相似的源地址和目的地址,因此能够将fddi协议包看成ether的包进行处理和分析。其余的几个关键字就是指明了监听的包的协议内容。若是没有指定任何协议,则tcpdump将会
监听全部协议的信息包。
 
4. 除了这三种类型的关键字以外,其余重要的关键字以下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||';
   这些关键字能够组合起来构成强大的组合条件来知足人们的须要,下面举几个例子来
  说明。
(1)想要截获全部210.27.48.1 的 主机收到的发出的全部的数据包:
#tcpdump host 210.27.48.1
(2) 想要截获 主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通讯,使用命令:(在命令行中适用括号时,必定要带向转义\
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
(3) 若是想要获取主机210.27.48.1除了和主机210.27.48.2以外全部主机通讯的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
(4)若是想要获取主机210.27.48.1接收或发出的telnet包,使用以下命令:
#tcpdump tcp port 23 host 210.27.48.1
(5) 对本机的udp 123 端口进行监视 123 ntp的服务端口
tcpdump udp port 123
(6) 监视指定网络的数据包
  打印本地主机与Berkeley网络上的主机之间的全部通讯数据包(nt: ucb-ether, 此处可理解为'Berkeley网络'的网络地址,此表达式最原始的含义可表达为: 打印网络地址为ucb-ether的全部数据包)
tcpdump net ucb-ether
  打印全部经过网关snup(IP)的ftp数据包(注意, 表达式被单引号括起来了, 这能够防止shell对其中的括号进行错误解析)
tcpdump 'gateway snup and (port ftp or ftp-data)'
打印全部源地址或目标地址是本地主机的IP数据包(若是本地网络经过网关连到了另外一网络, 则另外一网络并不能算做本地网络.(nt: 此句翻译曲折,需补充).localnet 实际使用时要真正替换成本地网络的名字)
tcpdump ip and not net localnet
(7)我截取本机(192.168.31.147)和主机114.114.114.114之间的数据

tcpdump -n -i eth0 host 192.168.31.147 and 114.114.114.114

(8)截取所有进入服务器的数据可使用如下的格式

tcpdump -n -i eth0 dst 192.168.31.147

或者服务器有多个IP 可使用参数

tcpdump -n -i eth0 dst 192.168.31.147  or  192.168.31.157

(9)抓取所有进入服务器的TCP数据包使用如下的格式,你们能够参考下

 tcpdump -n -i eth0 dst 192.168.31.147 or 192.168.31.157 and tcp

从本机出去的数据包

tcpdump -n -i eth0 src 192.168.31.147 or 192.168.31.157

tcpdump -n -i eth0 src 192.168.31.147 or 192.168.31.157 and port ! 22 and tcp

  还有更神奇的用法。当咱们使用tcpdump在Router上面监听明文的传输数据时,例如FTP传输协议,你以为会发生什么问题呢?咱们先在主机端执行 “tcpdump -i lo port 21 -nn –X”,而后再以FTP登陆本机,并输入帐号与密码,结果你就经过Tcpdump来hack用户名密码:

  以下是在虚拟机NAT架构中主机的网络分析:

  

  (1)上面:虚拟主机ping(192.168.134.133) ,宿主主机(222.20.109.61)的数据包状况

  每一次请求,都紧跟着一个回复报文。

  (2)下面是:虚拟主机ping www.baidu.com执行过程

  1. 宿主主机(192.168.134.133)须要请求一次本网络中的DNS服务器(192.168.134.2),

  请求与返回报文,获取域名www.baidu.com 的真实有效的IP,119.75.217.109

  2. 宿主主机(192.168.134.133)请求真实ip(119.75.217.109), 注意须要经过NAT服务器(192.168.134.2)转发处理。

  133 -> 真实IP  : 这个过程过转接到NAT服务器,数据包的内容是NAT中与133本机的链接信息。

  133-> NAT 02  :这个过程,就是根据上一步的返回,本机133将直接经过NAT进行网络地址转换 ,【后续 转换后地质-> 真实IP,这个过程不会被监听】

  NAT02 -> 133   : NAT转换地址后,访问真实iP的返回内容,转发给本主机

  经过Seq标志,能够继续 与NAT02通讯过程。重复。

  


 

-------ping ip, arp -n 获取对方ip的mac地址------

  ping -c 4 ip;

  arp -n ;

  执行上述命令后,便可获取对方Ip所在的网卡地址,即MAC

 

endl;

相关文章
相关标签/搜索