我想在一段特定的時間內(直到執行腳本後5分鐘)在網絡接口(例如eth0)上統計傳入數據包的數量,我該怎麼做通過shell或python腳本?哪一個更準確?計算特定網絡接口上的傳入數據包
我知道網絡工具,如iptraf,但我希望它通過腳本來完成,並最好將計數值打印在屏幕上或文件中。
我想在一段特定的時間內(直到執行腳本後5分鐘)在網絡接口(例如eth0)上統計傳入數據包的數量,我該怎麼做通過shell或python腳本?哪一個更準確?計算特定網絡接口上的傳入數據包
我知道網絡工具,如iptraf,但我希望它通過腳本來完成,並最好將計數值打印在屏幕上或文件中。
如果您正在使用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
殼運行tcpdump
爲300
秒並終止它。 tcpdump
將您需要的數據輸出到stderr
。這將是將該流重定向到文件的原因(2> out
)。 shell的最後一秒命令從tcpdump
中提取我們想要的完整消息所需的數據。它需要運行爲sudo
!另外不要忘記根據需要修改監聽界面。
如果還不清楚爲什麼我已經完成了我所做的,請告訴我!
退房https://github.com/dugsong/pypcap它使用libpcap的,它看起來像它支持Linux/WIN/MAC
>>> import pcap
>>> for ts, pkt in pcap.pcap():
... print ts, `pkt`
有人張貼更長的示例腳本這裏: http://pylibpcap.sourceforge.net
你可以,如果你使用的是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
這給了我「權限被拒絕」的錯誤,即使我是機器上的根,嘗試過「sudo」,並得到了「命令未找到」... chmod + x在文件上完成,結果仍然相同, –
僅供參考它是Debian 3.16.7 –
我在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
我想你可以使用'/ sys/class/net/eth0/statistics/rx_packets'。它只包含一個數字,所以你只需要檢查兩次,然後減去 – Duffydake
@Duffydake考慮到陳述的問題,那應該是答案。其他答案雖然有效,但對請求肯定是過分的。 – msw