ネットワーク

nc

TCP/UDP接続を確立するネットワークツール。CTFでのフラグ取得やポートスキャンにも使う

SYNTAX nc [options] host port

主なオプション

オプション説明
-lリッスンモード(サーバー側として待ち受ける)
-p <port>ローカルポートを指定
-uUDP を使用(デフォルトは TCP)
-v詳細表示(接続状態を表示)
-z接続確認のみ(データ送受信なし)
-w <sec>タイムアウト秒数
-nDNS 解決をしない(IPアドレス直指定)

使用例

サーバーへの接続

# ホストのポートに接続(フラグを返すCTFサービスに接続する典型例)
nc challenge.picoctf.org 25790
# Webサーバーに手動でHTTPリクエストを送る
nc example.com 80
GET / HTTP/1.0
Host: example.com

ポートの確認

# ポートが開いているか確認(-z = スキャンのみ)
nc -zv example.com 80
# ポート範囲をスキャン
nc -zv 192.168.1.1 20-100

ファイル転送

# 受信側(先に起動する)
nc -l -p 1234 > received_file.txt

# 送信側
nc 192.168.1.100 1234 < file_to_send.txt

簡易チャット

# サーバー側
nc -l -p 4444

# クライアント側
nc 192.168.1.100 4444

簡易Webサーバー(1回限り)

# HTTP レスポンスを返す
{ echo -e "HTTP/1.0 200 OK\r\n\r\nHello"; } | nc -l -p 8080

CTF での典型的な使い方

CTFのGENERAL SKILLSカテゴリでは「このホストのこのポートに接続せよ」という問題が頻出。

# 接続するだけでフラグが返ってくる
nc jupiter.challenges.picoctf.org 25790
# 対話的なシェルを要求するサービスに接続
nc pwn.challenge.ctf.io 9001

ncat(nmap版nc)との違い

GNU netcat (nc) と ncat (nmap付属) があり、オプションが若干異なる場合がある。nc -h でバージョンを確認するとよい。