如何计算Linux机器接收的ICMP请求的频率?

时间:2013-07-15 20:09:23

标签: ruby linux perl

我一直在尝试计算机器收到的ICMP请求的每分钟频率。

我尝试使用tcpdump并将结果保存到文本文件中,然后点击时间戳来计算它们之间的差异,但这只会导致很多延迟。

我的方法是:

tcpdump -i eth1 icmp[0]==8 | tee abc.txt
grep -Eo '^[^ ]+' abc.txt
perl -e 'open$T,pop;while(1){while(<$T>){ ++$f{$_}>10 and print "[$f{$_}]$_" for /(\d+:\d+)/ }sleep 1;seek $T,0,1}' abc.txt

有没有办法在不使用文件的情况下计算机器上收到的ICMP请求的频率?

我正在从一台机器ping到另一台机器,并希望计算接收端接收ping的频率。

2 个答案:

答案 0 :(得分:1)

您可以将tcpdump包装在脚本中,不涉及任何文件。注意tcpdump的-l选项,它表示执行行缓冲。如果你把它留下来,你会得到缓冲输出,这可能不是你想要的。

sout = IO.popen("sudo  tcpdump -l -i any icmp[0]==8 2>&1")
line = sout.gets
while (!line.nil?) 
  p line
  #fiddle with line and do time
  line = sout.gets
end

答案 1 :(得分:0)

您无需捕获和分析数据包。内核导出/proc/net/snmp中的计数器。