Netcat是一個非常有用的Unix指令,我們可以使用它來執行各種網路任務,同時它也非常有用於除錯和學習事物的運作方式。
我們可以透過nc
指令來使用Netcat。
使用以下語法連接到任何網路伺服器:
nc DOMAIN PORT
例如:
nc localhost 8000
一旦連接到伺服器,您可以輸入任何訊息,並且您將看到伺服器發送回的任何回覆。就像是一對一的簡單聊天,您可以在協定的應用層功能上進行工作(如HTTP、FTP、SMTP等)。
使用Netcat,您可以模擬所有這些驅動互聯網上應用程式層協定的協定。
您可以連接到Web伺服器並向其發送HTTP協定指令。例如,我可以使用nc flaviocopes.com 80
連接到我的網站,並向其發送以下內容:
GET / HTTP/1.1
Host: flaviocopes.com
(第三行是一個空行)
伺服器將回覆,回覆中包含HTTP/1.1 301 Moved Permanently
到https://flaviocopes.com/
的重新定向回應,因為我強制使用HTTPS。
這裡是一個簡單的示例,用於與我單獨構建的“回显”伺服器進行交互,該服務器會將我們發送給它的內容返回:
Netcat可以使用TCP(默認協議)或UDP進行操作。
要使用UDP,請添加-u
選項:
nc -u localhost 8000
您也可以創建一個伺服器。使用-l
(listen)選項來聽取特定的埠口:
nc -l PORT
然後Netcat將列印出接收到的每個命令。
嘗試在一個終端窗口上運行伺服器命令nc -l 8001
,並在另一個終端窗口上運行客戶端命令nc localhost 8001
,然後通過在客戶端終端窗口中輸入消息來向伺服器發送消息。
Netcat還可用於網路檢測。您可以在特定範圍內掃描伺服器的開放埠口:
nc -v -z localhost 1-10000
提示:搭配使用
grep
過濾干擾訊息:nc -v -z localhost 1-10000 2>&1 | grep succeeded
(如果您想知道使用特定埠口的進程,執行lsof -i :PORT
)
您可以告訴nc
伺服器將檔案的內容發送給連接的客戶端:
nc -l PORT < FILENAME
使用nc DOMAIN PORT
連接的客戶端將打印該檔案的內容,但它也可以使用nc DOMAIN PORT > FILENAME
將內容保存到一個檔案中,從而實現基本的檔案傳輸。
在傳送完檔案後,伺服器將結束。
您可以將該命令包裝在一個簡單的Bash執行迴圈中:
while true; do nc -l PORT < FILENAME; done
這是Web伺服器的最簡單實現方式:
while true; do nc -l 80 < index.html; done
您還可以告訴客戶端將檔案中包含的指令發送給伺服器:
nc DOMAIN PORT < FILENAME