Linuxで任意のポート番号をLISTENさせる

検証環境などで、End-to-EndでTCP通信を確認したい時がある。

Linuxサーバ側で一時的にポートをLISTEN状態にできるものはないかと
探していたところ、2つほど見つかったので使い方をメモしておきたい。

ちなみに環境はCentOS 6で検証している。


nc (netcat)コマンド


こちらのコマンドは、TCPまたはUDPでネットワーク通信を行うことができ、
ネットワーク診断のときなどに使用されるツールである。

機能としては多岐に渡るが、今回はポートをLISTEN状態にすることができる機能を使う。

まずはインストール。

 yum install nc


インストール完了後、netstatでLISTENポートを確認。

 [root@localhost ~]# netstat -ant | grep LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::23 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
[root@localhost ~]#


早速、適当なポート番号をLISTENさせてみる。

 nc -l 12345


netstatでLISTENポートを確認。

 [root@localhost ~]# netstat -ant | grep LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::23 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
[root@localhost ~]#


意外とあっさりと指定したポートがLISTENしてくれた。
接続確認も問題なし。

 [root@localhost ~]# netstat -ant | grep 12345
tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.XX:12345 192.168.1.YY:56135 ESTABLISHED
[root@localhost ~]#


残念ながら、CentOSにはデフォルトでインストールされていなかった。
他のディストリビューションであれば、デフォルトで入っているのもあるらしい。


qperf


こちらのツールは、本来はサーバ・クライアント間の帯域性能などを測定するもの。
しかし、サーバ側の設定で待ち受けポートを任意で決められるので、
任意のポート番号でLISTEN状態にすることができるのである。

注意点としてはサーバ側のみを起動させる点にある。
もしクライアントも起動してしまうと、帯域に負荷がかかってしまう可能性もあるので、
qperfはポートをLISTENさせる為だけに使用しよう。

こちらもCentOSには入っていなかったので、インストールから。

 yum install qperf


こちらもインストール完了後、netstatでLISTENポートを確認。

 [root@localhost ~]# netstat -ant | grep LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::23 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
[root@localhost ~]#


さきほどと同じポート番号をLISTENさせてみる。

 qperf --listen_port 12345


netstatでLISTENポートを確認するも、こちらも問題なし。

 [root@localhost ~]# netstat -ant | grep LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::23 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
[root@localhost ~]#


接続確認も問題ないのだが、今回の検証では接続後数秒で切れてしまった。
3回ほど試してみたが、結果は一緒だった。

 [root@localhost ~]# netstat -ant | grep 12345
tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.XX:12345 192.168.1.YY:56334 TIME_WAIT
tcp 0 0 192.168.1.XX:12345 192.168.1.YY:56339 TIME_WAIT
tcp 0 0 192.168.1.XX:12345 192.168.1.YY:56340 ESTABLISHED
[root@localhost ~]#


本来はクライアントから接続が来るはずなのに、
違うもので接続しているからすぐに切られてしまうのだろうか?

使ってみた感じだとncコマンドの方が使いやすそうだった。
あくまで個人的感想が qperf<nc であっただけで、qperfがダメというわけではない。

デフォルトで入っているものがあれば、それを使えばいいし、
待ち受けできるものが何も入っていなければ、好きな方をインストールすれば良いと思う。



[改訂第3版]Linuxコマンドポケットリファレンス


人気記事