ping命令也许是IT人士使用的最频繁的命令之一,判断一个人是否真正懂电脑的最简单方法是看他会不会使用ping命令,在这篇文章中,我将尝试以简洁的方式向大家介绍ping命令的一些使用技巧,也许其中有你不曾掌握的:)

Are you OK?
注:不同的操作系统中都有ping工具,虽然使用的都是ICMP协议,但其支持的功能及参数都不尽相同,在Windows中ping命令的功能相对Linux等*nix平台中的ping命令功能会简单一些。
使用-a参数获取指定IP的域名
通常,我们通过ping指定的域名来获得这个域名绑定的IP地址,在Windows下,反过来我们还可以使用-a参数来获得指定IP的域名,在下面的例子中我们获得8.8.8.8的PTR记录为dns.google:
C:Windowssystem32>ping -a 8.8.8.8Pinging dns.google [8.8.8.8] with 32 bytes of data:Reply from 8.8.8.8: bytes=32 time=28ms TTL=52Reply from 8.8.8.8: bytes=32 time=30ms TTL=52Reply from 8.8.8.8: bytes=32 time=28ms TTL=52Reply from 8.8.8.8: bytes=32 time=28ms TTL=52Ping statistics for 8.8.8.8: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds: Minimum = 28ms, Maximum = 30ms, Average = 28msC:Windowssystem32>
使用-S/-I参数指定源IP
如果我们的系统有多个IP地址,可以使用-S(Windows)参数或-I(Linux)参数指定Ping数据包的源IP:
C:Windowssystem32>ping -S 192.168.30.11 192.168.30.254Pinging 192.168.30.254 from 192.168.30.11 with 32 bytes of data:Reply from 192.168.30.254: bytes=32 time<1ms TTL=64Reply from 192.168.30.254: bytes=32 time<1ms TTL=64Reply from 192.168.30.254: bytes=32 time<1ms TTL=64Reply from 192.168.30.254: bytes=32 time<1ms TTL=64Ping statistics for 192.168.30.254: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0msC:Windowssystem32>
如果是Linux系统则使用-I参数,-I可以指定接口名或者IP地址:
root@kali:~# ping -I 192.168.30.21 192.168.30.254PING 192.168.30.254 (192.168.30.254) from 192.168.30.21 : 56(84) bytes of data.64 bytes from 192.168.30.254: icmp_seq=1 ttl=64 time=1.29 ms64 bytes from 192.168.30.254: icmp_seq=2 ttl=64 time=0.344 ms64 bytes from 192.168.30.254: icmp_seq=3 ttl=64 time=0.367 ms^C--- 192.168.30.254 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2024msrtt min/avg/max/mdev = 0.344/0.667/1.292/0.441 msroot@kali:~# root@kali:~# ping -I eth1 192.168.30.254PING 192.168.30.254 (192.168.30.254) from 192.168.30.21 eth1: 56(84) bytes of data.64 bytes from 192.168.30.254: icmp_seq=1 ttl=64 time=0.522 ms64 bytes from 192.168.30.254: icmp_seq=2 ttl=64 time=0.531 ms64 bytes from 192.168.30.254: icmp_seq=3 ttl=64 time=0.235 ms^C--- 192.168.30.254 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2035msrtt min/avg/max/mdev = 0.235/0.429/0.531/0.137 msroot@kali:~#
使用-i参数指定发包速度
在Windows中,ping的时间间隔为1秒钟且不能更改,而在Linux中可使用-i参数指定,普通用户权限只能指定大于0.2秒的间隔,如:
msf@kali:~$ ping -i 0.1 192.168.30.254PING 192.168.30.254 (192.168.30.254) 56(84) bytes of data.ping: cannot flood; minimal interval allowed for user is 200msmsf@kali:~$ ping -i 0.2 192.168.30.254PING 192.168.30.254 (192.168.30.254) 56(84) bytes of data.64 bytes from 192.168.30.254: icmp_seq=1 ttl=64 time=0.403 ms64 bytes from 192.168.30.254: icmp_seq=2 ttl=64 time=0.507 ms64 bytes from 192.168.30.254: icmp_seq=3 ttl=64 time=0.471 ms^C--- 192.168.30.254 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 407msrtt min/avg/max/mdev = 0.403/0.460/0.507/0.043 msmsf@kali:~$
而在苹果macOS系统中,普通用户只能指定大雨0.1秒的时间间隔:
woo@iMac metasploit-framework-5.0.83 % ping -i 0.1 192.168.3.254PING 192.168.3.254 (192.168.3.254): 56 data bytes64 bytes from 192.168.3.254: icmp_seq=0 ttl=64 time=1.975 ms64 bytes from 192.168.3.254: icmp_seq=1 ttl=64 time=1.111 ms
除-i参数外,我们还可以使用-f参数让ping程序卖力地ping,但需要root权限:
root@kali:~# ping 192.168.30.254 -fPING 192.168.30.254 (192.168.30.254) 56(84) bytes of data.^C --- 192.168.30.254 ping statistics ---2603 packets transmitted, 2603 received, 0% packet loss, time 1848msrtt min/avg/max/mdev = 0.137/0.616/45.546/1.106 ms, pipe 2, ipg/ewma 0.710/6.457 msroot@kali:~#
使用-n/-c参数指定ping的次数
在Windows中,我们可以使用-n参数指定需要ping的次数,默认值ping 4个包,如要持续ping则使用-t参数:
C:Windowssystem32>ping 192.168.30.254 -n 1Pinging 192.168.30.254 with 32 bytes of data:Reply from 192.168.30.254: bytes=32 time=1ms TTL=64Ping statistics for 192.168.30.254: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),Approximate round trip times in milli-seconds: Minimum = 1ms, Maximum = 1ms, Average = 1msC:Windowssystem32>
Linux中相应的参数为-c:
msf@kali:~$ ping -c 1 192.168.30.254PING 192.168.30.254 (192.168.30.254) 56(84) bytes of data.64 bytes from 192.168.30.254: icmp_seq=1 ttl=64 time=0.662 ms--- 192.168.30.254 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 0.662/0.662/0.662/0.000 msmsf@kali:~$
使用ping工具来测试网络丢包率
一般来说,ping工具的用途主要用来测试目标IP是否可达,以及到目标网络的丢包率。要获取相对准确的丢包率我们需要用到-W参数(指定能接受的最大延时)、-i以及-c参数:
root@kali:~# ping -c 100 -i 0.1 -q -W 2 124.225.118.86PING 124.225.118.86 (124.225.118.86) 56(84) bytes of data.--- 124.225.118.86 ping statistics ---100 packets transmitted, 100 received, 0% packet loss, time 10050msrtt min/avg/max/mdev = 3.842/4.545/14.154/1.384 msroot@kali:~#
在这个例子中,min、max跟avg值相差越小,mdev(rtt偏差值)越小说明网络质量越好。
使用-l/-s参数指定ping包的payload
Windows的ping包payload长度可以通过-l参数指定,默认为32字节,其内容为a-w连续拼接。在Linux中,则使用-s参数指定ping包的数据长度,默认为48字节,其内容可以通过-p参数指定,默认为固定的内容。感兴趣的同学可以自己抓包研究,这里不做过多的赘述。
根据响应的TTL判断目标的操作系统
Ping命令的响应TTL为初始TTL减去中途经过的路由跳数,Windows操作系统的初始TTL值为128,Linux为64,某些网络设备及Unix系统则为256。所以通过TTL我们可以大概
判断目标IP的操作系统,根据经验,Windows、Linux系统准确度可达99%以上。
以上就是我认为比较有用的一些功能,当然ping命令的用途还不止这些,各位读者如有其它好用的请留言讨论。
ping是笔者掌握的第一个操作系统名,当年笔者正是通过这个ping命令迈进了IT的知识殿堂,所以把它作为我在头条平台分享的第一篇文章的主体,希望各位读者能有所收获。同时也希望各位继续关注我,本人将会继续给大家分享IT方面(尤其是网络安全攻防方向)的知识!