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

流的某些行包含一个字节数,如果我看到该字节数(例如800字节),则需要将接下来的800字节记录到文件中。如果不是,我希望不写入该文件。

对我而言,执行流的这种“即时预处理”以确定要重定向到日志文件的最佳方式是什么?某种正在监听流的第二守护程序脚本,该脚本通过管道传递到该脚本?

例子:

我在流中看到以下行:
1343932842: 010.079.091.189.35856-010.104.001.199.11211: set i:1:20163484235 0 0 1429
首先,我需要检查它是否有一个“集合”。然后,我检查该行的最后一部分(1429),然后读取下一个1429字节并将其写入文件。

最佳答案

是的,请使用将流作为输入并执行您所描述的操作的守护程序。我建议使用C而不是脚本,因为它具有非常简单的输入/输出和非常低的开销。

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

bash-prompt$ capture capture-params | filter
capture写入stdout的任何内容都可以作为odt_code的输入,作为stdin的输入。从过滤器的角度来看,读取行以及找到end ... size模式是一件简单的事情,将输出写入输出文件(或再次写入stdout)。如果写入标准输出,可以使用以下命令将其重定向到文件
bash-prompt$ capture capture-params | filter > output-file.txt

09-27 12:59
查看更多