LinuxサーバでpingがないがIPの到達を確認したい時

最近dockerで環境を構築することが多いのですが、極力サイズを抑えるためにNet-Utilityをインストールしない環境が多い…

pingが使えないと通信できているかわからない。もちろんssや、telnet, nc 他よく使うコマンドはもちろん入ってない。しかしecho ならほぼ使える。

ということで、IP reachableであることの確認として、TCPのポートが空いているかを確認することでpingの代わりにする方法をメモしておきます。

timeout 2 bash -c "echo > /dev/tcp/192.168.1.18/3001" 2> /dev/null && echo "OPEN"

TTLでOS判別

あとついでに、pingのttlでOSが判別できます。

$ ping 192.168.1.18
PING 192.168.1.18 (192.168.1.18) 56(84) bytes of data.
64 bytes from 192.168.1.18: icmp_seq=1 ttl=64 time=0.101 ms
64 bytes from 192.168.1.18: icmp_seq=2 ttl=64 time=0.074 ms
^C

$ ping 192.168.1.22
PING 192.168.1.22 (192.168.1.22) 56(84) bytes of data.
64 bytes from 192.168.1.22: icmp_seq=1 ttl=128 time=1078 ms
64 bytes from 192.168.1.22: icmp_seq=2 ttl=128 time=40.7 ms
64 - ホップ数Linux/macOS
128 - ホップ数Windows
256 - ホップ数Solaris/Network機器
タイトルとURLをコピーしました