如何使用 nc 無限期地監聽 TCP 連接埠?

如何使用 nc 無限期地監聽 TCP 連接埠?

我想無限地讀取到達特定 TCP 連接埠的資料並將資料轉儲到檔案中。我嘗試過許多不同的變體,nc但它對我來說並不奏效。在大多數情況下,我在控制台上沒有收到任何錯誤。以下是我嘗試過的:

nc -lv 12345 >> ../myfile
nc -v 12345 >> ../myfile
nc -v -p 12345 >> ../myfile
nc -v localhost -p 12345 >> ../myfile

感謝你的幫助..

答案1

我想無限期地讀取到達特定 TCP 連接埠的數據

這實際上沒有意義...如果您希望所有資料都到達 UDP 端口,那麼很好 - 然而 TCP 是基於連接的協定。一旦客戶端連接,並且您accept(),您最終會得到兩個套接字 - 一個正在偵聽,另一個連接到客戶端...nc將關閉原始偵聽套接字,並與客戶端進行一對一處理。


如果您希望能夠偵聽多個客戶端連接,請嘗試使用socat

socat TCP-LISTEN:12345,fork FD:1 >> ../myfile

這將設定一個偵聽套接字並在連接上分叉新進程 - 保持偵聽套接字偵聽。所有接收到的資料都會寫入 stdout(檔案描述子1),並重定向到該 stdout../myfile以進行追加。

筆記:資料將從任意數量的客戶端接收,沒有保證的順序,沒有框架...即:如果您一次有多個客戶端,這將是一團混亂的資料。


如果您想socat為您處理該文件,那麼您可以使用CREATE或之一OPEN(請參閱手冊頁):

socat TCP-LISTEN:12345,fork OPEN:../myfile,append

如果您對“一次一位客戶" 方法,然後放入nc一個循環:

while :; do nc -l 12345; done >> ../myfile

測試一下nc

nc localhost 12345

答案2

左邊的螢幕

nc -l 1234 啟動伺服器。

右側螢幕 nc 127.0.0.1 1234已連線。

看起來你的命令有誤。

還值得知道的是您使用的是 gnu 版本還是 bsd 版本,我的是 bsd 版本。 man nc 顯示「NC(1) BSD 通用指令手冊」。要在 gnu 上啟動伺服器,可能需要 -l 和 -p。要將客戶端連接到伺服器的任何端口,永遠不會使用 -p。

在此輸入影像描述

您也可以使用 -v

在此輸入影像描述

您面臨的直接問題是您根本無法運行它。

你的問題詢問它是不確定的,但我要注意的是,如果你在客戶端執行 ctrl-c ,那麼除了斷開連接之外,它還會停止伺服器。您可以將該伺服器置於循環監聽狀態。這樣可行。因此,如果您在客戶端按下 ctrl-c 後嘗試再次連接,伺服器將繼續偵聽並且仍然存在。

在此輸入影像描述

相關內容