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中寻找解决方案。
谢谢。这几乎是所需的解决方案。当我运行命令nc 192.168.0.1 443 |时sed's/^/Source:192.168.0.1 |/g'我完全按照我的需要看到结果(写入stdout)。但是,当我使用>> results.txt时,它不写入或附加到文件。我玩过重定向输出,但仍然没有运气。只要我弄清楚这最后一块,我会将其标记为最佳答案。 – Karimi
问题是由缓冲引起的。默认情况下,如果输出到达终端,则每条线都会立即显示,但如果输出到达文件,则会缓冲更大的块(4-64kB),并且只有在缓冲区满后才写入文件。看到[这个问题](http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe)也许有一个答案可以帮助你。 – Thawn
在Linux上,我找到了一个解决方案,只需将'-u'标志添加到sed命令。我希望这有帮助。 – Thawn