每日linux命令学习-ping与fping

一、ping 的使用

1.1、简介

ping命令通过发送ICMP(Internet控制消息协议)的ECHO REQUEST到目标网络主机,来测试网络联通性。ping命令支持多平台,linux,unix,windows等都有ping命令。

1.2、使用

ping [-aAbBdDfhLnOqrRUvV46] [-c count] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark] [-M pmtudisc_option] [-N nodeinfo_option] [-w deadline] [-W time‐out] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp option] [hop ...] destination

[]:中括号中为可选参数
destination:为目的网络主机,可以是IP或域名

1.3、参数

参数 详解

-a 带声音的 ping.
-A 自适应ping,根据ping包往返时间确定ping的速度;
-b 允许ping一个广播地址;
-B 不允许ping改变包头的源地址;
-c?count ping指定次数后停止ping;?
-d? 使用Socket的SO_DEBUG功能;
-F flow_label 为ping回显请求分配一个20位的“flow label”,如果未设置,内核会为ping随机分配;
-f 极限检测,快速连续ping一台主机,ping的速度达到100次每秒;
-i?interval 设定间隔几秒发送一个ping包,默认一秒ping一次;
-I?interface 指定网卡接口、或指定的本机地址送出数据包;
-l?preload 设置在送出要求信息之前,先行发出的数据包;
-L 抑制组播报文回送,只适用于ping的目标为一个组播地址
-n? 不要将ip地址转换成主机名;
-p pattern 指定填充ping数据包的十六进制内容,在诊断与数据有关的网络错误时这个选项就非常有用,如:“-p ff”;
-q 不显示任何传送封包的信息,只显示最后的结果
-Q tos 设置Qos(Quality of Service),它是ICMP数据报相关位;可以是十进制或十六进制数,详见rfc1349和rfc2474文档;
-R 记录ping的路由过程(IPv4 only);
注意:由于IP头的限制,最多只能记录9个路由,其他会被忽略;
-r 忽略正常的路由表,直接将数据包送到远端主机上,通常是查看本机的网络接口是否有问题;如果主机不直接连接的网络上,则返回一个错误。
-S sndbuf Set socket sndbuf. If not specified, it is selected to buffer not more than one packet.
-s?packetsize 指定每次ping发送的数据字节数,默认为“56字节”+“28字节”的ICMP头,一共是84字节;
包头+内容不能大于65535,所以最大值为65507(linux:65507, windows:65500);
-t ttl 设置TTL(Time To Live)为指定的值。该字段指定IP包被路由器丢弃之前允许通过的最大网段数;
-T timestamp_option 设置IP timestamp选项,可以是下面的任何一个:
‘tsonly‘ (only timestamps)
‘tsandaddr‘ (timestamps and addresses)
‘tsprespec host1 [host2 [host3]]‘ (timestamp prespecified hops).?
-M hint? 设置MTU(最大传输单元)分片策略。
可设置为:
‘do‘:禁止分片,即使包被丢弃;
‘want‘:当包过大时分片;
‘dont‘:不设置分片标志(DF flag);
-m mark 设置mark;
-v 使ping处于verbose方式,它要ping命令除了打印ECHO-RESPONSE数据包之外,还打印其它所有返回的ICMP数据包;
-U? Print full user-to-user latency (the old behaviour).
Normally ping prints network round trip time, which can be different f.e. due to DNS failures.
-W timeout 以毫秒为单位设置ping的超时时间;
-w deadline deadline;

引用自 <https://www.cnblogs.com/operationhome/p/9848138.html&gt;

1.4、ping的示例

1.4.1、使用ping -c 4 baidu.com 来检查与互联网的连通性

[root@master ~]# ping -c 4 baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=128 time=20.3 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=128 time=28.9 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=3 ttl=128 time=19.0 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=4 ttl=128 time=30.2 ms

--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 19.036/24.651/30.299/4.999 ms

从上可以看到百度服务器的ICMP ECHO RESPOND(返回)了64字节的包,icmp_seq为包序号,ttl为生存时间,time为延时;在下方的统计信息中可以看到发出4个包,收到4个包,丢包率0%,本次执行命令用时3004ms;rtt min/avg/max/mdev分别是最小/平均/最大响应时间和本机耗费时间。

场景1:需要检查发包服务器到某边界网络设备的时延
在各地的局点中选择一部分服务器使用脚本加定时任务ping测固定大小的包到网络设备,在固定时长的情况下,取统计信息;
如果ttl有明显少于其他局点设备的,该局点中间设备可能存在网络环路;
如果平均响应时间较高,且最大或最小响应时间不正常,可能服务器驱动、硬件、或中间链路存在问题;
如果本机耗费时间较高,可能服务器程序(尤其是运行的c程序)、服务器驱动、硬件存在问题

