netcat(nc)コマンドとはUNIX系OSで動作するコマンドラインアプリケーションである。TCPやUDPを扱う万能ツールとして知られている。(wikiから一部引用)
基本的にこのコマンドを打ったらどうこうできるという素人向けのコマンドではないけれど、だいたいこいつでどうにかなる。
ncは優秀が故、多くの派生ツールがある。
OpenBSD netcat
- IPv6対応しているnetcatである。
- Netcat Darwin Port
- Mac OSで使用可能なnetcatである。
- Windows版netcat
- Windows上で使用可能なnetcatである。
- Jetcat
- netcatの一部の機能をJavaで実現したものである。
確かオプションはツールによって若干違うものもあったと思う。その辺は@fopen_sに質問を飛ばすかmanコマンドでご愛嬌
さて本題。
ncコマンドを使うと何ができるのか。まず1番使うであろう疎通確認
nc 対象ホスト(IPアドレス等) ポート番号
あまりないけれど何かの理由でUDPで疎通確認したい場合にも一応 -uオプションで対応することができる。
nc -u 対象ホスト(IPアドレス等) ポート番号
また、-vオプションを追加することで通信の詳細を表示することができる。
pingでも疎通確認できるのでは?という質問についてはプロトコルが違うと答えておく。
次に、サーバーを立てる方法。
自分の管理しているサーバーでデーモンを起動しても疎通できない。
さて、このサーバーにそもそも接続できていないのか。それともfirewallに弾かれているのか。はたまたデーモンが立ち上がっていないのか。その問題の切り分けとして使う。
TCPポートにて受け付ける。
nc -l ポート番号
UDPポートにて受け付ける。
nc -ul ポート番号
上記コマンドでは一度アクセスすると終了するので、持続させたい場合は
nc -kvl ポート番号
ポートスキャンがしたい時もたまにあるだろう。
この件についてはどうあがいてもnmapが最強なのでnmapを使ってほしいとしか言えないが、一応ncでもポートスキャンすることが可能だ。
nc -vz 対象ホスト ポート番号-ポート番号
全スキャンするのであれば
nc -z localhost 1-65535で可能。
もし全ての結果を表示したいのであれば上記に述べたように-vオプションを使用することで可能。
他にも、ファイルを送信、受信したり、することができます。
シェル芸っぽく書くことでもっと応用可能だったりする。nmapとか優秀なその他のネットワーク解析ツールは基本的にプリインストールされていない。
しかし基本的にncはプリインストールされているし、セキュリティを意識していないサーバー管理者はこのコマンドをアンインストールしていないことが多い。
実はroot権限を行使すれば暗号化なしsshのような使い方もできる。コマンドを待っている状態で待機し、*nix系のコマンドを全て使用することができると思っていただければ良い。
ハッキングに成功し、侵入できた後に簡易的にbackdoorを立てる目的でncを使用するハッカーもいる。(だいたいport scanでバレる)
NE志望の学生は是非とも使いこなしてほしいネットワーク解析ツールの一つである。