どーも!marusukeです!
TCPやUDP通信を使用して、ポートが空いているか確認したりするコマンドnc
についてです!
ncコマンドでできること
nc [オプション] ホスト名 ポート番号
nc
(Netcat)コマンドは、ネットワーク通信のテストやデバッグを行うためのコマンドです。TCPやUDPを使用して、特定のポートに接続したり、データを送受信したりできます
主な用途
- ポートスキャン(対象のホストで特定のポートが開いているか確認)
- TCP/UDP接続のテスト
- 簡易的なサーバーとしての動作
- ファイル転送
- リバースシェルの作成(管理者用途)
- リバースシェルとは、リモートのコンピュータ(ターゲットマシン)から、攻撃者や管理者のマシンへ逆方向(リバース)のシェル接続を確立する技術です。通常のSSHのようにクライアントがサーバーに接続するのではなく、ターゲットマシンが管理者のマシンに接続を試みるのが特徴です
リバースシェル攻撃について以下の記事にまとめましたので、ご覧ください
ncコマンドの使用例
1. 指定したホストのポートが開いているか確認
nc -zv example.com 80
出力例
Connection to example.com 80 port [tcp/http] succeeded!
-z
オプションは接続確認のみを行い、実際のデータ送信は行いません-v
を付けると、詳細な出力が表示されます
以下のようにgoogle.comのポートの疎通確認も可能です。お時間ある時にお試し下さい。(ポート443番はhttps通信です)
nc -zv google.com 443
2. TCP接続を確立してデータ送信
echo "Hello, Server!" | nc example.com 12345
これは、example.com
の12345
番ポートに”Hello, Server!”というメッセージを送信します
3. 簡易的なTCPサーバーを起動
サーバー側の12345ポートを開く
nc -l 12345
クライアント側からローカルホスト(127.0.0.1)の12345ポートで接続
nc 127.0.0.1 12345
サーバー側のターミナルにメッセージを入力すると、クライアント側に表示されます(双方向通信)
1つのPC内で、ターミナルを2つ起動し、試すことができます
4. UDP通信を行う
nc -u -l 9999
これはUDPの9999番ポートで待機するサーバーを作成します
別のターミナルまたはホストからデータを送信できます
echo "UDP message" | nc -u 192.168.1.10 9999
5. ファイル転送
送信側(サーバー)
nc -l 12345 > received.txt
受信側(クライアント)
cat file.txt | nc 192.168.1.10 12345
この方法で、file.txt
の内容を送信し、受信側でreceived.txt
として保存できます
ncコマンドのオプション
オプション | 説明 |
---|---|
-l | リスニングモードで動作(サーバーとして起動) |
-p | 使用するポートを指定(リスニング時) |
-z | ポートスキャンのみを実施(データ送信なし) |
-v | 詳細情報を表示 |
-u | UDPモードで動作 |
-w <秒> | 接続がない場合のタイムアウトを設定 |
-e <コマンド> | 指定したコマンドをリモートで実行(リバースシェル用途) |
-n | DNSを使用せず、IPアドレスのみで接続 |
注意点
- セキュリティリスク
nc
はネットワーク通信のテストに便利ですが、悪意のある用途にも使われることがあるため、適切な環境で使用することが重要です - FirewallやSELinuxの影響
ポートスキャンやリスニングモードで接続できない場合、firewalld
やSELinux
の設定を確認してください
まとめ
nc
(Netcat)は、ネットワーク接続のテストやファイル転送、簡易サーバー構築などに活用できる便利なコマンドです
適切に使えば、ネットワーク管理やデバッグ作業の効率を大幅に向上させることができます
注意点としてはリバースシェル攻撃を実行されてしまうリスクが発生することです。ncコマンド利用の際には必要なセキュリティ対策を講じましょう!
以上です!
ここまで読んでいただきありがとうございました!
コメント