我一直在尝试计算机器收到的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的频率。
答案 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
中的计数器。