我想实时和在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)中的数字,但它仍然不起作用。
他们有什么方法可以解决这个或任何想法吗?
非常感谢您对此事的关注。
答案 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
...