nc — Netcat,TCP/UDP 網路工具的瑞士刀

建立 TCP/UDP 連線、測試埠號、傳輸資料,網路診斷的萬用工具。

語法

nc [選項] 主機 port

常用選項

選項 說明 範例
-l, --listen 監聽模式(作為伺服器) nc -l 8080
-p port 指定來源 port nc -p 12345 host 80
-u, --udp 使用 UDP 而非 TCP nc -u host 514
-v, --verbose 詳細輸出(顯示連線狀態) nc -v host 22
-z, --zero-io 掃描模式(不傳送資料,只測試連線) nc -zv host 80
-w N, --wait=N 超時時間(秒) nc -w 5 host 80
-n, --nodns 不做 DNS 解析(只用 IP) nc -n host 80
-k 監聽模式下接受多個連線(不在連線後退出) nc -lk 8080

使用範例

範例 1:測試 port 是否開放

使用 -zv 快速測試目標主機的 port 是否可以連線。

$ nc -zv 192.168.1.100 22
Connection to 192.168.1.100 22 port [tcp/ssh] succeeded!
範例 2:掃描 port 範圍

快速掃描目標主機的 port 範圍(較慢,正式掃描用 nmap)。

$ nc -zv 192.168.1.100 20-25 2>&1 | grep "succeeded"
Connection to 192.168.1.100 22 port [tcp/ssh] succeeded!
範例 3:透過 nc 傳輸檔案

在兩台主機間直接傳輸檔案,不需要 FTP/SCP。

$ # 接收端(先執行):
nc -l 9999 > received_file.tar.gz

# 傳送端:
nc 192.168.1.100 9999 < file.tar.gz
範例 4:測試 HTTP 服務

手動發送 HTTP 請求,確認 Web 伺服器的回應。

$ printf 'GET / HTTP/1.0\r\nHost: example.com\r\n\r\n' | nc example.com 80
HTTP/1.1 200 OK
Content-Type: text/html
...

常見錯誤與排錯

nc: getaddrinfo for host 'host' port 0: Servname not supported
原因
沒有指定正確的 port,或主機名稱解析失敗。
解法
確認主機名稱可解析,port 號碼是否正確。

延伸閱讀