蛮荆

ping 命令常用操作

2017-01-23

ping 命令作用

ping 命令是网络管理中最常用的工具之一,用于测试网络连接的可达性。 通过向目标主机发送 ICMP请求,并等待目标主机的响应,判断目标主机是否在线以及网络的延迟情况。

ping 基于 ICMP 协议,通过计算 ICMP 回显响应报文与 ICMP 回显请求报文的时间差,来获得往返延时。这个过程并不需要特殊认证,常被很多网络攻击利用,比如端口扫描工具 nmap、组包工具 hping3 等等。为了避免这些问题,很多网络服务会把 ICMP 禁止掉,这种情况下就无法用 ping 测试网络服务的可用性和往返延时。

本文展示一些 ping 命令的常用操作。


基础用法

1. 基本 ping

测试目标主机的连通性:

$ ping dbwu.tech

# 输出如下
# 第一部分,是每个 ICMP 请求的信息,包括 ICMP 序列号(icmp_seq)、TTL(生存时间,或者跳数)以及往返延时(RTT)
ping dbwu.tech (104.21.71.166): 56 data bytes
64 bytes from 104.21.71.166: icmp_seq=0 ttl=51 time=220.515 ms
64 bytes from 104.21.71.166: icmp_seq=1 ttl=51 time=215.660 ms
64 bytes from 104.21.71.166: icmp_seq=2 ttl=51 time=223.046 ms
^C

# 第二部分,则是 ICMP 请求的汇总
--- dbwu.tech ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 215.660/219.740/223.046/3.065 ms

通过输出结果的统计数据,可以得到本机和目标主机的网络延迟 (最小值/平均值/最大值) 以及丢包情况。

除了使用 域名 作为参数之外,也可以使用 IP 地址作为参数:

$ ping 8.8.8.8

# 输出如下
ping 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=52 time=60.760 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=75.570 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=52 time=60.359 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 60.359/65.563/75.570/7.078 ms

2. 限制 ping 次数

默认情况下,ping 会一直发送请求,直到 (Ctrl + C) 手动停止,这时可以使用 -c 选项限制 ping 的次数:

# 指定发送 3 个 ping 请求,然后停止
$ ping -c 3 dbwu.tech

# 输出省略 ...

3. 指定 ping 请求时间的间隔

使用 -i 选项可以指定 ping 请求之间的间隔时间(以秒为单位):

$ ping -i 3 dbwu.tech

# 输出省略 ...
# 每两个 ping 请求之间等待 2 秒

4. 设置 ping 请求超时时间

使用 -W 选项可以设置等待响应的超时时间(以秒为单位):

# 设置超时的时间为 3 秒
# 3 秒之后,输出请求超时
$ ping -W 3 google.com

PING google.com (142.251.8.100): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
^C
--- google.com ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss

5. 修改数据包大小

使用 -s 选项可以设置 ICMP 数据包的大小(以字节为单位):

$ ping -s 0 dbwu.tech

# 输出如下
PING dbwu.tech (172.67.147.110): 0 data bytes
8 bytes from 172.67.147.110: icmp_seq=0 ttl=50
8 bytes from 172.67.147.110: icmp_seq=1 ttl=50
8 bytes from 172.67.147.110: icmp_seq=2 ttl=50
...

6. 使用 IPv6

使用 ping6(在某些操作系统上为 ping -6)来 ping IPv6 地址:

$ ping6 google.com

7. 持续 ping

在 Windows 上,可以使用 -t 选项来持续 ping 目标,直到手动停止(Ctrl+C):

$ ping -t dbwu.tech

Linux 和 Mac 默认情况下 ping 会持续运行,直到手动停止,所以不需要设置该参数。

8. 显示 ping 统计信息

使用 -q 选项可以使 ping 只在开始和结束时显示统计信息,减少屏幕输出:

$ ping -c 3 -q dbwu.tech

# 输出如下
PING dbwu.tech (104.21.71.166): 56 data bytes

--- dbwu.tech ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 215.278/235.462/286.484/29.647 ms

9. ping 广播地址

ping 广播地址来测试局域网内所有主机的联通性:

$ ping -b 192.168.1.255

注意:ping 广播地址可能被网络管理员禁用,防止网络滥用。

$ ping -b 192.168.31.255

# ping 广播被禁用
# 输出如下
ping: bad interface name

高级用法

1. 设置 ping 的 TTL 值

使用 -t 选项(Windows), -TTL 选项(Linux), -m 选项 (Mac) 来设置 TTL(生存时间)值:

# Mac
# 设置 TTL 为 1, 显然会触发 ICMP Time to live exceeded
$ ping -m 1 dbwu.tech

# 输出如下
PING dbwu.tech (104.21.71.166): 56 data bytes
92 bytes from 192.168.31.1: Time to live exceeded
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 8544   0 0000  01  01 a477 192.168.31.138  104.21.71.166

Request timeout for icmp_seq 0

# 设置 TTL 为 64
$ ping -m 64 dbwu.tech

# 正常工作
# 输出如下
PING dbwu.tech (104.21.71.166): 56 data bytes
64 bytes from 104.21.71.166: icmp_seq=0 ttl=51 time=313.260 ms
64 bytes from 104.21.71.166: icmp_seq=1 ttl=51 time=216.286 ms
64 bytes from 104.21.71.166: icmp_seq=2 ttl=51 time=215.767 ms
^C
--- dbwu.tech ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 215.767/248.438/313.260/45.837 ms

2. 强制不进行 DNS 解析

使用 -n 选项可以禁止 ping 进行 DNS 解析,仅显示 IP 地址:

$ ping -n -c 5 dbwu.tech

# 输出如下
PING dbwu.tech (104.21.71.166): 56 data bytes
64 bytes from 104.21.71.166: icmp_seq=0 ttl=51 time=222.654 ms
64 bytes from 104.21.71.166: icmp_seq=1 ttl=51 time=246.398 ms
64 bytes from 104.21.71.166: icmp_seq=2 ttl=51 time=267.387 ms
64 bytes from 104.21.71.166: icmp_seq=3 ttl=51 time=288.952 ms
64 bytes from 104.21.71.166: icmp_seq=4 ttl=51 time=310.073 ms

--- dbwu.tech ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 222.654/267.093/310.073/30.752 ms

3. 指定网卡

在运行多个网卡的主机中,可以使用 -I 选项(Linux)指定网卡进行 ping 操作:

$ ping -I eth0 dbwu.tech

# 输出省略 ...

4. 改变数据包的时间戳格式

使用 -D 选项(Linux)可以在每个 ping 的输出中显示时间戳:

$ ping -D dbwu.tech

# 输出省略 ...

转载申请

本作品采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,商业转载请联系作者获得授权。