ウェブサイト検索

8 Netcat (nc) コマンドと例


Netcat (または略して nc) は、Linux で TCP に関連するあらゆる操作を実行するために使用される、シンプルかつ強力なネットワーク コマンドライン ツールです。UDP またはUNIXドメインソケット。

Netcat は、ポート リスナー (受信接続用) として、ポート スキャン、 ポート リダイレクト に使用できます。また、リモート接続やその他多くのことを開くためにも使用できます。さらに、ターゲットサーバーにアクセスするためのバックドアとして使用することもできます。

この記事ではNetcatの使い方コマンドを例を挙げて解説します。

Linux に Netcat をインストールして使用する方法

システムにnetcat パッケージをインストールするには、Linux ディストリビューションのデフォルトのパッケージ マネージャーを使用します。

yum install nc                  [On CentOS/RHEL]
dnf install nc                  [On Fedora 22+ and RHEL 8]
sudo apt-get install Netcat     [On Debian/Ubuntu]

netcat パッケージをインストールしたら、次の例でnetcat コマンドの使用方法を学習することができます。

ポートスキャン

Netcat はポート スキャンに使用できます。ターゲット マシン上でどのポートが開いていてサービスを実行しているかを知ることができます。単一または複数、または開いているポートの範囲をスキャンできます。

以下に例を示します。-z オプションは、実際にデーモンにデータを送信せずに、リッスンしているデーモンを単にスキャンするように nc を設定します。 -v オプションは冗長モードを有効にし、-w は確立できない接続のタイムアウトを指定します。

nc -v -w 2 z 192.168.56.1 22     #scan a single port
OR
nc -v -w 2 z 192.168.56.1 22 80  #scan multiple ports
OR
nc -v -w 2 z 192.168.56.1 20-25  #scan range of ports

Linuxサーバー間でファイルを転送する

Netcat を使用すると、2 台の Linux コンピュータまたはサーバー間でファイルを転送できます。これらの両方のシステムには nc がインストールされている必要があります。

たとえば、あるコンピュータから別のコンピュータに ISO イメージ ファイルをコピーし、(pv ユーティリティを使用して) 転送の進行状況を監視するには、(ISO ファイルが存在する) 送信者/サーバー コンピュータで次のコマンドを実行します。

これにより、ポート 3000 でリスニング モード (-l フラグ) で nc が実行されます。

tar -zcf - debian-10.0.0-amd64-xfce-CD-1.iso  | pv | nc -l -p 3000 -q 5

そして、受信側/クライアント コンピューターで次のコマンドを実行してファイルを取得します。

nc 192.168.1.4 3000 | pv | tar -zxf -

コマンドラインチャットサーバーを作成する

Netcat を使用して、簡単なコマンドライン メッセージング サーバーを即座に作成することもできます。前の使用例と同様に、 チャット ルームに使用する両方のシステムにnc をインストールする必要があります。

1 つのシステムで次のコマンドを実行して、ポート 5000 でリッスンするチャット サーバーを作成します。

nc -l -vv -p 5000

他のシステムで次のコマンドを実行して、メッセージング サーバーが実行されているマシンへのチャット セッションを開始します。

nc 192.168.56.1 5000

基本的な Web サーバーを作成する

nc コマンド-l オプションを使用して、学習目的で静的 Web ファイルを提供する基本的な安全でない Web サーバーを作成します。これを実証するには、次のように .html ファイルを作成します。

vim index.html

ファイルに次の HTML 行を追加します。

<html>
        <head>
                <title>Test Page</title>
        </head>
        <body>
                      <p>Serving this file using Netcat Basic HTTP server!</p>
        </body>
</html>

変更をファイルに保存して終了します。

次に、次のコマンドを実行して、上記のファイルを HTTP 経由で提供します。これにより、HTTP サーバーが継続的に実行できるようになります。


while : ; do ( echo -ne "HTTP/1.1 200 OK\r\n" ; cat index.html; ) | nc -l -p 8080 ; done

次に、Web ブラウザを開き、次のアドレスを使用してコンテンツにアクセスできます。

http://localhost:8080
OR
http://SERVER_IP:8080

[Ctrl+C] を押すと、Netcat HTTP サーバーを停止できることに注意してください。

Linux サーバー接続のトラブルシューティング

Netcat のもう 1 つの便利な使い方は、サーバー接続の問題のトラブルシューティングです。ここではNetcat を使用して、クライアントが発行したコマンドに応じてサーバーがどのようなデータを送信しているかを確認できます。

次のコマンドは、example.com のホームページを取得します。

printf "GET / HTTP/1.0\r\n\r\n" | nc text.example.com 80

上記のコマンドの出力には、Web サーバーから送信されたヘッダーが含まれており、トラブルシューティングの目的で使用できます。

ポート上で実行されているサービスを検索する

Netcat を使用してポート バナーを取得することもできます。この場合、特定のポートの背後でどのサービスが実行されているかがわかります。たとえば、特定のサーバーのポート 22 で実行されているサービスの種類を確認するには、次のコマンドを実行します (192.168.56.110 をターゲット サーバーの IP アドレスに置き換えます)。 -n フラグは、DNS またはサービス ルックアップを無効にすることを意味します。

nc -v -n 192.168.56.110 80

ストリームソケットの作成

Netcat は、UNIX ドメイン ストリーム ソケットの作成もサポートしています。次のコマンドは、UNIX ドメイン ストリーム ソケットを作成してリッスンします。

nc -lU /var/tmp/mysocket &
ss -lpn | grep "/var/tmp/"

バックドアを作成する

バックドアとしてNetcatを実行することもできます。ただし、これにはさらなる作業が必要です。ターゲット サーバーにNetcat がインストールされている場合、それを使用してバックドアを作成し、リモート コマンド プロンプトを取得できます。

バックドアとして機能するには、Netcat がターゲット サーバー上の選択したポート (例: ポート 3001) をリッスンする必要があり、次のようにマシンからこのポートに接続できます。

これはリモート サーバーで実行することを目的としたコマンドで、-d オプションは標準入力からの読み取りを無効にし、-e はターゲット システムで実行するコマンドを指定します。

nc -L -p 3001 -d -e cmd.exe 

最後になりますが、Netcat は、HTTP、SSH などのさまざまなサービス/プロトコルのプロキシとして使用できます。詳細については、マニュアル ページを参照してください。

man nc

この記事では、 実践的なNetcat コマンドの使用例を8つ解説しました。他に実際の使用例をご存知の場合は、以下のフィードバック フォームから共有してください。質問することもできます。