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 Permanentlyhttps://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