1

我想在 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]*' 过滤标准输出(31)中的数字,但它仍然不起作用。

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

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

4

2 回答 2

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脚本的最终目标是什么?

于 2013-03-19T23:58:35.190 回答
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

                      ...
于 2013-03-20T18:54:50.450 回答