目次:
Netcat(またはnc)は、TCPまたはUDPプロトコルを使用して、ネットワーク接続を介してデータを読み書きするコマンドラインユーティリティです。 これは、ネットワークおよびシステム管理者の武器の中で最も強力なツールの1つであり、ネットワークツールのスイスアーミーナイフと見なされています。
Netcatはクロスプラットフォームであり、Linux、macOS、Windows、およびBSDで使用できます。 Netcatを使用して、ネットワーク接続のデバッグと監視、開いているポートのスキャン、データの転送などをプロキシとして使用できます。 Netcatパッケージは、macOSおよびUbuntuなどの一般的なLinuxディストリビューションにプリインストールされています。
Netcatの構文
Netcatユーティリティの最も基本的な構文は、次の形式を取ります。
nc host port
Ubuntuでは、
netcat
または
nc
使用できます。 どちらもNetBSDのopenBSDバージョンへのシンボリックリンクです。
デフォルトでは、Netcatは指定されたホストとポートへのTCP接続を開始しようとします。 UDP接続を確立する場合は、
-u
オプションを使用します。
ポートスキャン
ポートのスキャンは、Netcatの最も一般的な用途の1つです。 単一のポートまたはポート範囲をスキャンできます。
たとえば、20〜80の範囲で開いているポートをスキャンするには、次のコマンドを使用します。
nc -z -v 10.10.8.8 20-80
-z
オプションは、データを送信せずに、開いているポートのみをスキャンするように
nc
に指示し、より詳細な情報を提供する
-v
オプションを指定します。
出力は次のようになります。
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused Connection to 10.10.8.8 22 port succeeded! nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused… nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused Connection to 10.10.8.8 80 port succeeded!
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port succeeded! Connection to 10.10.8.8 80 port succeeded!
Netcatを使用して、サーバーソフトウェアとそのバージョンを見つけることもできます。 たとえば、デフォルトのSSHポート22でサーバーに「EXIT」コマンドを送信した場合:
echo "EXIT" | nc 10.10.8.8 22
出力は次のようになります。
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4 Protocol mismatch.
UDPポートをスキャンするには、次のようにコマンドに
-u
オプションを追加するだけです。
nc -z -v -u 10.10.8.8 20-80
ほとんどの場合、複雑なポートスキャンには、NmapがNetcatよりも優れたツールです。
Netcatを介したファイルの送信
Netcatは、基本的なクライアント/サーバーモデルを作成することにより、ホスト間でデータを転送するために使用できます。
これは、受信ホストで特定のポートでリッスンするようにNetcatを設定し(
-l
オプションを使用)、他のホストから通常のTCP接続を確立してファイルを送信することで機能します。
受信時に次のコマンドを実行し、着信接続用にポート5555を開き、出力をファイルにリダイレクトします。
nc -l 5555 > file_name
送信ホストから受信ホストに接続し、ファイルを送信します。
nc receiving.host.com 5555 < file_name
ディレクトリを転送するには、tarを使用してソースホストのディレクトリをアーカイブし、宛先ホストのアーカイブを抽出します。
受信ホストで、ポート5555で着信接続をリッスンするようにNetcatツールを設定します。着信データは、アーカイブを抽出するtarコマンドにパイプされます。
nc -l 5555 | tar xzvf -
送信ホストでディレクトリをパックし、受信ホストのリスニング
nc
プロセスに接続してデータを送信します。
tar czvf - /path/to/dir | nc receiving.host.com 5555
両端で転送の進行状況を確認できます。 完了したら、
CTRL+C
て接続を閉じます。
シンプルなチャットサーバーの作成
複数のホスト間でオンラインチャットを作成する手順は、ファイルを転送する場合と同じです。
最初のホストで、ポート5555でリッスンするNetcatプロセスを開始します。
nc -l 5555
2番目のホストから次のコマンドを実行して、リスニングポートに接続します。
nc first.host.com 5555
メッセージを入力して
ENTER
を押すと、両方のホストに表示されます。
接続を閉じるには、
CTRL+C
ます。
HTTPリクエストを実行する
curlなどのHTTPリクエスト用の優れたツールがありますが、Netcatを使用してリモートサーバーにさまざまなリクエストを送信することもできます。
たとえば、OpenBSD WebサイトからNetcatのマニュアルページを取得するには、次のように入力します。
printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80
HTTPヘッダーとHTMLコードを含む完全な応答が端末に出力されます。
結論
このチュートリアルでは、Netcatユーティリティを使用してTCP接続とUDP接続を確立およびテストする方法を学習しました。
詳細については、Netcatのマニュアルページを参照し、Netcatコマンドの他のすべての強力なオプションについて読んでください。
netcatターミナル