Linux ping命令简介

0    487    5

👉 本文共约8354个字,系统预计阅读时间或需32分钟。

什么是 Ping

ping是一种计算机网络工具,用来测试数据包能否透过IP协议到达特定主机。ping的运作原理是向目标主机传出一个ICMP echo@要求数据包,并等待接收echo回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。———— 维基百科

我们在网络通信的过程中,常常使用 ping 某一个 IP 地址或者某个域名看下基本连接是否正常;是否有丢包;是否有网络延迟。ping 就是我们经常用来作为网络连接通信的测试“指令”。

在网络中ping是一个十分强大的TCP/IP工具。它的作用主要为:

1、用来检测网络的连通情况和分析网络速度

2、根据域名得到服务器IP

3、根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。

我们通常会用它来直接ping ip地址,来测试网络的连通情况。

图片

类如这种,直接ping ip地址或网关,ping通会显示出以上数据,有朋友可能会问,bytes=32;time<1ms;TTL=128 这些是什么意思。

bytes值:数据包大小,也就是字节。

time值:响应时间,这个时间越小,说明你连接这个地址速度越快。

TTL值:Time To Live,表示DNS记录在DNS服务器上存在的时间,它是IP协议包的一个值,告诉路由器该数据包何时需要被丢弃。TTL的简单含义是,解析程序应在查询过期之前缓存DNS查询多长时间,并且需要完成一个新查询。这些TTL值在操作系统之间有所不同。在这里,您可以找到服务器范围的TTL值。参考 subinsb。

我们可以通过Ping返回的TTL值大小,粗略地判断目标系统类型是Windows系列还是UNIX/Linux系列。

这些TTL值在操作系统之间有所不同。在这里,您可以找到服务器范围的TTL值。

Device / OSVersionProtocolTTL
AIXTCP60
AIXUDP30
AIX3.2, 4.1ICMP255
BSDIBSD/OS 3.1 and 4.0ICMP255
CompaTru64 v5.0ICMP64
CiscoICMP254
DEC PathworksV5TCP and UDP30
FoundryICMP64
FreeBSD2.1RTCP and UDP64
FreeBSD3.4, 4.0ICMP255
FreeBSD5ICMP64
HP-UX9.0xTCP and UDP30
HP-UX10.01TCP and UDP64
HP-UX10.2ICMP255
HP-UX11ICMP255
HP-UX11TCP64
Irix5.3TCP and UDP60
Irix6.xTCP and UDP60
Irix6.5.3, 6.5.8ICMP255
juniperICMP64
MPE/IX (HP)ICMP200
Linux2.0.x kernelICMP64
Linux2.2.14 kernelICMP255
Linux2.4 kernelICMP255
LinuxRed Hat 9ICMP and TCP64
MacOS/MacTCP2.0.xTCP and UDP60
MacOS/MacTCPX (10.5.6)ICMP/TCP/UDP64
NetBSDICMP255
Netgear FVG318ICMP and UDP64
OpenBSD2.6 & 2.7ICMP255
OpenVMS07.01.2002ICMP255
OS/2TCP/IP 3.064
OSF/1V3.2ATCP60
OSF/1V3.2AUDP30
Solaris2.5.1, 2.6, 2.7, 2.8ICMP255
Solaris2.8TCP64
StratusTCP_OSICMP255
StratusTCP_OS (14.2-)TCP and UDP30
StratusTCP_OS (14.3+)TCP and UDP64
StratusSTCPICMP/TCP/UDP60
SunOS4.1.3/4.1.4TCP and UDP60
SunOS5.7ICMP and TCP255
UltrixV4.1/V4.2ATCP60
UltrixV4.1/V4.2AUDP30
UltrixV4.2 – 4.5ICMP255
VMS/MultinetTCP and UDP64
VMS/TCPwareTCP60
VMS/TCPwareUDP64
VMS/Wollongong1.1.1.1TCP128
VMS/Wollongong1.1.1.1UDP30
VMS/UCXTCP and UDP128
Windowsfor WorkgroupsTCP and UDP32
Windows95TCP and UDP32
Windows98ICMP32
Windows98, 98 SEICMP128
Windows98TCP128
WindowsNT 3.51TCP and UDP32
WindowsNT 4.0TCP and UDP128
WindowsNT 4.0 SP5-32
WindowsNT 4.0 SP6+128
WindowsNT 4 WRKS SP 3, SP 6aICMP128
WindowsNT 4 Server SP4ICMP128
WindowsMEICMP128
Windows2000 proICMP/TCP/UDP128
Windows2000 familyICMP128
WindowsServer 2003128
WindowsXPICMP/TCP/UDP128
WindowsVistaICMP/TCP/UDP128
Windows7ICMP/TCP/UDP128
WindowsServer 2008ICMP/TCP/UDP128
Windows10ICMP/TCP/UDP128

