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 個連接傳輸 2 個文件,您將不得不以某種方式使用標記來分隔數據流中的文件,因為文件結尾是長度為 0 的讀取,netcat 將使用它來關閉插座。
Control-D
可能是您可以在終端中鍵入以表示文件結束的內容,但它不會生成字元,它會以 0 的長度終止讀取Control-D
。數據流中沒有。要簡單地傳輸 2 個文件,您可以使用現有的打包命令,例如
tar
. 用作nc -k -l 4458 -v -c 'tar xf - >&2'
您的接收者和tar cf - foo bar
發送者。(由於文件名來自發件人,您必須信任發件人)。或者,如果您的文件是簡單文本,您可以引入一個特殊行來分隔 2 個文件。例如在發送方
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
,然後當它看到“再見”行時,它會更改為第二個文件名。