Bash 如何获取在过去30秒内丢弃的数据包数

Bash 如何获取在过去30秒内丢弃的数据包数,bash,iptables,Bash,Iptables,我正在使用IP表规则以编程方式在接口上丢弃数据包(以50%的概率丢弃传入的数据包)。我希望能够使用bash脚本获得过去3秒内丢弃的数据包的数量。我已经看过了ifstat,但它似乎没有意识到正在发生丢包(也许它只是在经过IPtables之后才看到数据包进来?)。有没有其他工具或实用程序可以用来获取这样的数字 编辑:我应该提到,iptables是我用来模拟高速网络的一个工具,它可以使接收者由于巨大的容量而开始丢弃数据包。这种情况正是我希望看到并能够识别的情况。为此使用dumpcap: dumpcap

我正在使用IP表规则以编程方式在接口上丢弃数据包(以50%的概率丢弃传入的数据包)。我希望能够使用bash脚本获得过去3秒内丢弃的数据包的数量。我已经看过了ifstat,但它似乎没有意识到正在发生丢包(也许它只是在经过IPtables之后才看到数据包进来?)。有没有其他工具或实用程序可以用来获取这样的数字

编辑:我应该提到,iptables是我用来模拟高速网络的一个工具,它可以使接收者由于巨大的容量而开始丢弃数据包。这种情况正是我希望看到并能够识别的情况。

为此使用dumpcap:

dumpcap  -i your_interface_here -a duration:3 -w log.pcap | grep '^Packets received/dropped'
dumpcap手册页上写着:

-a
指定用于指定Dumpcap何时停止写入的条件 到一个捕获文件。标准为形式测试:值,其中 测试是以下测试之一:

       duration:value Stop writing to a capture file after value seconds
       have elapsed.
-我
捕获接口
-w
将原始数据包数据写入输出文件


您可以尝试
iptables-vL
,它根据iptable规则显示丢弃的数据包计数

s1=$(iptables -vL |  grep rule | awk '{ print $1}')
sleep 3
s2=$(iptables -vL |  grep rule | awk '{ print $1}')
echo "$(($s2-$s1))"

规则代表iptables中定义的规则。

似乎没有回答OP的问题。他似乎是在寻找丢失的数据包的统计信息,而不是试图捕获它们。@Shadowfen:你确定吗?我希望能够使用bash脚本获取过去3秒内丢弃的数据包数。丢弃的数据包数-不捕获数据包。@Shadowfen:顺便说一句,即使
dumpcap
将原始数据包数据写入日志文件,在捕获结束时,它还提供了一个关于发生了什么的清晰统计,我们从中获取了一行,其中包含关于丢弃数据包的信息。实际上,它的格式是
数据包接收/丢弃100/20
我的印象是,关于丢弃数据包的dumpcap统计告诉您该dumpcap有多少个数据包无法捕获,这可能高于未运行dumpcap时丢弃的数据包数(例如,比较丢弃率)。虽然这可能适用于我使用IPtables丢弃数据包的特定场景,但从长远来看,iptables应该模拟这样一种情况:我的网络以足够高的速度运行,接口开始丢弃数据包。因此,在这种情况下,使用iptables方法是行不通的,因为数据包不是按规则丢弃的,而是由于绝对的容量。