ping命令除了直接ping网络的ip地址,验证网络畅通和速度之外,它还有这些用法。

图片

Ping 的工作原理

在维基百科中解释有说明, Ping 的原理是 ICMP 协议.

什么是 ICMP 协议

ICMP 的全称是 Intent Control Message Protocol, 中文过来就是 互联网控制报文协议

网络数据包在庞大的网络中会很多各种不同情况。如果一定需要举一个例子来比如的话,用相当于兵种的侦察兵。时刻给大部队探测前方的情况。以便后方的大部队能够根据不同情况做出不同的调整。所以 ICMP 经常用于网络环境的测试。

互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于TCP/IP网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。 —— 维基百科

ICMP 协议的格式

用图文表示:

img

ICMP 报文封装在 IP 包里面。ICMP 的报文类型根据类型和代码有很多,文章后面有来自维基百科的完整的表格。但是主要分为两类:
A、查询报文
B、差错报文

查询报文 (Echo Request与 Echo Reply)

定义:发送端主动发起请求,并且获取到应答。

常见应用:Ping

Ping 就是主动请求,获取到主动应答。但是 Ping 是在原生的 ICMP 中添加了自定义格式区域。例如 Ping 中放了发送的请求时间,以此计算出路程。所以,其实在 Ping 的报文中会加入序号,以用来区分数据包,从而提高计算时间或者路程的准确性。

差错报文

主要有以下几种:

1. 源抑制

发送端发送大量数据时,可能会导致网络( 路由器 )过载,此时过载处可以向发送端发送源抑制的消息,让他降低发送速度。

2. 终点不可到达

网络信息不能到达终点,就会给发送端发送一个目的不可到达的信息。告诉发送端可能是设备故障而引起关闭(情况之一)。然后这种又可以再次细分:
A、网络不可达 — 代码为 0,
B、主机不可达 — 代码为 1.
C、协议不可达 — 代码为 2.
D、端口不可达 — 代码为 3.
E、需要分段 - 代码为 4.( 必须把数据分段才能去到终点 )

3. 超时

网络包超过设置的在网络中的生存时间,还没有达到。

4. 路由重定向

定义数据包的路由股则。因为大部分的时候,路由规则是通过相关协议算法生成的,有些时候重新定义过之后,会让这个数据包绕的更远。

常见应用:Traceroute
Traceoute 有点像是在不断试错的意思。是用来侦测主机到目的主机之间所经路由情况的重要工具。Ping 我们知道是可以知道这条大路通不通的,Traceoute 通过设置 TTL 知道到底是哪个路由器不通。
TTL : 数据包在网络中生存时间,也就是通过数据被路由器转发的次数,没转发一次就减一。知道为 0 的时候就抛弃。
Traceroute 的原理:它收到目的主机的 IP 后,首先给目的主机发送一个 TTL=1 的 UDP 数据包,而经过的第一个路由器收到这个数据包以后,就自动把 TTL 减 1,而 TTL 变为 0 以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的 ICMP 数据报给主机。如此循环就可以知道所有的路由 IP 了。( ICMP 出错了就会回错误包 )

通常 Traceoute 的目的端口设置的是一个大于 30000 的值( 一般的应用端口号远小于这个数 )。所以如果回复的是 “端口不可达”,那就说明到达终点,否则这个信息就会超时。以此确保 消息是否到达终点

Traceoute 还有一个有意思的功能,就是确定 MTU(数据最大传输单元),Traceoute 通常对数据不分段,就直接发送,如果如果遇到过程中某个路由转发,出现返回 ICMP 需要分段的错误,就把数据进行拆分,直到最后到达终点。就验证出 MTU。

ICMP 其实还有很多意思的地方,这边就简单的介绍到这里。
附表:

Linux ping命令简介

其它基础用法

ping -t的使用

不间断地Ping指定计算机,直到管理员中断。

这就说明电脑连接路由器是通的,网络效果很好。下面按按住键盘的Ctrl+C终止它继续ping下去,就会停止了,会总结出运行的数据包有多少,通断的有多少了。

图片

ping -a的使用

ping-a解析计算机名与NetBios名。就是可以通过ping它的ip地址,可以解析出主机名。当你遇到一个ip,却不知道他是那个设备时,这时你可以通过ping -a知道它的主机名。

图片

ping -n的使用

在默认情况下,一般都只发送四个数据包,通过这个命令可以自己定义发送的个数,对衡量网络速度很有帮助,比如我想测试发送10个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下获知:

从以上我就可以知道在给47.93.187.142发送10个数据包的过程当中,返回了10个,没有丢失,这10个数据包当中返回速度最快为32ms,最慢为55ms,平均速度为37ms。说明我的网络良好。

如果对于一些不好的网络,比如监控系统中非常卡顿,这样测试,返回的结果可能会显示出丢失出一部分,如果丢失的比较多的话,那么就说明网络不好,可以很直观的判断出网络的情况。

