Netcat

Netcatは、Unix系OSコマンドラインアプリケーションの一つ。TCPやUDPのパケットを読み書きするバックエンドとして機能するツールで、ネットワークを扱う万能ツールとして知られる。オリジナル版より機能的に優位な派生・互換ツールが開発され、用いられている。
概要.
netcatは、UNIX系OSで動作するコマンドラインアプリケーションである。TCPやUDPを扱う万能ツールとして知られ、しばしばネットワークのスイスアーミーナイフ、TCP/IPのアーミーナイフ、ハッカーのアーミーナイフなどのように評される。その万能性ゆえ、nmapの作者として知られるセキュリティ専門家のが管理するInsecure.orgにおいて、ネットワークセキュリティツール部門の常に上位5位以内にランキングされているツールである。
歴史.
によって作成、1995年10月12日にバージョン1.00がリリースされる。その後、ドキュメント整備や機能強化（hexdump機能など）の末、1996年にバージョン1.10がリリースされる。この時点で既に機能面では充分なものに仕上がっており、それ以降、10年以上に渡ってバージョン更新されていないが、未だに「ネットワークの万能ツール」の名は健在である。このことは、ツールの完成度の高さを物語っているといえる。そのため、このツールはバージョン番号を含めたアーカイブファイル名である「nc110.tgz」の名前で検索することで容易に見つかるものとなっている。
Insecure.orgのネットワークセキュリティツール部門において、このツールは2000年に2位、2003年から2006年まで4位といったように、常に上位ランキングされている。また、同サイトでは「TCP/IPパケットの読み書きを行うツール」を意味する分類名としても用いられているほどである。
機能.
このツールの対象はIPv4におけるTCPパケットとUDPパケットであり、これらのパケットの読み書きが主な機能となる。以下、同ソフトウェアに同梱されている文書から機能を抜粋して説明する。
使用例.
以下のように多彩な使い道があり、そのような使い方の例は、同ツールのアーカイブ内（scriptsディレクトリ内）にも含まれている他、使い道をスクリプトとして集めたサイトもいくつか存在する。
Webサーバーからの情報取得.
nc servername 80 « !
GET / HTTP/1.0
http://servername:80/ にブラウザでアクセスした場合と同等の結果を、HTTPヘッダ付で取得し、HTMLレンダリングを行わずに生データのまま画面に表示する。なお、記事冒頭に示したも、接続先がlocalhostになっているが、同様の処理を行うサンプルである。
簡易Webサーバー.
( echo "HTTP/1.0 200 Ok"; echo; cat -u return_file ) | nc -l -p 8080
他の端末からhttp://servername:8080/のようにアクセスすることで、指定されたファイルreturn_fileを送出するWebサーバーとして機能する。なお、他の端末からのアクセス時には、netcatを実行した端末にHTTPリクエストが表示されることになる。
簡易telnetサーバー.
nc -l -p 10025 -e /bin/sh
他の端末からポート10025にアクセスすることで、入出力が/bin/shにリダイレクトされるようになる。すなわち、バックドアとして機能するようになる。もちろん認証機能は存在せず、実行権限はnetcatの実行権限と同一となる。Windows版では以下のように指定すれば同様にバックドアとして機能するようになる。
start nc -d -L -p 10025 -e cmd.exe
オプション-Lは、セッション切断後も継続してlistenするためのオプションである。また、オプション-dはステルスモードとなり、コマンドプロンプト・ウィンドウなしで動作するようになる。このような使い方が可能なツールゆえ、netcatのWindows版は主要なウィルススキャナの半数以上によってウィルス（リモートAdminツール）として判定されるものとなっている。
ポートスキャン.
nc -v -n -z -w 1 servername 1-1000
指定されたサーバーに対してポートスキャンを行う。ポート番号の範囲は1 - 1000で、スキャン間隔は1秒。
プロクシ.
nc -l -p 8080 -e nc servername 80
指定されたWebサーバーに接続するWebプロクシとして機能する。
メール送信.
nc -i 2 mailserver 25 «!
MAIL FROM:<test@example.com>
RCPT TO:<test@example.com>
DATA
Hi, This is test mail.
QUIT
指定されたメールアドレスにメールを送る。行単位での送信間隔（-i）を2秒に指定しているが、このオプションを指定しない場合、MAIL FROMを投げてもよいというサーバーからのメッセージ（200番台のステータスコード）が送られてくるまでにMAIL FROMやそれ以降のデータを送信してしまうこととなるため、具合が悪い。サーバーからの応答を待ってから送信する仕組みを即席で作りたい場合に、このオプションは有用である。
派生・互換ツール.
netcatにはいくつかの派生・互換ツールが存在する。