zoukankan      html  css  js  c++  java
  • ping命令

    Ping命令是对两个TCP/IP系统连通性进行测试的基本工具,目的是为了测试目标主机是否可达。它利用ICMP回显请求(8,0)和回显应答(0,0)报文,而不用经过传输层(TCP/UDP)。Ping服务器一般在内核中实现ICMP的功能,Ping只有在安装了TCP/IP协议以后才可以使用。

    Ping命令结构
    我们称发送回显请求的Ping程序为客户,被Ping的主机为服务器。
    ICMP回显请求和回显应答报文:
    Ping命令的类型值为8或0,代码值为0。
    标识符:Unix系统在实现Ping程序时把ICMP报文中的标识符字段设置成发送进程的ID号。这样可以区分多个Ping实例。
    序列号:从0开始,每发送一次新的回显请求就加1。通过Ping程序打印出返回的每个分组的序列号来查看是否有分组丢失,失序或重复。
    Ping程序通过在ICMP报文数据中存放发送请求的时间值来计算往返时间。当应答返回时,用当前时间减去存放在ICMP报文中的时间值,即是往返时间。
    ICMP回显请求和回显应答的时间差在4ms以下。
     
    IP记录路由选项
    Ping程序提供了查看IP记录路由选项的功能。Ping程序提供-R选项来记录路由。它使Ping程序在发送出去的IP数据报中设置IP RR选项(该IP数据报包含ICMP回显请求报文)。这样,每个处理该数据报的路由器都把它的IP地址放入选项字段中。当数据报到达目的端时,IP地址清单复制到ICMP回显应答中。这样返回途中所经过的路由器也被加入到清单中。当Ping程序收到回显应答时,它就打印出这份IP地址清单。
    IP记录路由选项的缺点:
    IP首部中只有有限的空间来存放IP地址。IP首部中的首部字段长度是4bit,因此整个IP首部最长只能有15个32bit长的字(即60个字节)。由于IP首部固定长度为20字节,RR选项用去3个字节,还剩下40-3=37个字节用来存放IP地址清单,即37/4=9个IP地址。对于现在的网络中,记录的容量是十分有限的。
    IP数据报中的RR选项的一般格式:
    Code:1个字节。指明IP选项的类型。RR选项的类型是7。
    Len:是RR选项总字段长度。Ping程序一般情况都设置成最大长度39字节,最多可记录9个IP地址。
    Ptr:基于1的指针字段,指向存放下一个IP地址的位置。它的最小值为4,指向存放第一个IP地址的位置。随着每个IP地址存入清单,ptr的值分别为8,12,16…最大到36。当记录下9个IP地址后,ptr的值为40,表示清单已满。
    当路由器在清单中记录IP地址时记录的是出站IP地址。当回显应答到达源主机时候,源主机将自己的出口地址也加入清单中。
     
    IP时间戳选项
    IP时间戳选项与记录路由选项类似。IP时间戳选项的格式:
    时间戳选项的代码为0x44。其他两个字段len和ptr与记录路由选项相同:选项的总长度(一般为36或40)和指向下一个可用空间的指针(5,9,13等)
    OF字段表示溢出字段,FL字段表示标志字段。时间戳选项的操作根据标志字段进行。
     

     

    标志
    描述
    0
    只记录时间戳
    1
    记录经过的每台路由器的IP地址和时间戳,在选项列表中只有存放4对地址和时间戳的空间
    3
    发送端对选项列表进行初始化,存放了4个IP地址和4个取值为0的时间戳值。只有当列表中的下一个IP地址与当前路由器地址相匹配时,才记录它的时间戳。

     

     
    如果路由器由于没有空间而不能增加时间戳选项,那么它将增加溢出字段的值。
    如果要同时记录IP地址和时间戳(标志位为1),那么就可以同时存入其中的四对值。只记录时间戳是没有意义的。因为没有标明时间戳与路由器之间的对应关系。
     
    扩展Ping命令
    -t  
    不停的ping目的主机,直到按下Control-C中断。 此功能没有什么特别的技巧,不过可以配合其他参数使用。
    -a  
    解析目的主机的计算机名。
    C:/D-Lab>ping -a 192.168.1.23
    Pinging practice.dlab.com [192.168.1.23] with 32 bytes of data:
    Reply from 192.168.1.23: bytes=32 time<10ms TTL=254
    Reply from 192.168.1.23: bytes=32 time<10ms TTL=254
    Reply from 192.168.1.23: bytes=32 time<10ms TTL=254
    Reply from 192.168.1.23: 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的主机名为practice.dlab.com。
     
    -n  
    发送指定的Echo数据包数。
    在默认情况下,一般只发送四个数据包。通过-n选项可以定义发送的个数,对衡量网络速度很有帮助。比如想测试发送35个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下获知:
    C:/D-Lab>ping -n 35 211.17.216.134
    Pinging 211.17.216.134 with 32 bytes of data:
    Reply from 211.17.216.134: bytes=32 time=50ms TTL=241
    Reply from 211.17.216.134: bytes=32 time=50ms TTL=241
    Reply from 211.17.216.134: bytes=32 time=50ms TTL=241
    Request timed out.
    ………………
    Reply from 211.17.216.134: bytes=32 time=50ms TTL=241
    Reply from 211.17.216.134: bytes=32 time=50ms TTL=241
    Ping statistics for 211.17.216.134:
    Packets: Sent = 50, Received = 48, Lost = 2 (4% loss),
    Approximate round trip times in milli-seconds:
    Minimum = 40ms, Maximum = 51ms, Average = 46ms
    由上可知发向目的主机211.17.216.134的35个数据包的当中,返回了48个,其中有两个由于未知原因丢失。这48个数据包当中返回速度最快为40ms,最慢为51ms,平均速度为46ms。
     
    -l  
    定义echo数据包大小。
    在默认的情况下windows下的ping发送的数据包大小为32byte,也可以通过-L选项定义它的大小,但上限只能发送65500byte。由于Windows系统的安全漏洞,当向对方一次发送的数据包大于或等于65532时,对方就很有可能down掉。
    C:/D-Lab>ping -l 65500 -t 192.168.25.123    //不停的向IP为192.168.25.123发送大小为65500字节的数据包,此命令带有攻击性。
    Pinging 192.168.25.123 with 65500 bytes of data:
    Reply from 192.168.25.123: bytes=65500 time<10ms TTL=254
    Reply from 192.168.25.123: bytes=65500 time<10ms TTL=254
    ………………
    这种攻击的后果是使目的主机网络资源枯竭,各种服务被中断。
     
    -f  
    在数据包中发送“不要分段”标志。
    一般所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再对发送的数据包进行分段处理。
    带有-f选项的ping是一种快速ping。使得ping发出的数据包速度和数据包从远程主机返回一样快,或者更快,达到每秒100次。在这种方式下,每个请求用一个句点表示,对于每一个响应打印一个空格键。
     
    -i  
    指定TTL值在对方的系统里停留的时间。此参数同样是帮助检查网络运转情况的。
     
    -v  
    将“服务类型”字段设置为 tos 指定的值。
     
    -r  
    在“记录路由”字段中记录发出和返回数据包的路由。指定的 count 值最小是 1,最大是 9 。
    在一般情况下你发送的数据包是通过一个个路由才到达目的。通过此参数就可以设定想探测经过的路由的个数,不过限制数为9个,也就是说只能跟踪到最多9个路由。
    C:/D-Lab>ping -n 1 -r 9 202.96.105.101    //发送一个数据包,记录9个路由
    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
     
    -s  
    指定 count 指定的路由和对应的时间戳。此参数和-r类似,只是这个参数不记录数据包返回所经过的路由,最多只能记录4个。
     
    -j
    宽松的源站选路(路由稀疏源)。利用 computer-list 指定的主机列表路由数据包。在路经列表中的主机之间可以经过其它未在列表上的主机。IP 允许的最大数量为 9。
     
    -k
    严格的源站选路(路由严格源)。利用 computer-list 指定的计算机列表路由数据包。在路经列表中的主机之间不可以经过其它未在列表上的主机。IP 允许的最大数量为 9。
     
    -w
    指定超时间隔,单位为毫秒。
     
    判断目标主机系统
    可以通过ping回显应答的TTL值大小,粗略的判断目标主机的系统类型是Windows还是UNIX/Linux。一般情况下Windows系统返回的TTL值在100-130之间,而UNIX/Linux系统返回的TTL值在240-255之间
     
  • 相关阅读:
    括号序列
    秘密信息
    大奖赛
    订单
    摆花
    利用spring自己实现观察者模式
    Spring操作mongo排序,限制查询记录数
    Hbse的读写过程
    使用aop记录数据库操作的执行时间
    分享一个关于jackson的Json工具类
  • 原文地址:https://www.cnblogs.com/chengliangsheng/p/3598823.html
Copyright © 2011-2022 走看看