Netcat を Node.js に移植します。 CLI ユーティリティ。
Node.js アプリに埋め込むには、代わりに netcat パッケージを使用します。これはスタンドアロン ツールとして使用することを目的としていますが、netcat の元の実装と完全に同じではありません。
Linux | Mac OS | 窓 |
---|---|---|
$ npm install -g nc
$ nc -l -p port [- options] [hostname] [port]
利用可能なオプション:
-c shell commands as `-e’; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-s addr local source address
-u UDP mode
-U Listen or connect to a UNIX domain socket
-v verbose
-w secs timeout for connects and final net reads (client-side)
-z zero-I/O mode [used for scanning]
$ nc -l -p 2389
$ nc localhost 2389
ポート2389
への生の接続を開きます。
サーバー側 | クライアント側 |
---|---|
nc -l 2389 > test | cat testfile | nc localhost 2389 |
$ nc -w 10 localhost 2389
上記の接続は 10 秒後に終了します。
$ nc -kl 2389
このようにして、クライアントが切断されてもサーバーは稼働したままになります。
さらに興味深いのは、 -l
( listen
オプションと-e
( execute
オプションを使用して、リモート マシン上でクイック シェルを実行できることです。接続が確立されると、Netcat は選択したプログラムを実行し、プログラムのstdin
とstdout
ネットワーク接続に接続します。
$ nc -l -p 23 -e /bin/sh
次の行と空行を含む HTTP リクエスト ファイルget.txt
を作成してみましょう。
GET / HTTP/1.0
Netcat を使用して Web サイトのホームページを取得するには、次のコマンドを使用します。
$ nc -v www.website.com 80 < get.txt
Netcat がポート 80 に接続し、ファイルget.txt
に含まれるテキストを送信し、Web サーバーの応答をstdout
に出力することがわかります。
通常のシナリオでは、NC クライアントが切断された場合、接続は再試行されません。 --retry <secs>
または-R <secs>
パラメータを指定すると、tot 秒後に接続が再試行されます。
$ nc -R 5 localhost 2389
docker をお持ちの場合は、docker unix ソケット ファイルに接続しているコンテナのイメージをリストしてみましょう。
$ echo -e " GET /images/json HTTP/1.0rn " | nc -U /var/run/docker.sock
PS.この例では、root 権限が必要です: sudo su
。
$ mkfifo /tmp/fifo
$ nc -l -k -p 8080 < /tmp/fifo | nc website.com 80 > /tmp/fifo
$ nc -z 192.168.1.100 1-255
-o
オプションを使用すると、すべての 16 進トラフィックをダンプできます。
$ nc 127.0.0.1 4445 -o /tmp/log.txt
デフォルトでは、nc ユーティリティが作成するすべてのソケットは TCP プロトコルですが、このユーティリティは UDP プロトコルでも動作します。 UDP プロトコルを有効にするには、-u フラグが使用されます。
サーバー側 | クライアント側 |
---|---|
nc -u -l -p 2389 | nc -u localhost 2389 |
$ echo 'message' | nc -w 1 -u 192.168.1.111 514
UDP (-u) 経由で、待機時間 (-w) 1 秒でポート514
の192.168.1.111
にパイプします。
デバッグは冗長モードに一致します。 -v
パラメータまたは env var DEBUG=nc
使用して有効にできます。このモジュールは内部で netcat のノード実装を使用し、両方をデバッグするにはDEBUG=netcat:*,nc
使用します。
ロッコ・ムソリーノ (@roccomuso)