Linuxサーバーでpingコマンドの使い方についてまとめます。
相手先のポートが開いているか確認する為に、ポートを指定してPingを行いたい。
Pingの回数を指定して行いたい。などと言った事もあると思います。
Pingの基礎のやり方からオプションまでを、現役エンジニアの筆者が実例を踏まえて説明します。
筆者はWindowsサーバーやLinuxサーバーの運用構築を11年間以上おこなってきました。その経験を元に知識を公開していきます!
LinuxサーバーのPingについて全て理解でき、効率よく疎通確認などが出来る様になります。
Linuxサーバーでpingの使い方
Linuxサーバーでインターネットの接続や他のサーバーや端末などの疎通確認する場合に、Pingコマンドを使用します。
Pingの使い方については、pingコマンドの後にIPアドレスかURLを指定します。
ping IPアドレスもしくはURL
これで指定したIPアドレスかURLに疎通性があるか確認できます。
Linuxサーバーでpingのオプション
Linuxサーバーでpingのオプション一覧まとめ
pingの使い方で紹介したものは基本で、オプションも使用する事が可能です。
オプション | 効果 |
---|---|
-c 回数 | 指定した回数だけPingパケットを送信 |
-i 秒数 | 指定した秒数だけ間隔を空けてPingパケット送信 |
-s | Pingのパケットサイズを指定する |
-q | Pingの統計のみ表示する |
-w 秒数 | Pingを終了する時間を指定する |
-4 IPv4アドレス | IPv4でPingを行う |
-6 IPv6アドレス | IPv6でPingを行う |
-p | パターンを指定してPingパケット送信 |
-t | TTLを指定してPingパケット送信 |
指定した回数だけPingパケットを送信
LinuxサーバーのPingコマンドは永遠に打ち続けます。cオプションでPingの回数を指定できます。
[root@localhost ~]# ping -c 4 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=13.7 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=7.90 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=7.19 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=18.1 ms
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3022ms
rtt min/avg/max/mdev = 7.196/11.744/18.147/4.482 ms
4回のPingで終了しています。
指定した秒数だけ間隔を空けてPingパケット送信
LinuxサーバーのPingコマンドは1秒ごとにPingを打ちます。iオプションでPingの間隔を指定できます。
[root@localhost ~]# ping -c 4 -i 3 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=15.4 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=9.11 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=3.02 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=4.79 ms
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 9029ms
rtt min/avg/max/mdev = 3.026/8.085/15.405/4.771 ms
1秒から3秒間隔でPingを打っていますので、「time」欄が先程の3倍になっています。
Pingのパケットサイズを指定する
LinuxサーバーのPingコマンドは64バイトのPingを打ちます。sオプションでPingのバイト数を指定できます。
[root@localhost ~]# ping -c 4 -s 8 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 8(36) bytes of data.
16 bytes from 192.168.0.1: icmp_seq=1 ttl=64
16 bytes from 192.168.0.1: icmp_seq=2 ttl=64
16 bytes from 192.168.0.1: icmp_seq=3 ttl=64
16 bytes from 192.168.0.1: icmp_seq=4 ttl=64
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3017ms
サイズを8バイト指定しましたので8+8で16バイトのPingを打っています。「64 bytes」の表記が「16 bytes」になりました。
Pingの統計のみ表示する
LinuxサーバーのPingコマンドは1つのPingごとの結果の後に統計が表示されます。qオプションで統計のみ表示できます。
[root@localhost ~]# ping -c 4 -q 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 3.213/6.845/11.182/3.370 ms
Ping単体の結果がなく統計のみ表示されています。
Pingを終了する時間を指定する
LinuxサーバーのPingコマンドはCtrl+Cで終了するか、cオプションで指定した回数が終了するまでPingします。wオプションで終了時間を秒数で指定できます。
[root@localhost ~]# ping -c 4 -w 3 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=12.8 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=17.4 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=7.42 ms
--- 192.168.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2014ms
rtt min/avg/max/mdev = 7.424/12.586/17.477/4.108 ms
Pingの回数を4回と指定していますが、wオプションで3秒と指定しているので3回で終了しています。
パターンを指定してPingパケット送信
Pingコマンドのpオプションで、指定した16進数のデータを送信する事が可能です。
[root@localhost ~]# ping -c 4 -p 4F3B2A 192.168.0.1
PATTERN: 0x4f3b2a
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=11.2 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=7.50 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=5.81 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=3.11 ms
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3020ms
rtt min/avg/max/mdev = 3.111/6.908/11.203/2.933 ms
PATTERNの欄が追加されて、指定したデータをPingしています。
TTLを指定してPingパケット送信
Pingコマンドのtオプションで、指定したTTLでPingする事が可能です。
[root@localhost ~]# ping -c 3 -t 3 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=15.8 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=8.30 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=5.39 ms
--- 192.168.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2009ms
rtt min/avg/max/mdev = 5.396/9.850/15.850/4.406 ms
一つ先のルータにはPingが疎通していますが、、、
[root@localhost ~]# ping -c 3 -t 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 10.1.193.4 icmp_seq=1 Time to live exceeded
From 10.1.193.4 icmp_seq=2 Time to live exceeded
From 10.1.193.4 icmp_seq=3 Time to live exceeded
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2011ms
グーグルのDNSには「Time to live exceeded」となり、Ping疎通できませんでした。
指定したTTL以上離れている機器にはPing疎通できません。TTLより下の機器にはPing疎通できました。
pingでポートを指定して疎通確認する方法
pingでポートを指定して送信したいです。
相手先のサーバーでポートが開いているか確認する為に、ポートを指定してPingを行いたいと思った事はないでしょうか?
そこでnpingコマンドを使用します。
npingでポートを指定して疎通確認するコマンドは以下となります。
nping --tcp 相手先IPアドレス -p ボート番号
npingの実行結果です。
[root@localhost ~]# nping --tcp 192.168.0.1 -p 8080
Starting Nping 0.6.40 ( http://nmap.org/nping ) at 2024-05-06 14:35 JST
SENT (0.0036s) TCP 192.168.0.4:51925 > 192.168.0.1:8080 S ttl=64 id=423 iplen=40 seq=131012984 win=1480
RCVD (0.2058s) TCP 192.168.0.1:8080 > 192.168.0.4:51925 RA ttl=64 id=38056 iplen=40 seq=0 win=0
SENT (1.0058s) TCP 192.168.0.4:51925 > 192.168.0.1:8080 S ttl=64 id=423 iplen=40 seq=131012984 win=1480
RCVD (1.2119s) TCP 192.168.0.1:8080 > 192.168.0.4:51925 RA ttl=64 id=38113 iplen=40 seq=0 win=0
SENT (2.0085s) TCP 192.168.0.4:51925 > 192.168.0.1:8080 S ttl=64 id=423 iplen=40 seq=131012984 win=1480
RCVD (2.0209s) TCP 192.168.0.1:8080 > 192.168.0.4:51925 RA ttl=64 id=38200 iplen=40 seq=0 win=0
SENT (3.0107s) TCP 192.168.0.4:51925 > 192.168.0.1:8080 S ttl=64 id=423 iplen=40 seq=131012984 win=1480
RCVD (3.0293s) TCP 192.168.0.1:8080 > 192.168.0.4:51925 RA ttl=64 id=38201 iplen=40 seq=0 win=0
SENT (4.0166s) TCP 192.168.0.4:51925 > 192.168.0.1:8080 S ttl=64 id=423 iplen=40 seq=131012984 win=1480
RCVD (4.0369s) TCP 192.168.0.1:8080 > 192.168.0.4:51925 RA ttl=64 id=38240 iplen=40 seq=0 win=0
Max rtt: 205.800ms | Min rtt: 12.204ms | Avg rtt: 91.705ms
Raw packets sent: 5 (200B) | Rcvd: 5 (230B) | Lost: 0 (0.00%)
Nping done: 1 IP address pinged in 4.04 seconds
結果がよくわかりません。。。
宛先のポートが開いているか調査したい場合は、Pingではなくnmapを使用しましょう!
nmapでポートが開いているか確認するコマンドは以下です。
nmap -p ポート番号 宛先IP
では実際ポートが開いているか確認してみます。
[root@localhost ~]# nmap -p 22 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2024-05-06 14:43 JST
Nmap scan report for dsldevice.lan (192.168.0.1)
Host is up (0.0081s latency).
PORT STATE SERVICE
22/tcp closed ssh
MAC Address: E4:DA:DF:CE:C4:88 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.56 seconds
22番ポートのsshは「closed」となっており、閉じています。
[root@localhost ~]# nmap -p 80 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2024-05-06 14:44 JST
Nmap scan report for dsldevice.lan (192.168.0.1)
Host is up (0.0046s latency).
PORT STATE SERVICE
80/tcp open http
MAC Address: E4:DA:DF:CE:C4:88 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.51 seconds
80番ポートのhttpは「open」となっており、開いています。
pingでポートを指定して疎通確認する方法はなく、nmapコマンドで代用しましょう!
Linuxサーバーでpingが通らない時の原因と対処法
Pingが通らない時の原因はいくつかあります。
- そもそも疎通ができていない
- Firewallなどで止められている
Pingが通らない時の原因でそもそも疎通が出来ない状態の場合は、以下の記事を参照して解決します。
どこまでのルータまでは通信できているなど、Pingの相手先までの経路を表示して原因を探すのも基本です。
firewallが原因の場合は以下の記事を参照して設定を見直します。
まとめ:Linuxサーバーでpingの使い方
Linuxサーバーでpingの使い方の基礎
LinuxサーバーのPingの使い方については、pingコマンドの後にIPアドレスかURLを指定します。
ping IPアドレスもしくはURL
Linuxサーバーでpingのオプションについて
pingのオプションについて以下にまとめます。
オプション | 効果 |
---|---|
-c 回数 | 指定した回数だけPingパケットを送信 |
-i 秒数 | 指定した秒数だけ間隔を空けてPingパケット送信 |
-s | Pingのパケットサイズを指定する |
-q | Pingの統計のみ表示する |
-w 秒数 | Pingを終了する時間を指定する |
-4 IPv4アドレス | IPv4でPingを行う |
-6 IPv6アドレス | IPv6でPingを行う |
-p | パターンを指定してPingパケット送信 |
-t | TTLを指定してPingパケット送信 |
pingでポートを指定して送信するには
pingではポート指定はできないので、npingのパッケージをインストールして送信する。
結果が分かりにくいので「nmap」コマンドで代用する!
nmap -p ポート番号 宛先IP
Linuxサーバーでpingが通らない時の原因と対処法
- そもそも疎通ができていない
- Firewallなどで止められている
Pingが通らない時の原因でそもそも疎通が出来ない状態の場合は、以下の記事を参照して解決します。
firewallが原因の場合は、以下の記事を参照して設定を見直します。