ping 命令常用操作
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
# 输出省略 ...