【问题标题】:Writing a Netcat stream to file with additional text将 Netcat 流写入带有附加文本的文件
【发布时间】:2015-11-25 07:21:43
【问题描述】:

我正在尝试将 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

我希望书面结果如下所示:

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 中寻找解决方案。

【问题讨论】:

    标签: python linux bash stream netcat


    【解决方案1】:

    试试 sed(stream editor):

    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'&gt;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 不支持。

    【讨论】:

    • 谢谢。这几乎是所需的解决方案。当我运行命令 nc 192.168.0.1 443 | sed 's/^/来源:192.168.0.1 | /g' 我看到的结果完全符合我的要求(写入标准输出)。但是,当我添加 >> results.txt 时,它不会写入或附加到文件中。我玩过重定向输出,但仍然没有运气。等我弄清楚最后一篇文章后,我会将其标记为最佳答案。
    • 问题是由缓冲引起的。默认情况下,如果输出到终端,每一行都会立即显示,但是如果输出到文件,则缓冲较大的块(4-64kB),并且仅在缓冲区满时才写入文件。请参阅this question,也许那里的答案之一对您有帮助。
    • 在 Linux 上,我找到了解决方案,只需在 sed 命令中添加 -u 标志即可。我希望这会有所帮助。
    猜你喜欢
    • 2020-08-02
    • 2017-06-26
    • 1970-01-01
    • 2013-12-26
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多