ウェブサイト検索

Linux nc コマンドの6つのネットワーキング用途


ネットキャットツールはネットワーク管理者の間で非常に人気があります。しかし、カジュアルなLinuxユーザーの日常生活でも異なる目的で役立つことがあります。リサーチをしていると、ncコマンドを使った素晴らしいユースケースをいくつか見つけました。

6. ネットワーク接続を確立する

最も簡単で基本的なことから始めましょう。ncができること、それは2台のマシンの間に直接TCPまたはUDP接続を作成することです。これは、より高度な使用法の多くの基礎となるものです。

2つのLinuxシステムがあると仮定しましょう。デモンストレーションのために、私はUbuntuマシンとLinux Mintマシンを使用しています。Ubuntuはサーバーまたはリスナーとして機能し、Linux Mintはクライアントまたはコネクタとして機能します。

まず、リスナーを開始します。

nc -l -p 12345

-lフラグはリスナーモード用です。-pフラグはポートを定義するためのものです。ここではポート12345を使用していますが、他の未使用のポートを使用することもできます。このコマンドを実行すると、ターミナルは接続を待つ状態になります。

さて、コネクターマシンから実行します:

nc ip_address port_number

サーバーのIPアドレスでip_addressを置き換えてください。ポート番号はリスナーで使用したものになります。私の場合は、

nc 192.168.100.4 12345

これにより、2台のマシン間にTCP接続が確立されます。さらに、これはサーバーだけが送信できる一方通行の通信ではありません。むしろ、両方の当事者が送信および受信できます。

UDP接続を確立したい場合は、-uフラグを使用して行うことができます。リスナー側のマシンで、次のコマンドを実行してください:

nc -u -l -p 12345

クライアントマシンで、次を実行します:

nc -u 192.168.100.4 12345

UDP接続はTCPよりも信頼性が低いです。しかし、速度が重要であり、少しのデータ損失が許容できる場合には、UDPが好まれます。

5. ポートスキャン

単一のポートに接続することに加えて、ncは一連のポートをチェックして、どのポートが開いているかを確認できます。これにより、トラブルシューティングやサービスの列挙に役立ちます。これがncが時々「ネットワーキングのスイスアーミーナイフ」と呼ばれる理由でもあります。

クライアントマシンからサーバーマシン上でどのTCPポートが開いているかを知りたいとしましょう。あなたは以前と同様にサーバー上にリスナーを作成します。

nc -l -p 12345

次に、クライアントから実行します:

nc -z -v 192.168.100.4 20-130

-zフラグはnetcatにゼロI/Oモードを使用するよう指示します。これは、netcatがデータを送信するのではなく、リスニングデーモンをスキャンするべきだということを意味します。-vフラグは詳細モードを有効にし、結果をより良い方法で表示します。また、私たちは関心のあるポートの範囲を20から130まで定義しています。

所有するか、スキャンする明示的な許可を得ているシステムのみをスキャンしてください。無断スキャンは違法であるか、敵意として見なされる可能性があります。

デモンストレーションでは、ほとんどすべてのポートが閉じていたため接続を拒否しましたが、ポート80だけは例外でした。同様に、UDPポートもスキャンすることができます。

4. ファイル転送

Netcatは、FTP、SCP、または共有フォルダを必要とせずに、TCPまたはUDP経由でファイルを直接送信できます。これにより、他の方法が利用できない場合でも、迅速な転送に最適です。私のLinux MintからUbuntuマシンにファイルを送信しましょう。

すでに "test.txt "という名前のファイルがあり、そこには "ncファイル転送のためのファイル" と書かれています。まず、ファイルを転送したい機械でリスナーを作成します。その際、接続の出力をファイルにリダイレクトします。

nc -l -p 12345 > received.txt

次に、送信者のマシンでファイルの内容をこのようにnc接続にリダイレクトします。

nc 192.168.100.4 12345 

転送が成功したかどうかを確認するには、lsコマンドを使ってファイルがそこにあるかを見ることができ、その後catコマンドを使って内容を読むことができます。また、逆の操作を行い、ファイルを逆方向に送ることもできます。必要なのは、上で示したコマンドを使って役割を逆にすることだけです。

ウェブサーバーを作成する

