计算特定网络接口上的传入数据包

Count incoming packets on specific network interface

我想计算特定时间段内(直到执行脚本后 5 分钟)网络接口(例如 eth0)上传入数据包的数量,如何通过 shell 或 python 脚本?哪个更准确?

我知道 iptraf 等网络工具,但我希望它通过脚本完成,最好在屏幕上或文件中打印计数值。

查看 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 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  >> /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

shell 运行s tcpdump 300 秒并终止它。 tcpdump 将您需要的数据输出到 stderr。这就是将该流重定向到文件的原因 (2> out)。 shell 的最后一秒命令从 tcpdump 抛出的完整消息中提取我们想要的数据。它需要 运行 和 sudo!也不要忘记根据需要修改监听接口。

如果我仍然不清楚我为什么要这样做,请告诉我!

如果您使用 Linux 内核,则可以使用 /sys/class/net/INTERFACE/statistics/rx_packets(我不知道 BSD,...内核)

capture.sh界面time_in_seconds

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

输出:

$ ./capture.sh eth0 2
7