高级 ping 选项及实际应用
既然你已经了解了 ping 命令的基础知识以及如何解读其输出,接下来让我们探索一些高级选项,以及 ping 命令在网络诊断中的实际应用场景。
首先,让我们创建一个简单的 shell 脚本,用于持续监控主机并记录结果:
nano ~/project/monitor_host.sh
在编辑器中输入以下脚本:
#!/bin/bash
## 简单的网络监控脚本
HOST=$1
INTERVAL=$2
LOG_FILE=~/project/ping_log.txt
echo "Starting monitoring of $HOST at $(date)" > $LOG_FILE
while true; do
ping -c 1 $HOST | grep "time=" >> $LOG_FILE
sleep $INTERVAL
echo "---" >> $LOG_FILE
done
按 Ctrl+O
保存文件,然后按 Enter
,再按 Ctrl+X
退出编辑器。
使脚本具有可执行权限:
chmod +x ~/project/monitor_host.sh
现在,让我们运行该脚本几秒钟,以监控 Google 的 DNS 服务器:
~/project/monitor_host.sh 8.8.8.8 2 &
sleep 10
kill $!
这将:
- 在后台启动监控脚本
- 等待 10 秒
- 停止脚本
让我们查看日志文件:
cat ~/project/ping_log.txt
你应该会看到带有时间戳的多个 ping 结果。
现在,让我们探索一些更高级的 ping 选项:
- 设置 TTL(生存时间):
ping -c 4 -t 64 8.8.8.8
-t
选项用于设置 TTL 值,该值定义了数据包在被丢弃之前可以经过的网络跳数。
- 洪水 ping(需要 sudo 权限):
sudo ping -c 10 -f 8.8.8.8
-f
选项会尽可能快地发送数据包。这对于压力测试很有用,但使用时需谨慎。
- 有声 ping:
ping -c 4 -a 8.8.8.8
-a
选项会在主机响应时发出可听见的铃声,这在你进行故障排除且不看屏幕时很有用。
- 设置截止时间:
ping -c 4 -w 2 8.8.8.8
-w
选项以秒为单位设置一个截止时间,到达该时间后,无论已发送多少数据包,ping 命令都会停止。
让我们探索一个实际的故障排除场景。我们将使用 traceroute
命令(其工作原理与 ping 类似,但会显示数据包所经过的路径)来简单可视化到目标地址的网络路径:
traceroute 8.8.8.8
此命令会显示数据包到达目标地址所经过的每个跳点(路由器)。你会看到类似以下的内容:
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 _gateway (10.0.2.2) 0.113 ms 0.087 ms 0.083 ms
2 * * *
3 * * *
4 8.8.8.8 14.080 ms 13.849 ms 14.399 ms
星号(*)表示超时或不响应 traceroute
请求的路由器。
现在,让我们创建一个简单的表格,记录不同主机的 ping 结果:
echo -e "Host\tMin Time\tAvg Time\tMax Time\tPacket Loss" > ~/project/ping_results.txt
让我们将 Google 的 DNS 服务器信息添加到表格中:
result=$(ping -c 5 8.8.8.8 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 8.8.8.8 | grep -o "[0-9]*%" | head -1)
echo -e "8.8.8.8\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt
再添加 Cloudflare 的 DNS 服务器信息:
result=$(ping -c 5 1.1.1.1 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 1.1.1.1 | grep -o "[0-9]*%" | head -1)
echo -e "1.1.1.1\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt
让我们查看结果表格:
cat ~/project/ping_results.txt
你应该会看到一个格式化的表格,其中包含两个 DNS 服务器的 ping 统计信息,你可以用它来比较它们的性能。