【Linux】TCPやUDPでポートが空いているか確認する:nc

Linux

どーも!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.com12345番ポートに”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詳細情報を表示
-uUDPモードで動作
-w <秒>接続がない場合のタイムアウトを設定
-e <コマンド>指定したコマンドをリモートで実行(リバースシェル用途)
-nDNSを使用せず、IPアドレスのみで接続

注意点

  • セキュリティリスク
    ncはネットワーク通信のテストに便利ですが、悪意のある用途にも使われることがあるため、適切な環境で使用することが重要です
  • FirewallやSELinuxの影響
    ポートスキャンやリスニングモードで接続できない場合、firewalldSELinuxの設定を確認してください

まとめ

nc(Netcat)は、ネットワーク接続のテストやファイル転送、簡易サーバー構築などに活用できる便利なコマンドです
適切に使えば、ネットワーク管理やデバッグ作業の効率を大幅に向上させることができます

注意点としてはリバースシェル攻撃を実行されてしまうリスクが発生することです。ncコマンド利用の際には必要なセキュリティ対策を講じましょう!

以上です!

ここまで読んでいただきありがとうございました!

コメント

タイトルとURLをコピーしました