ncコマンドでチャットをする
ncコマンドとは?
ncはNetCatの略で、Networkをcatenate(連結)するという意味。
クライアントとサーバの間に入って繋ぐコマンドで、チャットや、ファイル転送といった、さまざまな用途に使うことができ、サイバー攻撃にも使用されているそう。
もう少し詳しく言うと、Unix系OSコマンドラインアプリケーションの一つ。
TCPやUDPのパケットを読み書きをおこなう、バックエンドとして機能するツールで、ネットワークを扱う万能ツールとして知られている。
基本的な使い方
$ nc [options] [hostname(接続先のこと)] [port]
$ nc -h
でオプション一覧を確認することができる。
環境
Windows11
WSL2
Ubuntu 20.04.5 LTS
ポートスキャン
サーバーに接続要求を行なうことで、解放されているポートを確認する手法。
クライアント側にて
$ nc -zv localhost 123
オプション -zv の意味は以下。
-z Zero-I/O mode [used for scanning]
TCPの場合は相手先のポートに接続した後、すぐに接続を切断する。
UDPでは相手のポートにパケットを送り、一定時間反応を待った後に処理を終了する。
つまりZero-I/O modeでは、実際のデータ通信は行われない。
-v Verbose
「多弁、詳細」という意味で、接続の可否や、名前解決結果など、詳細な情報を表示するようになる。
123ポートでサーバーが起動していないので、以下のようなメッセージが出力される。
nc: connect to localhost port 123 (tcp) failed: Connection refused
チャット
サーバーの準備
サーバー側にて
$ nc -lk localhost 123
(ぼくの環境では、実行するのにsudoコマンドが必要だった。)
オプション -lk の意味は以下。
-l –listen Bind and listen for incoming connections
Netcatをリッスンモードで起動。
相手側からの接続が切れるとリッスンしているNetcatは終了。
(ちなみにWindows版Netcatには「-L」オプションがあり、このオプションで起動した場合、Netcatは接続が切れても繰り返しリッスンモードで待ち受けるようになる。UNIX版Netcatにはない機能。)
-k Keep inbound sockets open for multiple connects
コマンドの実行により、サーバー側が入力待ち状態になる。
クライアント側でポートスキャンしてみる
クライアント側にて
$ nc -zv localhost 123
今回は、123ポートでサーバーが起動しているので、以下のようなメッセージが出力される。
Connection to localhost 123 port [tcp/*] succeeded!
クライアント側でサーバーに接続
クライアント側にて
$ nc localhost 123
これでクライアント側も入力待ち状態になる。
片方の端末で入力した情報が、もう片方の端末で表示されるようになる。
Discussion