实时处理 tcpdump 输出的时间戳

实时处理 tcpdump 输出的时间戳

我想维护一个文件,其中包含自从看到与 tcpdump 过滤器匹配的数据包以来的秒数。目的是确定健谈的客户端何时不再连接网络。当我不再看到 MDNS 垃圾时,我很确定它已经消失了。

sudo tcpdump -l -tttt -i wlan0 port 5353 and src <hostname> | cut -c -19 | xargs -0 -n1 ./timesec.sh

是我到目前为止所得到的。timesec.sh将使用 a 中的输入参数date -d与文件中存储的日期进行比较,然后更新文件的秒数。

然而它不起作用,我怀疑输出cut没有像我预期的那样通过管道传输。

答案1

我认为您需要-0从 xargs 命令行中删除 。用于-0通过空终止来分隔字段,据我所知,cut不支持这一点。相反,我建议使用-d '\n'在换行符处终止字段:

... | cut -c -19 | xargs -d '\n' -n1 ./timesec.sh

来自文档

-0

输入项以空字符而不是空格终止,并且引号和反斜杠并不特殊(每个字符均按字面意思理解)。禁用文件结尾字符串,该字符串的处理方式与任何其他参数一样。当输入项可能包含空格、引号或反斜杠时很有用。 GNU find -print0 选项生成适合此模式的输入。

--分隔符=delim

-d 德利姆

输入项以指定字符结束。引号和反斜杠并不特殊;输入中的每个字符均按字面意思处理。禁用文件结束字符串,该字符串的处理方式与任何其他参数一样。当输入仅由换行符分隔的项目组成时,可以使用此选项,尽管在可能的情况下设计程序以使用 --null 几乎总是更好。指定的分隔符可以是单个字符、C 样式字符转义符(例如 \n)或者八进制或十六进制转义码。八进制和十六进制转义码被理解为 printf 命令。不支持多字节字符。

相关内容