在将文本写入文件之前,如何预处理无限的文本流?

Tim*_*Tim 5 php bash networking logging stream

我使用tcpflow来记录服务器上的网络流量.我想将此数据记录到文件中,但不是全部.监视进程将作为守护进程无限期地在后台运行.

流的某些行包括字节计数,如果我看到字节计数(例如,800字节),那么我需要将接下来的800字节记录到文件中.如果没有,我希望不写入该文件.

我最好的方法是对流进行这种"即时预处理"以决定重定向到日志文件的内容?某种正在侦听流的第二个守护程序脚本,它被传送到该脚本?

例:

我在流中看到以下行:

1343932842: 010.079.091.189.35856-010.104.001.199.11211: set i:1:20163484235 0 0 1429

首先,我需要检查它是否有"设置".然后,我检查该行的最后一部分(1429),然后读取下一个1429字节并将其写入文件.

tuc*_*uxi 1

是的,使用一个守护程序,该程序将流作为输入,并执行您所描述的操作。我会推荐 C 而不是脚本,因为它具有非常简单的输入/输出,并且开销非常低。

假设您有一个名为“capture”的可执行文件和一个名为“filter”的过滤程序,您可以使用 bash shell 将它们链接在一起

bash-prompt$ capture capture-params | filter
Run Code Online (Sandbox Code Playgroud)

写入 stdout的任何内容都capture可用作filterstdin 的输入。从过滤器的角度来看,读取行是一件简单的事情,当找到 end ... size 模式时,将输出写入输出文件(或再次写入 stdout)。如果写入标准输出,则可以使用以下命令将其重定向到文件

bash-prompt$ capture capture-params | filter > output-file.txt
Run Code Online (Sandbox Code Playgroud)