netcatってなんじゃらほい
先日、NW機器の取り替えを対応することになって
機器の設置後、各セグメント間でポートの疎通確認をすることになった。
疎通確認する案でtelnetとiperfを利用するのが出たが、
ncコマンド(netcat)を使って疎通確認することになったので
聞いたことはあるけど使ったことないな〜と思って使い方を調べてみたメモ。
ざっと調べたら、詳しそうなページが出てきまいた。
オンラインソフトを使え! 「第12回 Netcat」
Netcat はHobbit氏によって開発された、汎用TCP/UDP接続コマンドラインツールである。接続先IPアドレス(もしくはホスト名)とポート番号を指定す ることにより、その接続先の該当するポートで待ち受けているサーバソフトウェアと通信することができる。またリッスンモードでは、指定したポート番号で通 信を待ち受け、接続してきたクライアントソフトウェアと会話することも可能だ。
ふむ、ncコマンドはサーバ側とクライアント側としても動作して、
ポートの疎通確認とかできるっぽい。
一つでまかなえる感じがいいね。
今回、疎通確認はOSがWindowsの端末同士でやるので、
両端末にncコマンドをダウンロードすることに。
上で紹介しているページ内のnetcatダウンロードサイトへのリンクが
切れていたので、自分はこっちでダウンロードしました。
https://eternallybored.org/misc/netcat/
「netcat win32」とかで調べたら色々ダウンロードサイトが出てくるっぽい。
そんなこんなでダウンロードして解凍すると、
中身にnc.exeがあります。こいつがncコマンドちゃんですか...。
PATH設定するなりしてもいいとは思うけど、
今回は疎通確認だけなので、解凍したディレクトリに移動して使用します。
で、簡単に使い方。びっくりするぐらい単純ですた。
サーバ側でポートを開放(リッスン状態)にさせるにはこんな感じ
> nc -p 1234 -l
-p でリッスンポートの指定、-l でリッスンモードという指定みたい。
待ち受けしますよ〜って指定するだけでいいだなんて分かりやすいね。
そしてクライアント側、疎通確認させるためにはこんな感じ
> nc localhost 1234
今回、検証用にlocalhostにしてるけど、その部分をIPアドレスに変えてあげればOK。
宛先のIPアドレスと宛先のポートを指定するだけみたいです。うーん簡単。
疎通確認するだけならこれだけでいいみたいです。
接続成功すれば、クライアント側で入力すると
入力文字がサーバ側にも表示されます。(説明が難しい...)
Ctrl + Cを押すと画面が戻ってきます。
あまりにも単純・簡単すぎたので、その他のオプションについて
検証してみることにしました。
サーバ側でリッスンするときに気づいたこと
以下のオプションが使える
-p : 開放ポート指定(複数指定は無理みたい) -l : 通常のリッスンモード、接続が終了したらコマンド終了する -L : リッスンモードだけど、接続が終了してもそのまま実行される(永続的に) -u : UDPでリッスンするように指定。指定がない場合はTCPでリッスン。 -e : 接続時に起動スクリプトを指定できる。
-e の指定なんて恐ろしいもんで、ncコマンドには暗号化だったり、実行権限を気にする実装はないみたいだからバックドアにも使われてたりするみたい。強力だけど使い方を誤ると怖いってヤツですな...。
クライアント側で疎通確認するときに気づいたこと
以下のオプションが使える
-u : UDPで疎通するように指定。指定がない場合はTCPで接続。 -z : 疎通確認のみ実施する。単体では分かりづらいので-vを一緒に使うのが良さそう。 -v : 疎通確認の結果を出力させる。openだったりundefineだったり
オプション以外での気づき
ポート指定は複数指定可能(空白区切り、またはn1-n2みたいにハイフン区切りでもOK) Windows版だと-zとか上手く動作しないものがあるらしい
最初は接続してコンソール操作ができるだけかと思っていたけど、疎通確認のみっていうのもできるみたい(-zで)。ポートの複数指定もできるから、簡単にポートスキャンができちゃう。
ちなみにポートスキャンは、なんでもかんでもやっちゃダメ、絶対です。プライベートなLAN内でやるとかならいいんだろうけどね。
netcatはオプションが単純でわかりやすく、使い勝手もいいから非常に強力なコマンドだっていうことが分かりました。
以下のサイトでも取り上げられているけど、ウィルス対策ソフトによってはバックドアとして検知されてしまうこともあるみたいなので、使用には注意しましょう!