2013-07-15 64 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