Linuxでpingにポート指定はできる?疎通確認コマンドを徹底解説

IT知識

「LinuxでpingにポートをTCP指定して疎通確認したい」と思ったとき、実は標準のpingコマンドはポートを指定できないことに気づいて困った経験はないでしょうか。
サーバーに繋がるかどうかを確認したいだけなのに、調べてみると知らないコマンドがたくさん出てきて、どれを使えばいいのか迷ってしまいますよね。
この記事では、Linux環境でpingにポート指定をする方法、そしてポートの疎通確認に使える代替コマンドをひとつひとつ丁寧に解説します。
初めてLinuxのネットワーク確認に取り組む方でも、読み終わったあとに「なるほど、これを使えばいいんだ」と感じていただけるよう、具体的なコマンド例や実践的な使い方を盛り込んでいます。

この記事でわかること

  • 標準のpingコマンドではポートを指定できない理由と仕組み
  • npingやncコマンドを使ってポートを指定した疎通確認をする方法
  • telnet・curl・nmapなど用途別の代替コマンドの使い分け
  • Linuxのpingコマンド自体の基本的な使い方とよく使うオプション

今、人気の商品を楽天ランキングで見てみる>><PR>

そもそもpingコマンドとは?Linuxでの基本的な使い方

見出し画像1

疎通確認の話をする前に、まずpingコマンド自体の役割をしっかり押さえておきましょう。
pingが「何を調べているコマンドなのか」を理解しておくと、なぜポートを指定できないのかという疑問もすっきり解決します。

pingコマンドの仕組みと役割

pingコマンドは、ネットワーク上の特定のホスト(サーバーやパソコン)に対して「応答しますか?」と問いかけるツールです。
技術的にはICMP(Internet Control Message Protocol)というプロトコルを使っており、ICMPエコーリクエストを送って相手からICMPエコーリプライが返ってくるかどうかを確認します。

たとえばGoogleのDNSサーバー(8.8.8.8)に対してpingを打つ場合、コマンドは次のようになります。

ping 8.8.8.8

Linuxでこのコマンドを実行すると、デフォルトではCtrl+Cを押すまで無限にpingを送り続けるという特徴があります。
これはWindowsの場合とは異なる点で、Windowsではデフォルトで4回送って自動的に終了しますが、Linuxでは明示的に止めるか、回数を指定する必要があります。

Linuxのpingコマンドでよく使うオプションをまとめると、以下のようになります。

オプション 意味 使用例
-c [回数] 送信回数を指定する ping -c 4 8.8.8.8
-i [秒] 送信間隔を秒数で指定する ping -i 2 8.8.8.8
-w [秒] タイムアウト時間を秒数で指定する ping -w 10 8.8.8.8
-s [バイト] 送信パケットサイズを指定する ping -s 1000 8.8.8.8
-t [TTL値] TTL(生存時間)を指定する ping -t 64 8.8.8.8

pingでわかること・わからないこと

pingを使うと「そのIPアドレスのホストが生きているかどうか(到達できるかどうか)」を確認できます。
レスポンスタイム(応答時間)も表示されるため、ネットワークの遅延具合もざっくり把握できます。

一方でpingには明確な限界があります。
ICMPはポートという概念を持っていないため、「80番ポートに繋がるか」「443番ポートで通信できるか」といった確認はpingだけでは行えません。
ホストには到達できていても、特定のポートが閉じていたり、ファイアウォールでブロックされていたりする場合、pingだけでは見つけられないのです。

また、環境によってはICMPパケット自体をファイアウォールでブロックしているサーバーも多く、pingが失敗してもそのサーバーが動いていないとは限りません。
たとえばAWSのEC2インスタンスはデフォルトでICMPを許可していないことがあるため、pingが通らなくてもウェブサイトは正常に動いているということもよくあります。

このように、pingは便利な基本ツールではありますが、ポートの疎通確認には別のコマンドを組み合わせることが欠かせません
次のセクションからは、その具体的な方法を見ていきましょう。

なぜpingにポート指定ができないのか?仕組みから理解する

見出し画像2

「pingにポート番号を指定すればいいのでは?」と最初に思う方は多いのですが、その発想が生まれる背景にはネットワークの階層構造への理解が必要です。
ここではICMPとTCP/UDPの違いを整理しながら、なぜpingでポートを指定できないのかを解説します。

ネットワーク層とトランスポート層の違い

ネットワーク通信はOSI参照モデルと呼ばれる層(レイヤー)構造で設計されています。
pingが使うICMPはネットワーク層(第3層)で動くプロトコルです。
一方、ポート番号はトランスポート層(第4層)で使われるTCPやUDPの概念です。

