2013-07-15 27 views
0

我一直在试图计算我的机器收到的ICMP请求每分钟的频率。如何计算Linux机器收到的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

您的问题非常广泛,不适合堆栈溢出,因为您在Ruby和/或Perl中搜索答案,并且没有显示任何代码,也没有显示错误。你可能应该在http://poweruser.com上提问这个问题,它着重于操作系统级别。如果你想要一个编程解决方案,因为你还没有尝试写一些东西,你绝对不是主题。请参阅http://sscce.org/了解如何解决该问题。 –

回答

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 
0

您不需要捕获和分析数据包。内核导出计数器在/proc/net/snmp