实时计算网络数据包的数量(CLI)

时间:2013-03-19 16:27:30

标签: networking tcpdump

我想实时和在CLI中计算网络传入/传出数据包的数量(我想使用计数来编写shell脚本)

我尝试使用'tcpdump'和'tsahrk'结合管道,但它不起作用(我没有什么天赋和学习)。

最后,我发现命令'dumpcap',它几乎接近我的需要,这里是dumpcap stdout

[root@hostname ~]# dumpcap -i eth0
File: /tmp/wiresharkXXXXuTE8mU
Packets: 31

当我使用这个命令结合'grep'时,就像这个'dumpcap -i eth0 | grep -o'[0-9] *'来过滤stdout(31)中的数字,但它仍然不起作用。

他们有什么方法可以解决这个或任何想法吗?

非常感谢您对此事的关注。

2 个答案:

答案 0 :(得分:0)

根据我的电脑上的以下输出:

ifconfig eth0 | grep RX
      RX packets:113995 errors:0 dropped:0 overruns:0 frame:0
      RX bytes:62022831 (62.0 MB)  TX bytes:11453699 (11.4 MB)

我可以执行以下操作来检索RX数据包的数量:

ifconfig eth0 | grep "RX packets" | tr ":" " " | awk '{print $3}'
113995

不幸的是,目前还不是很清楚你需要什么。你是什​​么意思"实时计算数据包的数量"?您是否希望计数器增加,并且只要看到数据包就会报告计数器的值?或者您只是想计算在给定时间段内看到的包数量?你的shell脚本的最终目标是什么?

答案 1 :(得分:0)

数据包捕获程序(如tcpdump,TShark或dumpcap)可能会使接口进入混杂模式,这意味着将显示的数据包比正常情况下显示的更多。

dumpcap中的计数转到标准错误,而不是标准输出。

Dumpcap会将数据包写入相关文件,您可能想要也可能不想要;如果你有大量的流量,那个文件会越来越大,占用文件系统/ tmp的更多空间。

您可能想要考虑一些只从常规网络堆栈获取统计信息的工具,例如Linux上的ifconfig或各种操作系统上的netstat:

$ netstat -w 1 -I en0
            input          (en0)           output
   packets  errs      bytes    packets  errs      bytes colls
         0     0          0          0     0          0     0
         0     0          0          0     0          0     0
         1     0         98          1     0         98     0
         1     0         98          1     0         98     0

                      ...