少し難しく聞こえるかもしれませんが、簡単にたとえると次のようなイメージです。
pingは「そのビルに人が住んでいますか?」と確認するようなものです。
対してTCP/UDPのポートは「そのビルの何号室に繋がりますか?」という問いかけに相当します。
ビルの存在確認(ICMP)と部屋番号の確認(ポート)は、そもそも別の話なのです。

このため、pingコマンド自体にはポート番号を指定するオプションが存在しません。もし「ping -p 80 192.168.1.1」のように書いても、-pオプションは存在しないかまたは別の意味を持つことがあり、意図した動作にはなりません。

ファイアウォール環境での注意点

現代のサーバー環境では、ICMPパケット自体をファイアウォールでブロックしているケースが珍しくありません。
その場合、pingが返ってこないからといってサーバーが落ちていると判断するのは早計です。
逆に、pingは通っているのにウェブサイトにアクセスできない場合は、HTTPポート(80番)やHTTPSポート(443番)が閉じているか、ウェブサーバーのプロセスが止まっている可能性が高いです。

このような状況を正確に切り分けるためには、ICMPによるホスト死活確認(ping)と、TCP/UDPポートの疎通確認(後述のnc・nping・telnetなど)を組み合わせることが重要です。
pingだけでネットワーク障害の原因を特定しようとするのは危険です。ポートレベルの確認ができるツールも使いこなせるようになっておくと、トラブルシューティングの精度が大きく上がります。

TCPとUDPの疎通確認が必要な場面

実際の業務でサーバーのポート疎通確認が必要になる場面は数多くあります。
たとえば次のようなケースです。

  • ウェブサーバーの80番・443番ポートが外部から繋がるか確認したい
  • データベースサーバーの3306番(MySQL)や5432番(PostgreSQL)に繋がるか確認したい
  • メールサーバーの25番・587番・993番ポートが開いているか確認したい
  • SSHの22番ポートが正しく開放されているか確認したい
  • ファイアウォールのルール変更後に意図通りポートが開いたか確認したい

これらの場面ではpingだけでは不十分で、TCPやUDPの疎通確認ができるコマンドが必要になります。
次のセクションから、具体的なコマンドを1つずつ見ていきましょう。

npingを使ってLinuxでポートを指定したping的な疎通確認をする方法

見出し画像3

「pingのようにポートを指定して疎通確認したい」という要望に最も直感的に応えてくれるツールがnpingです。
nmapというネットワーク調査ツールに付属するコマンドで、TCP・UDP・ICMPなど複数のプロトコルを使って柔軟にパケットを送信できます。

npingのインストール方法

npingはnmapパッケージに含まれています。
Linuxのディストリビューションに応じて以下のようにインストールします。

Debian系(UbuntuやDebianなど)の場合:

sudo apt-get install nmap

Red Hat系(CentOS・RHEL・Fedoraなど)の場合:

sudo yum install nmap

または、よりモダンなdnfコマンドが使える環境では:

sudo dnf install nmap

インストール後に「nping –version」と入力してバージョン情報が表示されれば、使える状態になっています。

npingでTCPポートを指定して疎通確認する

npingを使ってTCPポート指定で疎通確認するコマンドの基本形は次のようになります。

nping --tcp -p 80 192.168.1.1

このコマンドは「192.168.1.1のホストに対して、TCPの80番ポート(HTTP)宛にパケットを送る」という意味です。
ポート番号はウェブサーバーなら80や443、SSHなら22など、確認したいサービスに合わせて変えます。

複数のポートをまとめて確認したい場合はカンマで区切って指定できます。

nping --tcp -p 80,443,22 192.168.1.1

また、送信回数を指定したい場合は-cオプションを使います。
pingと同じ感覚で使えます。

nping --tcp -p 443 -c 3 192.168.1.1

npingでUDPポートを指定する

UDPポートの疎通確認には–udpオプションを使います。

nping --udp -p 53 192.168.1.1

上記の例はDNSサービスが動いているかを確認する際に使えます。
UDPは接続確立の概念がないTCPと異なり、応答がない場合でも必ずしもポートが閉じているとは言えないため、結果の解釈に注意が必要です。

npingの出力の見方

npingの実行結果には、送信したパケット数・受信したパケット数・ロスト数・応答時間(RTT)などが表示されます。
「RCVD」という表示が出ていれば、対象ポートまでパケットが届いて応答が返ってきたことを意味します。
「SENT」しか表示されず応答がない場合は、ポートが閉じているかファイアウォールでブロックされている可能性があります。

