2015-12-11 41 views
3

我想在一段特定的時間內(直到執行腳本後5分鐘)在網絡接口(例如eth0)上統計傳入數據包的數量,我該怎麼做通過shell或python腳本?哪一個更準確?計算特定網絡接口上的傳入數據包

我知道網絡工具,如iptraf,但我希望它通過腳本來完成,並最好將計數值打印在屏幕上或文件中。

+2

我想你可以使用'/ sys/class/net/eth0/statistics/rx_packets'。它只包含一個數字,所以你只需要檢查兩次,然後減去 – Duffydake

+0

@Duffydake考慮到陳述的問題,那應該是答案。其他答案雖然有效,但對請求肯定是過分的。 – msw

回答

2

如果您正在使用Linux的shell,你可以使用tcpdump完成工作。 shell中使用的大多數命令都預安裝在大多數Linux發行版中。

#!/bin/sh 
# # # Run this as sudo 
# # # Pass an argument of your IP address 
# # $ Usage: sudo ./<nameOfTheScript> <IPofYourMachine> 
# Parameters 
captureTime=300 


# Capture packets for X Seconds 
tcpdump -i eth0 dst host $1 >> /dev/null 2> out & 
pid=$! 
sleep $captureTime 
kill $pid 

# Extract relevant data 
cat out | tail -2 | head -1 | cut -d " " -f 1 

# Cleaning up! 
rm out 

殼運行tcpdump300秒並終止它。 tcpdump將您需要的數據輸出到stderr。這將是將該流重定向到文件的原因(2> out)。 shell的最後一秒命令從tcpdump中提取我們想要的完整消息所需的數據。它需要運行爲sudo!另外不要忘記根據需要修改監聽界面。

如果還不清楚爲什麼我已經完成了我所做的,請告訴我!

+1

'tcpdump -i eth0'也會捕獲傳出的數據包。你應該添加'ip dst $ Ipaddr'或者等價物,以確保你只有傳入的數據包 – Duffydake

+0

是的,我想過了,但是在寫腳本時卻錯過了它!無論如何編輯應該是問題。 – Harsh

+0

非常感謝,它對我來說就像一個魅力:-) 只有一件事,對於一些產生的流量,它似乎不能正常工作(例如5Gb/s或更高)我沒有得到任何準確的價值,如何我可以修復它嗎? –

2

你可以,如果你使用的是Linux內核使用/sys/class/net/INTERFACE/statistics/rx_packets(我不知道BSD,...內核)

capture.sh接口time_in_seconds

#!/bin/sh 
pcksFile="/sys/class/net/$1/statistics/rx_packets" 
nbPcks=`cat $pcksFile` 
sleep $2 
echo $(expr `cat $pcksFile` - $nbPcks) 

輸出:

$ ./capture.sh eth0 2 
7 
+0

這給了我「權限被拒絕」的錯誤,即使我是機器上的根,嘗試過「sudo」,並得到了「命令未找到」... chmod + x在文件上完成,結果仍然相同, –

+0

僅供參考它是Debian 3.16.7 –

+0

我在debian 3.15.9上試過了,即使使用「簡單」用戶(不需要root/sudo)也可以正常工作:'touch capture.sh','nano capture.sh'複製/粘貼腳本,'chmod + x capture.sh',然後'./capture.sh eth0 10'。默認情況下,我的rx_packets文件權限是「-r - r - r - 」 – Duffydake

相關問題