0

我有一个程序不断将机器接收到的 icmp 回显请求写入文件。

我习惯system ("tcpdump icmpecho[0] == 8 | tee abc.txt")这样做。

所以这个过程一直持续到我手动结束程序。

每行都有时间戳作为它的第一个单词。

现在我想使用单独的脚本计算收到的回显请求的频率,这样如果达到某个阈值,我就可以打印警报。

我尝试使用grep -Eo '^[^ ]+' file 将时间戳放入数组中,但我不知道将它们放入数组后该怎么做。grep 在一个 while 循环中继续,因为它正在读取的文件不断被无限填充。(如果 grep 继续这样,我将无法监控差异并打印警报,对吗?)

我要做的就是跟踪进入我的机器的 icmp echo 请求的频率,并在该频率超过阈值时打印一条警报消息。有没有其他方法?

4

2 回答 2

1

所有时间戳都保存在@arr

perl -ne '$f{$_}++ or push @arr, $_ for /(\d+:\d+)/ }{ print "$_ [$f{$_} times]\n" for @arr' file

不断从日志文件中读取,

 perl -e 'open$T,pop;while(1){while(<$T>){ ++$f{$_}>10 and print "[$f{$_}]$_" for /(\d+:\d+)/ }sleep 1;seek $T,0,1}' file
于 2013-07-08T09:13:49.890 回答
0

我在用

tcpstat -i eth1 -f icmp[0] == 8

获取请求计数。它给了我 3 个更多的参数,但必须对它们进行一些研究!

于 2013-07-15T21:45:24.163 回答