npingはroot権限(sudo)が必要な場合があります。
特にTCPのSYNパケットを送る際には管理者権限が必要になることが多いため、権限エラーが出た場合はsudoを付けて実行してください。

nc(netcat)・telnet・curlなどを使ったポート疎通確認の実践的な方法

見出し画像4

npingはとても便利なツールですが、環境によってはインストールが難しかったり、別の目的に合ったツールを使いたい場面もあります。
Linuxにはncやtelnetなどポート疎通確認に使える標準的なコマンドが複数あり、それぞれ特徴が異なります。

ncコマンド(netcat)を使う方法

ncコマンド(netcatとも呼ばれます)は、LinuxやmacOSでポート疎通確認を行う際に最もよく使われるツールのひとつです。
追加インストールなしで使えるディストリビューションが多く、軽量で使いやすいのが特徴です。

TCPポートの疎通確認をする基本的な書き方は次のとおりです。

nc -zv 192.168.1.1 80

オプションの意味を整理すると:

  • -z:データを送らずにポートが開いているかだけを確認するスキャンモード
  • -v:詳細な情報(verbose)を表示する

接続に成功した場合は「Connection to 192.168.1.1 80 port [tcp/http] succeeded!」のようなメッセージが表示されます。
失敗した場合は「Connection refused」や「Connection timed out」などのメッセージが返ります。

タイムアウト時間を指定したい場合は-wオプションを使います。
応答を待つ秒数を指定できるため、繋がらないポートに対してずっと待ち続けることを防げます。

nc -zv -w 5 192.168.1.1 443

UDPポートを確認したい場合は-uオプションを追加します。

nc -zuv 192.168.1.1 53

複数ポートをまとめて確認したい場合は範囲指定も可能です。

nc -zv 192.168.1.1 20-25

このコマンドは20番から25番ポートまでを順番に確認します。
FTPやSSHなど複数のポートを一度に調べたいときに便利です。

telnetコマンドを使う方法

telnetコマンドも古くからポート疎通確認に使われてきたツールです。
インストールされていない環境もありますが、直感的でわかりやすいため今でも現場でよく使われます。

telnet 192.168.1.1 80

接続に成功するとtelnetのセッションが開き、「Trying 192.168.1.1… Connected to 192.168.1.1.」のようなメッセージが表示されます。
セッションを終了するにはCtrl+]を押してから「quit」と入力します。
接続できない場合は「Connection refused」や「Unable to connect」などのメッセージが表示されます。

telnetはセキュリティ上の理由から本番環境の通信手段としては使いませんが、ポートが開いているかどうかを手軽に確認するための診断ツールとしては今でも有効です。
ただしインストールされていない環境もあるため、そういった場合はncコマンドを使う方がよいでしょう。

curlコマンドを使う方法

HTTPSやHTTPのポートを確認したい場合は、curlコマンドを使う方法もあります。
curlはウェブのURLにリクエストを送るコマンドですが、ポート番号を明示的に指定することもできます。

curl -v http://192.168.1.1:80
curl -v https://192.168.1.1:443

-vオプションを付けると通信の詳細ログが表示されるため、接続が成功しているかどうかをリクエスト・レスポンスの流れと一緒に確認できます。
HTTPレイヤーでの確認が必要な場面では、ncやtelnetよりも多くの情報が得られます。

また、curl –connect-timeout を使うとタイムアウト時間を秒数で指定できるため、応答がないホストに対して長時間待ち続けることを防げます。

curl --connect-timeout 5 http://192.168.1.1:80

nmapを使ったポートスキャン

より詳細なポートの状態を調べたい場合はnmapコマンドが強力です。
npingと同じnmapパッケージに含まれており、指定したホストのポートが「open(開いている)」「closed(閉じている)」「filtered(フィルタリングされている)」のどれかを教えてくれます。

nmap -p 80 192.168.1.1
nmap -p 80,443,22 192.168.1.1
nmap -p 1-1024 192.168.1.1

nmapはスキャン対象への影響が大きいため、自分が管理するサーバーや検証環境に対してのみ使用してください。他者のサーバーに無断でスキャンをかけることは適切ではありません。

Linuxのpingオプションを使いこなすための実践的なテクニック

見出し画像5

ここまでポート疎通確認の代替コマンドを見てきましたが、基本のpingコマンドも使いこなせると日常の確認作業がぐっとラクになります。
Linuxのpingには意外と知られていない便利なオプションが多く、状況に応じて使い分けることでより正確な診断ができます。

回数と間隔の指定で効率的に確認する

