Pipe
netcat 不列印響應
我正在嘗試使用
netcat
和管道響應將命令發送到 tcp 埠,當我執行
netcat
並鍵入命令時,它會正確列印響應,但是當我從管道傳遞命令時,它會正確發送命令但不列印響應因此,這可以正常工作:
netcat localhost 9009
雖然這只是發送命令但不列印響應:
echo 'my_command' | netcat localhost 9009
為什麼?
如何
netcat
列印響應文本?
正如@Patrick 所說,這個問題通常是由於
netcat
在給出響應之前退出。您可以通過添加-q 2
到命令行來解決這個問題,即netcat
在標準輸入上檢測到 EOF 後告訴掛起 2 秒左右。顯然你也可以讓它等待一些其他的秒數。
用這個:
cat <(echo command) - | nc host port
問題是它
nc
會在標準輸入關閉後立即關閉連接,這對於簡單的my_command
字元串來說非常快,因此永遠沒有機會收到響應。(如果您通過管道傳輸一個非常大的文件,您會看到它可能會在發送完文件之前得到響應)。
cat
使用-
作為第二個參數輸入:它cat
在發送第一個參數的內容後,在標準輸入上偵聽更多內容以通過管道傳輸。第一個參數只是讓echo
命令通過cat
——它也可以是一個文件,其中包含你的命令 a lacat < file - | ...
。或者這樣做:
(echo command; while true; do sleep 0.01; echo -n "#"; done) | nc host port
#
這會在輸入的第二行發送無限的字元。使用#
像遠端這樣的 bash 會忽略它作為評論。我在這裡選擇了一個 10 毫秒的小等待時間,所以它在連接結束時反應更快。YMMV。不利的一面可能是那個
cat
或while
循環並nc
繼續執行,直到你擊中^C
或^D
在外殼上。這真的取決於遠端端。使用
-w 1
(OSX netcat)或-i 1
(nmap’s ncat)添加超時使其關閉連接並nc
在1秒後,但cat
會繼續執行,直到您輸入一些字元並且管道中斷(我認為)。但是,如果遠端端在接收並處理命令後會自動關閉連接,則它會起作用 - 這也將結束
nc
客戶端和程序管道進入它。