ping -l size的使用

ping-l size:发送size指定大小的到目标主机的数据包。

在默认的情况下Windows的ping发送的数据包大小为32byt,最大能发送65500byt。当一次发送的数据包大于或等于65500byt时,将可能导致接收方计算机宕机。所以微软限制了这一数值;这个参数配合其它参数以后危害非常强大,比如攻击者可以结合-t参数实施DOS攻击。(所以它具有危险性,不要轻易向别人计算机使用)。

例如:ping -l 65500 -t 211.84.7.46

会连续对IP地址执行ping命令,直到被用户以Ctrl+C中断。

这样它就会不停的向211.84.7.46计算机发送大小为65500byt的数据包,如果你只有一台计算机也许没有什么效果,但如果有很多计算机那么就可以使对方完全瘫痪,网络严重堵塞,由此可见威力非同小可。

ping -r count 的使用

这个命令在“记录路由”字段中记录传出和返回数据包的路由,探测经过的路由个数,但最多只能跟踪到9个路由。

ping -n 1 -r 9 202.102.224.25 (发送一个数据包,最多记录9个路由)

将经过 9个路由都显示出来了,可以看图。也就是说可以跟踪ip地址所经过的9个路由,在检查故障时可以快速定位。

图片

如何同时批量ping多个ip地址

1、ping一个网段

对于一个网段ip地址众多,如果单个检测实在麻烦,那么我们可以直接批量ping网段检测,那个ip地址出了问题,一目了然。

先看代码,直接在命令行窗口输入:

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

IP地址段修改成你要检查的IP地址段。

图片

当输入批量命令后,那么它就自动把网段内所有的ip地址都ping完为止。

那么这段“for /L %D in(1,1,255) do ping 10.168.1.%D” 代码是什么意思呢?

代码中的这个(1,1,255)就是网段起与始,就是检测网段192.168.1.1到192.168.1.255之间的所有的ip地址,每次逐增1,直接到1到255这255个ip检测完为止。

2、ping网段升级

上面的命令虽然能批量ping 地址,但是上面代码在命令行窗口显示数量多的时候看起来也很麻烦,那么再升级一下,用下面的代码。

for /L %D in (1,1,255) do ping -n 10.168.1.%D >>a.txt

说明,ip地址是变的,你填你需要测的ip网段就行,a.txt也是变的,可以自已设置名称。

这样就会把结果导入的a.txt文件中,全部IP检查完成后打开a.txt搜索“TTL=”包含它的就是通的地址,没有包含“TTL=”的地址就是不通的。如下图

图片

打开后,就直接搜索没TTL的就可以了。

3、ping网段命令再升级

很多人要说了这样还要搜索,也不是太方便,需要这样查来查去,那么我们再看下,是否有更简便的方法呢?第一监控之前就发过。

答案肯定是有的,我们来看代码。

for /l %D in (1,1,255) do (ping 192.168.1.%D -n 1 && echo 192.168.1.%D>>ok.txt || echo 192.168.1.%D >>no.txt)

这段代码会将ping通的IP和不通的IP分别放到两个文件里面,这样是不是很方便啦,如下图:

图片

这段代码非常实用,在大网络中可以用到,就是大家在输入的时候需要细心,不过也没有关系,可以直接把这个文章收藏,日后要用,直接复制里面代码,然后改下里面ip地址就行了。

4、ping网段命令终极方法

上面提到的三种代码提到的都是针对同一个网段内ip地址批量检测,那么肯定在实际项目中,也可能存不同网段的ip地址需要同时检测,那么怎么办呢?

也有方法,可以把没有规划的ip地址同时批量检测,我们来看下代码:

for /f %D in (ip.txt) do (ping %D -n 1 && echo %i>>ok.txt || echo %D >>no.txt)

看见没有多了一个ip.txt文件,这个文件是要你自己准备的哦,把你ping的地址写到这个文件里面,同时可以ping 1000个ip地址以上,代码会自己读取这个文件里面的ip地址,并且把结果放到两个文件里面去。这里就不给大家截图了很容易理解。

这里面补充下:

上面代码生成的文件在你命令行默认目录下。也就是说如果你的命令行状态是:

"c:\windows\system32>"那么生成的文件就在系统的system32目录下面。如果是"c:\"那么文件就在C盘根目录下。这个可以根据自己的实际情况进行调整。

参考

https://www.jianshu.com/p/e1795962ad76

    头像

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    发表评论

    您的电子邮箱地址不会被公开。

    6 + 1 =

     

    嘿,我是小麦,需要帮助随时找我哦
    • 18509239930
    • 个人微信

    • 麦老师QQ聊天
    • 个人邮箱
    • 点击加入QQ群
    • 个人微店

    • 回到顶部
    返回顶部