将Netcat流写入文件并添加额外文本

3

我正在尝试将netcat流写入到本地文件中,但我希望在实时流传输每个条目时添加一些元数据(例如连接的源IP),因为我将处理多个流将写入同一文件。

例如,以下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

I want the written results to look like this:

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个回答

3

尝试使用sed(流编辑器):

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

注意:使用 -u 标志可以避免 sed 使用缓冲。该标志仅在 Linux 下受支持,不支持 Mac OSX。


谢谢。这几乎是所需的解决方案。当我运行命令nc 192.168.0.1 443 | sed 's/^/Source: 192.168.0.1 | /g'时,我看到了完全符合我的要求的结果(写入stdout)。但是,当我添加>> results.txt时,它不会写入或附加到文件中。我尝试过重定向输出,但仍然没有成功。我会在弄清楚最后一部分之后将其标记为最佳答案。 - Karimi
问题是由缓冲引起的。默认情况下,如果输出到终端,则每行都会立即显示,但如果输出到文件,则会缓冲更大的块(4-64kB),并且只有当缓冲区满时才会写入文件。请参见此问题,也许那里的某个答案可以帮助您。 - Thawn
1
在Linux上,我找到了一个解决方案,只需将“-u”标志添加到sed命令中即可。希望这可以帮助到您。 - Thawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接