【发布时间】:2012-07-31 18:15:34
【问题描述】:
我正在使用 tcpflow 在服务器上记录网络流量。我想将此数据记录到文件中,但不是全部。监控进程将无限期地作为守护进程在后台运行。
流的某些行包含一个字节数,如果我看到该字节数(比如 800 个字节),那么我需要将接下来的 800 个字节记录到文件中。如果没有,我希望不写入文件。
对我来说,对流进行这种“即时预处理”以决定将什么重定向到日志文件的最佳方式是什么?某种正在侦听流的第二个守护程序脚本,它通过管道传输到该脚本?
例子:
我在流中看到以下行:
1343932842: 010.079.091.189.35856-010.104.001.199.11211: set i:1:20163484235 0 0 1429
首先,我需要检查它是否有一个“集合”。然后,我检查该行的最后一段 (1429),然后读取接下来的 1429 个字节并将其写入文件。
【问题讨论】:
-
看起来 tcpflow 支持像 tcpdump 这样的过滤表达式
-
@jordanm 我认为这对我没有帮助。这是一个示例行:
1343932842: 010.079.091.189.35856-010.104.001.199.11211: set i:1:20163484235 0 0 1429我需要首先看到该行有一个“集合”,然后检查该行的最后一段 (1429),然后读取接下来的 1429 个字节并将其写入文件。 -
你用什么语言写这个?这是在什么环境下执行的?标签“bash”和“php”令人困惑......
-
二进制 TCP 流可以包含任何数据,包括换行符;你确定只有文字吗?否则,您需要确保将“控制线”(如您的示例)与实际数据分开......
-
@tucuxi 生成流的进程是从 C 编译的二进制文件,从命令行运行。保证返回文本数据。
标签: php bash networking logging stream