Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何计算Linux机器接收ICMP请求的频率?_Ruby_Linux_Perl - Fatal编程技术网

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

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+:

我一直在计算我的机器每分钟接收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
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查找答案,并且没有显示您编写的任何代码,也没有显示错误。您可能应该在上问这个问题,重点是操作系统级别。如果你因为没有尝试过写东西而想要一个编程解决方案,你肯定是偏离主题了。请参阅以了解如何修复该问题。