2015-11-25 74 views
2

我想寫一個netcat流到本地文件,但我想也實時註釋每個流條目與一些元數據(即連接的源IP),因爲我將使用多個將寫入同一文件的流。寫一個Netcat流到文件與其他文本

例如,以下(bash命令)正常工作:

nc 192.168.0.1 443 >> result.txt & echo -n "| Source: 192.168.0.1 | " >> result.txt 

與上述代碼的問題是,它將只輸入元數據的第一次。因此,輸出如下所示:

Source: 192.168.0.1 | !* Connected! 
X 
Y 
Z 

我想要的結果書面這個樣子:

Source: 192.168.0.1 | !* Connected! 
Source: 192.168.0.1 | X 
Source: 192.168.0.1 | Y 
Source: 192.168.0.1 | Z 
Source: 192.168.0.2 | A  #<--Written From different netcat stream 

不幸的netcat完成後,我不能運行一個腳本來添加元數據文本它的工作,因爲我需要一些方法來識別正在寫入的流,因爲多個流將寫入同一個文件。主要是在bash或python中尋找解決方案。

回答

1

嘗試SED(小號 tream itor):

nc 192.168.0.1 443 | sed -u 's/^/Source: 192.168.0.1 | /g' >> results.txt 

這應該與Source: 192.168.0.1 |tail -f some.file | sed -u 's/^/Source: 192.168.0.1 | /g'>t.txt測試,並得到了替換文本每行^的開頭:

Source: 192.168.0.1 | line one 
Source: 192.168.0.1 | line two 
Source: 192.168.0.1 | ... 
Source: 192.168.0.1 | line n 

nb:-u標誌是爲了防止sed使用緩衝。該標誌僅在Linux下支持,而不是在Mac OSX上支持。

+0

謝謝。這幾乎是所需的解決方案。當我運行命令nc 192.168.0.1 443 |時sed's/^/Source:192.168.0.1 |/g'我完全按照我的需要看到結果(寫入stdout)。但是,當我使用>> results.txt時,它不寫入或附加到文件。我玩過重定向輸出,但仍然沒有運氣。只要我弄清楚這最後一塊,我會將其標記爲最佳答案。 – Karimi

+0

問題是由緩衝引起的。默認情況下,如果輸出到達終端,則每條線都會立即顯示,但如果輸出到達文件,則會緩衝更大的塊(4-64kB),並且只有在緩衝區滿後才寫入文件。看到[這個問題](http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe)也許有一個答案可以幫助你。 – Thawn

+1

在Linux上,我找到了一個解決方案,只需將'-u'標誌添加到sed命令。我希望這有幫助。 – Thawn

相關問題