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

标签 ruby linux perl

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

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

我的方法是:

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 的频率。

最佳答案

您可以将 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

关于ruby - 如何计算 Linux 机器接收 ICMP 请求的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17662979/

相关文章:

ruby-on-rails - Rails 添加了新的设计 View

ruby-on-rails - ruby block (产量)

ruby-on-rails - PG::InvalidParameterValue: 错误:参数 "client_min_messages"的无效值: "panic"

ruby - 在 Ruby 中打印可读矩阵

python - 并行流水线编程

windows - 使用 perl 在 Windows 资源管理器中打开带空格的 UNC 路径

perl - Moose:通过创建对象检查属性

linux - shell脚本不运行其中的其他脚本

linux - ao_play(),X个字节的音频 block 的播放时间是多少?

linux - Perl:从 star 命令获取用户名和组名