Linuxのpingはデフォルトで無限に送り続けるため、スクリプトで使いたい場合などは必ず-cオプションで回数を指定する習慣をつけましょう。

ping -c 4 8.8.8.8

これはWindowsのデフォルト動作(4回送信)と同じ結果になります。

パケットの送信間隔を変えたい場合は-iオプションを使います。
デフォルトは1秒ごとですが、0.2秒間隔のような短い間隔にするとフラッドping的な使い方もできます(ただしroot権限が必要)。
逆に5秒・10秒と長くすれば、長時間の断続的な監視にも使えます。

ping -c 10 -i 3 192.168.1.1

タイムアウトと締切の設定

-wオプションはping全体の実行時間を秒数で制限します。
指定した時間を過ぎると、指定回数に達していなくても終了します。
スクリプトや自動化処理の中でpingを使うときに特に役立ちます。

ping -w 10 192.168.1.1

上記は最大10秒でpingを終了させる指定です。
-cと組み合わせると「5回送るか10秒経つかどちらか早い方で終了」という動作になります。

ping -c 5 -w 10 192.168.1.1

パケットサイズの指定でネットワーク品質を確認する

-sオプションを使うとpingで送るパケットのデータサイズをバイト単位で指定できます。
デフォルトは56バイト(ヘッダー込みで64バイト)ですが、大きなパケットを送ることでMTU(最大転送単位)の問題や、特定のサイズのパケットが通らないといったネットワークの問題を検出できることがあります。

ping -s 1400 -c 4 192.168.1.1

IPv6でpingを使う

IPv6環境ではpingコマンドではなくping6コマンドを使います(環境によってはpingコマンドで-6オプションを指定することもできます)。

ping6 -c 4 2001:db8::1
ping -6 -c 4 2001:db8::1

応答結果の読み方を理解する

pingの出力結果には重要な情報が詰まっています。
代表的な見方を押さえておきましょう。

表示内容 意味
64 bytes from …: icmp_seq=1 ttl=64 time=0.5 ms パケットが届いて応答が返ってきた。
timeが応答時間
Request timeout for icmp_seq 1 指定時間内に応答がなかった(タイムアウト)
Destination Host Unreachable 宛先ホストに到達できない(経路上の問題)
packets transmitted / received / packet loss 送信・受信・ロスのパケット統計
rtt min/avg/max/mdev 応答時間の最小・平均・最大・偏差

パケットロス(packet loss)が0%であれば通信は安定しています。
パケットロスが高い場合や応答時間のばらつき(mdev)が大きい場合は、ネットワーク品質に問題がある可能性があります。こうした情報を活用することで、pingはただの「繋がるか確認するツール」以上の役割を果たしてくれます。

またpingコマンドはLinuxとWindowsで動作が異なることも覚えておくと便利です。
Linuxでは無限送信がデフォルトですが、Windowsでは4回で自動終了します。
シェルスクリプトや自動化を組む際には特に注意してください。

まとめ:Linuxでpingポート指定の代替手段を状況に合わせて使い分けよう

この記事のポイントをまとめます。

  • Linuxの標準pingコマンドはICMPを使うため、TCPやUDPのポートを指定することができない
  • ポートを指定したpingに相当する操作をしたい場合は、nping(nmapに同梱)を使うのが最もpingに近い感覚で使える
  • ncコマンド(netcat)は追加インストール不要な場合も多く、シンプルなTCP/UDPポート疎通確認に最適
  • telnetコマンドも手軽なポート確認ツールとして有効だが、インストールされていない環境には注意が必要
  • HTTP/HTTPSポートを確認する場合はcurlコマンドが詳細なレスポンス情報も得られて便利
  • より詳細なポートスキャンにはnmapが強力だが、自分が管理する環境でのみ使用すること
  • Linuxのpingはデフォルトで無限送信するため、-cや-wオプションで終了条件を指定する習慣をつけるとよい

ネットワークのトラブルシューティングは、「まずpingでホストの生死確認→次にポート疎通確認→さらに必要ならアプリ層の確認」という順番で進めると効率的です。
pingにポートを指定できないことは最初は不便に感じるかもしれませんが、nc・nping・telnet・curlといった専用ツールを使い分けることで、むしろ状況に応じた精度の高い確認ができるようになります。
最初は「とりあえずncを使ってみる」ところから始めて、慣れてきたらnpingやnmapにも挑戦してみてください。
ひとつひとつのコマンドを手を動かして試すことが、Linux環境でのネットワーク確認スキルを着実に伸ばす一番の近道です。

タイトルとURLをコピーしました