覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

curlコマンドで対象ポートへの通信が可能か確認する

なぜか現場だとネットワーク通信がうまくいかないなぁ。という場合の原因は様々ですが、
原因の一つにファイアウォールによって特定ポートの通信が許可されていない というものがあります。

以下は、Linux 環境で curl コマンドを利用して、ファイアウォール等によって対象のポートの通信が遮断されていないかの確認するための方法です。

nctelnet が使えればそちらで良いのでしょうが、それらコマンドが大人の事情でインストールされていない場合などの手段です。


実行するコマンド

実行するコマンドは以下のとおりです

curl -v telnet://{ホスト名 or IPアドレス}:{ポート番号}

タイムアウト値を明示的に指定する場合は以下になります

curl -m {タイムアウト()} -v telnet://{ホスト名 or IPアドレス}:{ポート番号}


実行例

54.248.XXX.XX の ポート 443 との通信が可能か確認している例です。

■通信が成功した場合

curl -m 10 -v telnet://54.248.XXX.XX:443
* About to connect() to 54.248.XXX.XXX port 443 (#0)
*   Trying 54.248.XXX.XXX...
* Connected to 54.248.XXX.XXX (54.248.XX.XXX) port 443 (#0)


■通信が失敗した場合(タイムアウトした)

curl -m 10 -v telnet://54.248.XXX.XXX:443
* About to connect() to 54.248.XXX.XXX port 443 (#0)
*   Trying 54.248.XXX.XXX...
* Connection timed out after 10001 milliseconds
* Closing connection 0
curl: (28) Connection timed out after 10001 milliseconds
  • 通信がタイムアウトした場合は対象ポートへの通信がブロックされている可能性があります
  • エラーが Connection refused の場合は、ポートは開放されているが通信先のサービスに問題が出ている可能性があります


まとめ

curl コマンドで 指定のポートへの接続確認ができることがわかりました。nc コマンド等利用できない場合に使いましょう。



関連エントリ