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 號碼是否正確。