Netcat(または nc
)は、TCPまたはUDPプロトコルを使用して、ネットワーク接続を介してデータを読み書きするコマンドラインユーティリティです。これは、ネットワークおよびシステム管理者の武器の中で最も強力なツールの1つであり、ネットワークツールのスイスアーミーナイフと見なされています。
Netcatはクロスプラットフォームであり、Linux、macOS、Windows、およびBSDで使用できます。 Netcatを使用して、ネットワーク接続のデバッグと監視、開いているポートのスキャン、データの転送、プロキシとしての使用などを行うことができます。
Netcatパッケージは、macOSおよびUbuntu、Debian、CentOSなどの一般的なLinuxディストリビューションにプリインストールされています。
Netcat構文#
Netcatユーティリティの最も基本的な構文は、次の形式を取ります。
nc [options] host port
Ubuntuでは、 netcat
のいずれかを使用できます またはnc
。これらは両方とも、OpenBSDバージョンのNetcatへのシンボリックリンクです。
デフォルトでは、Netcatは指定されたホストとポートへのTCP接続を開始しようとします。 UDP接続を確立する場合は、 -u
を使用します オプション:
nc -u host port
ポートスキャン#
ポートのスキャンは、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 [tcp/ssh] 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 [tcp/http] succeeded!
ポートが開いている行のみを印刷する場合は、 grep
を使用して結果をフィルタリングできます。 コマンド。
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] 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 </ code>を使用) オプション)受信ホストで、他のホストから通常の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
と入力します 接続を閉じます。
シンプルなチャットサーバーの作成#
2つ以上のホスト間でオンラインチャットを作成する手順は、ファイルを転送する場合と同じです。
最初のホストでNetcatプロセスを開始して、ポート5555でリッスンします。
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コマンドの他のすべての強力なオプションについてお読みください。
ご質問やご意見がございましたら、下にコメントを残してください。