Bashのソケット通信機能を利用してtcpポートの疎通チェックをしてみる(Amazon Linux 2023)

この記事を書いたメンバー:

SAITO Keita

Bashのソケット通信機能を利用してtcpポートの疎通チェックをしてみる(Amazon Linux 2023)

目次

tcpポートの疎通チェックの方法について調べていると、Bashにソケット通信機能を使てtcpポートの疎通チェックを行う方法がある事をしりまとめた記事となります。

本記事で利用している環境

  • Amazon Linux 2023
  • GNU bash, version 5.2.15(1)-release (x86_64-amazon-linux-gnu)

参考元

Bashのソケット通信機能を用いてtcpポート疎通チェックするコマンドについて

下記のような感じでコマンドを実行するとポートのBashのリダイレクト機能を利用してポートチェックができる。

# 書き方パターン1
# 3秒間で疎通できれば「Port open.」表示 できなければ「Port closed.」表示
timeout 3 bash -c "</dev/tcp/{HOST}/{Port}" && echo Port open. || echo Port closed.


# 書き方パターン2
# 3秒間で疎通できれば「Port open.」表示 できなければ「Port closed.」表示
timeout 3 bash -c "cat < /dev/null > /dev/tcp/{HOST}/{Port}" && echo Port open. || echo Port closed.





Bashのドキュメントを確認してみる

Bash Reference Manual - Redirections

Reference ManualのRedirections部分に記述があり、下記のように記載されています。

/dev/tcp/host/port

If is a valid hostname or Internet address, and is an integer port number or service name, Bash attempts to open the corresponding TCP socket. hostport



Bashでは/dev/tcp/host/portにリダイレクトすると記述されたhostとportにtcpソケットを開くようです。

先で紹介したコマンドではこの機能を利用してポートの疎通チェックをしています。

 疎通チェックコマンドで何をやっているか確認

先で紹介したtcpの疎通チェックのコマンドは、Bashのリダイレクトに記載のあるソケット通信機能を利用して実現しており、下記画像のようにリダイレクト部分だけ実行してみるとコマンドが成功した時は"Port open."をecho。失敗した時は"Port closed.をecho"しています。





このように疎通する、疎通しないで終了コードが変化する事を利用して、またtcpが疎通しない場合はtcpがタイムアウトするまで待ってしまうため、timeout 3として3秒間疎通しなければtimeoutといった形にしているのが今回紹介するコマンドとなっています。

余談

ポートの疎通チェック方法としてcurlコマンドでプロトコルとしてtelnetを選択して疎通チェックする方法や、ncコマンドなどもありますが。

Amazon Linux 2023環境ではcurlではtelnetのプロトコルが利用できないようになっており。

(下記画像のように表示される)



AWSから提供されるAMIから起動した素の状態ではncコマンドもインストールされていなかったりします。


総評

もともとは素の状態のAmazon Linux 2023でポートチェックしたかったので、何か方法がないか調べていましたが。

初見よくわからない方法で疎通チェックをしているStackOverflowの記事がり、調べてみるとBashにソケット通信を行う機能を利用していた事がわかりました。

このため本記事ではその理解をまとめてみました。

各種コマンドがインストールされてない環境で、ちょっとポートの疎通確認したい時などに利用すると便利かと思います。


カテゴリー
タグ

この記事を書いたメンバー

Pick upピックアップ

Search記事を探す

キーワード

SAPシステムや基幹システムのクラウド移行・構築・保守、
DXに関して
お気軽にご相談ください

03-6260-6240 (受付時間 平日9:30〜18:00)