1、Windows中的ping, ping6: 发送ICMP ECHO_REQUEST到网络主机。ping6是ICMPv6版的ping实现。
-t:不停地ping指定的主机,要查看统计信息并继续ping,按Ctl+Break;要停止按Ctl+C。
-a:把地址解析成主机名(NetBios名)。
C:\>ping -a 192.168.1.21 Pinging iceblood.yofor.com [192.168.1.21] with 32 bytes of data: Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 Ping statistics for 192.168.1.21: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
从上面就可以知道IP为192.168.1.21的计算机NetBios名为iceblood.yofor.com。
-n count:发送count指定的Echo数据包数。在默认情况下,一般都只发送四个数据包,通过这个命令可以自己定义发送的个数,
对衡量网络速度很有帮助,比如我想测试发送50个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以
下获知:
C:/>ping -n 50 9.125.92.231 Pinging 9.125.92.231 with 32 bytes of data: Reply from 9.125.92.231: bytes=32 time=1ms TTL=124 Reply from 9.125.92.231: bytes=32 time=1ms TTL=124 Reply from 9.125.92.231: bytes=32 time=1ms TTL=124 Reply from 9.125.92.231: bytes=32 time=1ms TTL=124 Request timed out. Reply from 9.125.92.231: bytes=32 time=1ms TTL=124 ...... Reply from 9.125.92.231: bytes=32 time=1ms TTL=124 Request timed out. Reply from 9.125.92.231: bytes=32 time=1ms TTL=124 ...... Reply from 9.125.92.231: bytes=32 time=1ms TTL=124 Reply from 9.125.92.231: bytes=32 time<1ms TTL=124 Ping statistics for 9.125.92.231: Packets: Sent = 50, Received = 48, Lost = 2 (4% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 5ms, Average = 1ms
从以上我就可以知道在给9.125.92.231发送50个数据包的过程当中,返回了48个,其中有两个由于未知原因丢失,还显示了这
48个数据包当中返回速度最快的、最慢的,以及平均速度。
-l size:定义echo数据包大小。在默认的情况下windows的ping发送的数据包大小为32 byte,我们也可以自己定义它的大小,
但有一个大小的限制,就是最大只能发送65500 byte,也许有人会问为什么要限制到65500 byte,因为Windows系列的系统都有一个
安全漏洞(也许还包括其他系统),就是当向对方一次发送的数据包大于或等于65532时,对方就很有可能挡机,所以微软公司为了
解决这一安全漏洞于是限制了ping的数据包大小。虽然微软公司已经做了此限制,但这个参数配合其他参数以后危害依然非常强大,
比如我们就可以通过配合-t参数来实现一个带有攻击性的命令:
C:\>ping -l 65500 -t 192.168.1.21 Pinging 192.168.1.21 with 65500 bytes of data: Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254 Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254 ......
这样它就会不停的向192.168.1.21计算机发送大小为65500 byte的数据包,如果你只有一台计算机也许没有什么效果,但如果
有很多计算机那么就可以使对方完全瘫痪,我曾经就做过这样的试验,当我同时使用10台以上计算机ping一台Win2000 Pro系统的计
算机时,不到5分钟对方的网络就已经完全瘫痪,网络严重堵塞,HTTP和FTP服务完全停止,由此可见威力非同小可。
-f:在数据包中发送“不要分段”标志。在一般你所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会
再分段处理。
-i TTL:指定TTL值在对方的系统里停留的时间。此参数同样是帮助你检查网络运转情况的。
-v TOS:将“服务类型”字段设置为 tos 指定的值。
-r count:记录计数跃点的路由,即在“记录路由”字段中记录传出和返回数据包的路由。在一般情况下你发送的数据包是通过一个个路由才到达对方的,但到底是经过了哪些路由呢?通过此参数就可以设定你想探测经过的路由的个数,不过限制在了9 个,也就是说你只能跟踪到9个路由,如果想探测更多,可以通过其他命令实现。下面示例为发送一个数据包,最多记录9个路由:
C:\>ping -n 1 -r 9 202.96.105.101 Pinging 202.96.105.101 with 32 bytes of data: Reply from 202.96.105.101: bytes=32 time=10ms TTL=249 Route: 202.107.208.187 -> 202.107.210.214 -> 61.153.112.70 -> 61.153.112.89 -> 202.96.105.149 -> 202.96.105.97 -> 202.96.105.101 -> 202.96.105.150 -> 61.153.112.90 Ping statistics for 202.96.105.101: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 10ms, Maximum = 10ms, Average = 10ms
从上面我就可以知道从我的计算机到202.96.105.101一共通过了202.107.208.187 ,202.107.210.214 , 61.153.112.70 , 61.153.112.89 , 202.96.105.149 , 202.96.105.97这几个路由。
-s count:指定count个跃点数的时间戳。此参数和-r差不多,只是这个参数不记录数据包返回所经过的路由,最多也只记录4个。
-j host-list:记录指定主机列表的松散源路由数据包。连续主机可以被中间网关分隔(路由稀疏源),IP允许的最大数量为9。
-k host-list:记录指定主机列表的严格源路由数据包。连续主机不能被中间网关分隔(路由严格源),IP允许的最大数量为9。
-w timeout:等待每次回复的超时间隔,单位为毫秒。此参数没有什么其他技巧。
ping命令的其他技巧:通过ping回显的TTL值判断目标主机的系统类型是Windows还是UNIX/Linux。
TTL是IPv4协议包头中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能导致包的无限循环。一个解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。TTL的初值通常是系统缺省值,是包头中的8位的域。TTL的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL域减1,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。ping和tracerouter都使用TTL值以尝试到达给定的主机或跟踪到那个主机的路由。traceroute把包的TTL值设得较小,使它在到达目的地的路上被各个路由器连续的丢弃。发出包到收到返回的ICMP报文之间的时间用来计算从一个路由器到另一个路由器的时间。
一般不同操作系统的默认TTL值不同,因此我们通常可以通过ping回显的TTL值判断目标系统的类型,当然这是正确的,但不是TTL的功能,只是对TTL理解的一个应用。TTL的值可以修改。有些特殊的系统(如NIDS)会定义特殊的TTL值,以拒绝非法访问数据进入。我们在执行PING命令时可以用-i参数指定TTL值,以指定数据报被路由器丢弃之前允许通过的网段数量。大家可以将TTL设置为0,则该包将被立即丢弃,如ping -i 0 127.0.0.1。TTL是由发送主机设置的,以防止数据包不断在IP互联网络上永不终止地循环。转发IP数据包时,要求路由器至少将TTL减小1。
常见操作系统的默认TTL值:
Windows 95/98/ME系列:32
Windows NT系列(2000/XP/7):128
Linux系列:64
UNIX系列:255
详细的TTL默认值列表如下:
操作系统 TCP传输 UDP传输
AIX 60 30
DEC Patchworks V5 30 30
FreeBSD 2.1 64 64
FreeBSD 3.4, 4.x 255 255
OpenBSD 2.6, 2.7 255 255
NetBSD 255 255
HP-UX 9.0x 30 30
HP-UX 10.01 64 64
HP-UX 10.20 255 255
Irix 5.3, 6.x 60 60
UNIX 255 255
Linux 64 64
MacOS/MacTCP 2.0.x 60 60
OS/2 TCP/IP 3.0 64 64
OSF/1 V3.2A 60 30
Solaris 2.x 255 255
SunOS 4.1.3/4.1.4 60 60
Ultrix V4.1/V4.2A 60 30
VMS/Multinet 64 64
VMS/TCPware 60 64
VMS/Wollongong 1.1.1.1 128 30
VMS/UCX (latest rel.) 128 128
Windows 95/98/NT 3.51 32 32
Windows NT4.0/2000/XP/2003 128 128
Windows Vista/7/2008 128 128
一般情况下Windows系列的系统返回的TTL值在100-130之间,而UNIX/Linux系列的系统返回的TTL值在240-255之间。当然这样的办法只是粗略地判断,因为TTL默认值在系统里是能被手动更改的(但是一般人不会去更改),例如,Windows系列的系统可以通过修改注册表键HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters中的DefaultTTL的值,如修改成000000ff则表示255。常用的值为255---FF,128---80,64----40,32----20。
2、Linux中的ping和ping6: 发送ICMP协议的ECHO_REQUEST数据包给主机或网关,以获取ICMP ECHO_RESPONSE响应。ping命令主要用于确定网络和各外部主机的状态、跟踪和隔离硬件和软件问题、测试、评估和管理网络。每一个ECHO_REQUEST数据包有一个IP头和ICMP头,后跟一个timeval结构和数目不定的填充字节,以填充数据包中剩下的空间。ping6由于使用ICMPv6,因此还能发送节点信息查询(RFC4620)。
ping命令每秒发送一个数据报并且为每个接收到的响应显示一行输出。它会计算信号往返时间和包丢失情况的统计信息,并且在完成之后显示一个简要总结。ping 命令在程序超时或当接收到SIGINT信号时结束。Host参数或者是一个有效的主机名或者是因特网地址。主要选项:
-c count:指定发送的数据包个数。
-f:使用洪泛ping。每一次发送 ECHO_REQUEST,都显示一个句号,而每接收到一个 ECHO_REPLY 信号,就显示一个退格。这就提供了一种对多少信息包被丢弃的信息的快速显示。如果没有设置时间间隔,则时间间隔默认为0,且响应包会尽快返回(或每秒100次,选择较快的一个)。只有超级用户可以使用这个选项。
-i interval:设置包发送之间等待的时间间隔(秒数)。默认等待时间为1秒(在洪泛模式下则为0)。只有超级用户能设置小于0.2秒的值。
-I:指定设备的源地址,可以是IP地址或设备名。
-p pattern:指定多达16个填充字节去填充发送的数据包。这有利于诊断一个网络对数据依赖的问题。例如-p ff全部用1填充信息包。
-R:记录路由。在ECHO_REQUEST包中包含RECORD_ROUTE选项,并且显示返回包中的路由缓存。注意IP头仅仅大到适合9个这样的路由。而且,许多主机和网关忽略这个选项。
-r:信息包绕开正常的路由表以直接发送到目标主机。如果主机不在一个直接连接的网络上,将返回一个错误。这个选项的作用是可以通过一个没有路由经过的接口(用-I选项指定)来ping一台本地主机。
-s:指定数据包的字节数大小,缺省是56,当和8字节的ICMP头合并时被转换成64字节的ICMP数据包。
-t ttl:设置IP包的生存时间为ttl秒。
-W timeout:设置等待回应的超时时间。
ping的返回信息有"Request Timed Out"、"Destination Host Unreachable"和"Bad IP address",还有"Source quench received"。
"Request Timed Out"这个信息表示对方主机可以到达到但是TIME OUT,这种情况通常是对方拒绝接收你发给它的数据包而造成数据包丢失。大多数的原因可能是对方装有防火墙或已下线,也有可能是本机的IP不正确和网关设置错误。
(1)IP不正确:主要是IP地址设置错误或IP地址冲突,这可以利用ipconfig /all这命令来检查。在Windows下IP冲突的情况很少发生,因为系统会自动检测在网络中是否有相同的IP地址并提醒你是否设置正确。在NT中不但会出现"request time out"这提示,有时还会出现"Hardware error"这提示,这个信息比较特殊,不要被它的提示所迷惑。
(2)网关设置错误:网关设置错误主要是网关地址设置不正确或网关没有帮你转发数据,还有就是可能远程网关失效。
注意Windows下面对方主机联不上时(比如网络连接有故障),也会提示Request Timed Out,而在Linux下面则都是"Destination Host Unreachable"。
"Destination Net Unreachable"这个信息表示对方主机不存在或者没有跟对方建立连接。这里要说明一下"destination host unreachable"和"time out"的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其它原因不可到达,这时候会出现"time out",如果路由表中连到达目标的路由都没有,那就会出现"destination host unreachable"。
当你在开始PING网络计算机时如果网络设备出错它返回信息会提示"destination host unreachable"。如果局域网中使用DHCP分配IP时,而碰巧DHCP失效,这时使用PING命令就会产生此错误。因为在DHCP失效时客户机无法分配到IP系统只有自设IP,它往往会设为不同子网的IP,所以会出现"Destination Host Unreachable"。另外子网掩码设置错误也会出现这错误。当然,网络线未接好,也是重要的产生原因。还有一个比较特殊就是路由返回错误信息,它一般都会在"Destination Host Unreachable"前加上IP地址说明哪个路由不能到达目标主机。这说明你的机器与外部网络连接没有问题,但与某台主机连接存在问题。如:From 192.168.148.226 icmp_seq=50 Destination Host Unreachable。
"Bad IP address" 这个信息表示你可能没有连接到DNS服务器所以无法解析这个IP地址,也可能是IP地址不存在。"Source quench received"信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。