如何在不關閉連線的情況下通過“netcat”EOF“cat”?

如何在不關閉連線的情況下通過“netcat”EOF“cat”?

我遇到了一個問題,我有一個帶有命令的 ncat 伺服器ncat -l [port] -k -c "cat > foo; cat > bar"。當我透過 netcat 連接到該伺服器時,它允許我寫入文件foo,然後寫入bar.問題是,當連線的客戶端想要foo透過發送 a 來停止寫入時^D,它會關閉客戶端而不是繼續寫入到bar,因此bar永遠不會被寫入。我怎樣才能繞過這個?有什麼替代方法cat可以讓我使用命令而不是 退出EOF

答案1

如果您想要做的是僅使用 1 個連接傳輸 2 個文件,則必須以某種方式使用標記來分隔資料流中的文件,因為文件結尾是長度為 0 的讀取,netcat 將使用它來關閉插座。

Control-D可能是您可以在終端機中鍵入的內容來表示檔案結束,但它不會產生字符,它會以長度 0 終止讀取Control-D

要簡單地傳輸 2 個文件,您可以使用現有的打包命令,例如tar.用作nc -k -l 4458 -v -c 'tar xf - >&2'您的接收者和tar cf - foo bar發送者。 (由於檔案名稱來自寄件者,您必須信任寄件者)。

或者,如果您的文件是簡單文本,您可以引入特殊行來分隔這兩個文件。例如,在發送方cat foo; echo bye; cat bar和接收方類似

nc -k -l 4458 -v -c 'awk -v file=foo '\''/^bye$/{ file="bar";next }{print >file}'\'

這個 GNU awk 腳本將第一個檔案名稱保存在變數中file,然後當它看到「bye」行時,它會更改為第二個檔案名稱。

相關內容