Netcatはポートでリッスンし、接続してきた誰にでも生のHTMLを送信することで、簡単なHTTPサーバーとして動作することができます。もちろん、ApacheやNginxの代わりになることはありません。しかし、迅速なデモ、デバッグ、またはHTTPリクエストについて学ぶためには、完璧です。

まず、サーバーのマシン上に静的なHTMLファイル(私はそれをpage.htmlと呼んでいます)を作成します。私の場合、それはUbuntuです。

echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello from Netcat</h1>" > page.html

このファイルには、HTTPステータスライン、コンテンツタイプヘッダー、そしてシンプルなHTMLボディを含めました。\r\nシーケンスは、HTTPにおいてヘッダーとボディを分けるために重要です。

今、同じマシンでnetcatウェブサーバーを開始します:

while true; do nc -l -p 8080 

ここでは、各リクエストの後でもサーバーが動作し続けるように、whileループを使用しています。ポート8080でリッスンし、HTMLファイルを応答として送信しています。さて、クライアントマシン(私の場合はLinux Mint)からウェブブラウザを開き、IPとポートを指定して静的HTMLページにアクセスしてください。

http://192.168.100.4:8080

curl コマンドを使用して HTML ページを取得することもできます。

curl http://192.168.100.4:8080

2. 簡単なチャットアプリケーションを作成する

Netcatは2つの端末を接続できるので、一方に入力したものは瞬時にもう一方に表示されます。少しシェルのトリックを使うことで、リアルタイムチャットツールにすることができます。サードパーティのチャットアプリは必要ありません。

これを行うには、最初のセクションに示されているようにネットワーク接続を作成する必要があります。他のマシンでリスナーを作成してください:

nc -l -p 12345

次に、別のマシンからそれに接続します。

nc 192.168.100.4 12345

接続を確立すると、一方の端末に何でもタイプできます。それはもう一方の端末に表示されます。次に、第二の端末に何でもタイプすると、それが最初の端末に表示されます。

今、あなたは端末で往復してメッセージを一台のコンピュータから別のコンピュータに送信することができます。私は少し工夫をして、送信者名と対応するメッセージを追加できないか試みました。その方法で、誰がどのメッセージを送ったのかを追跡しやすくなります。

それは、echoとwhileループを使って送信者名を追加することで実現できます。これが設定です。サーバーマシンでこれを実行してください:

while read msg; do echo "Ubuntu: $msg"; done | nc -l -p 12345

そして、これがコネクターマシン上のものです。

while read msg; do echo "LM: $msg"; done | nc 192.168.100.4 12345

上記のコマンドは入力を待ち、それに接頭辞を付けて送信します。受信側では、接頭辞は送信された通りに表示されます。ユーザーが2人以上いても、この方法でメッセージを追跡することができます。

1. ネットワークトラブルシューティング

最後に、ncコマンドを使用して一般的なネットワークの問題を解決できます。ネットワークに何か問題が発生した場合、接続の問題、サービスの問題、またはファイアウォールの問題を確認するのに役立ちます。ポートをテストし、サービスをシミュレートし、生の応答を確認できます。

アプリケーションが応答していないとします。そのポートに接続できるかどうかを確認するために、ncを使用できます。

nc -zv 192.168.100.4 22

もしハングするか、「接続が拒否されました」と表示される場合は、ポートが閉じているかフィルタリングされています。

サービスに手動で話しかけて、期待通りに応答するかどうか確認できます。例えば、ローカルのHTTPサービスが応答するかどうかを確認することです。

nc 192.168.100.4 8080

サービスが正常に動作すれば、HTTPレスポンスヘッダーと、場合によってはHTMLを返します。これは、ブラウザなしで不具合のあるウェブアプリをデバッグするのに最適です。

アプリがポートに接続できるが、正しいデータを送信していないと思われる場合は、サービスになりすまし、アプリが送信するものをキャプチャすることができます。これはカスタムクライアント/サーバプロトコルのデバッグに役立ちます。netcatを使用すると、これらの小さなテストを迅速に実行し、ネットワークのどこで問題が発生しているか、そしてそれを修正する方法を見つけることができます。


netcatでできることはまだまだたくさんあります。興味があれば、ncの公式マニュアルページをチェックしてみてください。他にも探求すべきLinuxのネットワーキングコマンドがたくさんあります。