Netcat

netcatは、Unix系OSコマンドラインアプリケーションの一つ。TCPやUDPのパケットを読み書きするバックエンドとして機能するツールで、ネットワークを扱う万能ツールとして知られる。オリジナル版より機能的に優位な派生・互換ツールが開発され、用いられている。 netcatは、UNIX系OSで動作するコマンドラインアプリケーションである。TCPやUDPを扱う万能ツールとして知られ、しばしばネットワークのスイスアーミーナイフ、TCP/IPのアーミーナイフ、ハッカーのアーミーナイフなどのように評される。その万能性ゆえ、nmapの作者として知られるセキュリティ専門家のGordon Lyon（英語版）が管理するInsecure.orgにおいて、ネットワークセキュリティツール部門の常に上位5位以内にランキングされているツールである。 *Hobbit*によって作成、1995年10月12日にバージョン1.00がリリースされる。その後、ドキュメント整備や機能強化（hexdump機能など）の末、1996年にバージョン1.10がリリースされる。この時点で既に機能面では充分なものに仕上がっており、それ以降、10年以上に渡ってバージョン更新されていないが、未だに「ネットワークの万能ツール」の名は健在である。このことは、ツールの完成度の高さを物語っているといえる。そのため、このツールはバージョン番号を含めたアーカイブファイル名である「nc110.tgz」の名前で検索することで容易に見つかるものとなっている。 Insecure.orgのネットワークセキュリティツール部門において、このツールは2000年に2位、2003年から2006年まで4位といったように、常に上位ランキングされている。また、同サイトでは「TCP/IPパケットの読み書きを行うツール」を意味する分類名としても用いられている。 このツールの対象はIPv4におけるTCPパケットとUDPパケットであり、これらのパケットの読み書きが主な機能となる。以下、同ソフトウェアに同梱されている文書から機能を抜粋して説明する。 TCPおよびUDPの、任意のポートを対象とした読み書き 基本機能である。 DNSフォワード/リバースチェック DNSの逆引きチェックを行うようになっている ローカルソースポートの指定 送信元ポート番号を指定することが可能である。 ローカルソースアドレスの指定 送信者IPアドレスの詐称が可能である。 ポートスキャン機能 Zero-I/Oモードと呼ばれる、ポートオープンのみを行い、コネクション確立後にパケット送受信を行わずにセッション切断する機能が設けられている。また、ポート番号を範囲指定する機能、指定範囲内でポート番号をランダム化する機能も併用可能となっている。 ルーズソースルーティング機能 IPv4におけるソースルーティングの1つである、ルーズソースルーティングを行うためのIPアドレス指定が可能となっている。 標準ストリームの読み書き ネットワークからの読み込みの結果は、指定がない限り、標準出力に書き出される。また、ネットワークへの書き出しには、指定がない限り、標準入力の内容が用いられる。 低速送信モード 送信行単位で一定時間ウエイトを設ける機能が設けられており、この機能を用いることで、あたかも受け答えをしているかのように振舞うことが可能となっている。 サーバーモード TCPにおけるサーバーとして機能させることができる。accept成功時、事前に指定したコマンドを実行し、そのコマンドの標準入出力をソケットのI/Oに接続することも可能となっている（GAPING_SECURITY_HOLE付でコンパイルした場合）。 telnetモード telnetプロトコルを話すことが可能となっている。 以下のように多彩な使い道があり、そのような使い方の例は、同ツールのアーカイブ内（scriptsディレクトリ内）にも含まれている他、使い道をスクリプトとして集めたサイトもいくつか存在する。 nc servername 80 << ! GET / HTTP/1.0 ! http://servername:80/ にブラウザでアクセスした場合と同等の結果を、HTTPヘッダ付で取得し、HTMLレンダリングを行わずに生データのまま画面に表示する。なお、記事冒頭に示した画像も、接続先がlocalhostになっているが、同様の処理を行うサンプルである。 ( echo "HTTP/1.0 200 Ok"; echo; cat -u return_file ) | nc -l -p 8080 他の端末からhttp://servername:8080/のようにアクセスすることで、指定されたファイルreturn_fileを送出するWebサーバーとして機能する。なお、他の端末からのアクセス時には、netcatを実行した端末にHTTPリクエストが表示されることになる。 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にはいくつかの派生・互換ツールが存在する。 Ncat（nmap付属） nmapの一部として開発された。GPLライセンス。 OpenBSD netcat 0から書き直されたnetcat互換ツールでIPv6に対応しているnetcat。BSDライセンス。 GNU netcat 0から書き直されたnetcat互換ツール。GPLライセンス。 Netcat Darwin Port Mac OS Xで使用可能なnetcatである。 Windows版netcat Windows上で使用可能なnetcatである。 Jetcat netcatの一部の機能をJavaで実現したものである。 socat