Python, 創建一個 TCP 伺服器

Python 標準庫提供了 socketserver 套件,我們可以使用它來創建一個 TCP 伺服器。 from socketserver import BaseRequestHandler, TCPServer class handler(BaseRequestHandler): def handle(self): while True: msg = self.request.recv(1024) if msg == b'quit\n': break self.request.send(b'Message received: ' + msg) with TCPServer(('', 8000), handler) as server: server.serve\_forever() 使用 Netcat 連接到這個伺服器,Netcat 是一個很方便的工具,非常適合用來測試 TCP 和 UDP 伺服器。它默認安裝在 Linux 和 macOS 上,在 nc 命令下可用: nc localhost 8000 連接到伺服器後,您可以通過輸入消息來向其發送任何消息。伺服器將回復一則確認收到消息的回應。 除非您輸入 quit,否則連接將關閉(但伺服器仍然運行,您可以再次連接)。

如何使用Netcat

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將內容保存到一個檔案中,從而實現基本的檔案傳輸。...