1.4.2、使用ping -6 单纯测试ipv6地址联通性

Ping ipv6的地址需要加上有ipv6地址的网卡

1.4.3、使用-s参数ping大包

[root@master ~]# ping -c 4 -s 65507 192.168.236.21
PING 192.168.236.21 (192.168.236.21) 65507(65535) bytes of data.
^C
--- 192.168.236.21 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

linux系统最大可以ping65507字节的大包,常用于测试链路带宽。

二、fping

2.1、简介

fping可以批量测试网络联通性。fping 与ping的不同之处在于,您可以在命令行上指定任意数量的目标,或指定包含要ping的目标列表的文件。fping不会发送到一个目标,直到它超时或答复为止,它会发出ping数据包并以循环方式移至下一个目标。
在默认模式下,如果目标答复,则将其记录下来并从要检查的目标列表中删除;如果目标在特定时间限制和/或重试限制内未响应,则将其指定为不可访问。 ping还支持向目标发送指定数量的ping或无限循环(如 ping)。与ping不同,fping是在脚本中使用的,因此其输出旨在易于解析。
项目地址:https://github.com/schweikert/fping/

2.2、使用

下载:https://github.com/schweikert/fping/releases/download/v5.0/fping-5.0.tar.gz

2.2.1、编译安装

tar -xzf fping-5.0.tar.gz
cd fping-5.0/
./configure prefix=/usr/local/fping
make ; make install
echo "export PATH=$PATH:/usr/local/fping/sbin" >> /etc/profile

2.3、参数

参数 详解

-a 显示可ping通的目标
-A 将目标以ip地址的形式显示
-b ping 数据包的大小。(默认为56)
-B <f> 设置指数反馈因子到f
-c <num> ping每个目标的次数 (默认为1)
-C <num> 同-c,返回的结果为冗长格式
-e 显示返回数据包所费时间
-f <file> 从文件获取目标列表( - 表示从标准输入)(不能与 -g 同时使用)
-g 通过指定开始和结束地址来生成目标列表(例如:./fping –g 192.168.1.0 192.168.1.255)或者一个IP/掩码形式(例如:./fping –g 192.168.1.0/24)
-i <num> 设置ip的TTL值 (生存时间)
-l 循环发送ping
-m ping目标主机的多个网口
-n 将目标以主机名或域名显示(等价于 -d )
-p <num> 对同一个目标的ping包间隔(毫秒) (在循环和统计模式中,默认为1000)
-q 安静模式(不显示每个目标或每个ping的结果)
-Q <num> 同-q, 但是每n秒显示信息概要
-r <num> 当ping失败时,最大重试次数(默认为3次)
-s 打印最后的统计数据
-t <num> 单个目标的超时时间(毫秒)(默认500)
-u 显示不可到达的目标
-v 显示版本号

2.4、fping 的示例

2.4.1、fping整个网段,显示不存活的设备

[root@master ~]# fping -u -g 106.117.244.230/24
117.244.1
117.244.2
117.244.3
…

2.4.2、fping连续的网段,显示不存活的设备

[root@master ~]# fping -u -g 106.117.244.100 106.117.244.235
106.117.244.100
106.117.244.101
106.117.244.102
…

2.4.3、fping不连续的多ip,显示不存活的设备

iplist文件为ip列表

[root@master ~]# fping -u < iplist 
106.117.244.174
106.117.244.175
106.117.244.176
106.117.244.177
[root@master ~]# fping -u -f iplist
106.117.244.174
106.117.244.175
106.117.244.176
106.117.244.177

2.4.4、fping 显示可达设备往返时间

[root@master ~]# fping -a -e < iplist 
106.117.244.231 (28.8 ms)
1.81.1.223 (42.6 ms)
182.86.84.229 (49.4 ms)
106.117.244.232 (42.7 ms)
125.64.1.232 (36.6 ms)

2.4.5、fping 打印可达设备的统计数据

[root@master ~]# fping -s -a < iplist 
106.117.244.232
182.86.84.229
125.64.1.232

       9 targets
       3 alive
       6 unreachable
       0 unknown addresses

      30 timeouts (waiting for response)
      33 ICMP Echos sent
       3 ICMP Echo Replies received
       0 other ICMP received

 208 ms (min round trip time)
 219 ms (avg round trip time)
 229 ms (max round trip time)
        4.148 sec (elapsed real time)

参考文章:
https://www.cnblogs.com/operationhome/p/9848138.html
https://blog.csdn.net/wz_cow/article/details/80967255

每日linux命令学习-ping与fping

上一篇:什么是DevOps?


下一篇:动态规划法——最长公共子序列问题