高度な ping オプションと実用的なアプリケーション
ping コマンドの基本とその出力の解釈方法を理解したので、いくつかの高度なオプションと、ping がネットワーク診断に役立つ実用的なシナリオを探ってみましょう。
まず、ホストを継続的に監視し、結果をログに記録する簡単なシェルスクリプトを作成しましょう。
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 (Time To Live) の設定:
ping -c 4 -t 64 8.8.8.8
-t オプションは TTL 値を設定します。これは、パケットが破棄される前に通過できるネットワークホップの数を定義します。
- Flood 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 を使用して、宛先までのネットワークパスを簡単に可視化します(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 統計が書式付きで表示されるはずです。これを使用して、それらのパフォーマンスを比較することができます。