Ruby 如何计算Linux机器接收ICMP请求的频率?
我一直在计算我的机器每分钟接收ICMP请求的频率 我尝试使用tcpdump并将结果保存到文本文件中,然后将时间戳变灰以计算它们之间的差异,但这只会导致大量延迟 我的做法是:Ruby 如何计算Linux机器接收ICMP请求的频率?,ruby,linux,perl,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+:
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
tcpdump-i eth1 icmp[0]==8 | tee abc.txt
grep-Eo'^[^]+'abc.txt
perl-e'open$T,pop;while(1){while(){++$f{${}>10并为/(\d+:\d+/})睡眠1打印“[$f{$}]${u1”;查找$T,0,1}'abc.txt
有没有一种方法可以计算我的机器在不使用任何文件的情况下接收ICMP请求的频率
我正在从一台机器ping到另一台机器,希望计算接收端接收ping的频率。您可以将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
您不需要捕获和分析数据包。内核在
/proc/net/snmp
中导出计数器您的问题非常广泛,不适合堆栈溢出,因为您正在用Ruby和/或Perl查找答案,并且没有显示您编写的任何代码,也没有显示错误。您可能应该在上问这个问题,重点是操作系统级别。如果你因为没有尝试过写东西而想要一个编程解决方案,你肯定是偏离主题了。请参阅以了解如何修复该问题。