当前位置: 首页 > 科技观察

linux下如何统计高速网络的流量?

时间:2023-03-21 22:19:25 科技观察

Linux中有很多流量监控工具,它们可以对网络流量进行监控和分类,并提供实时的流量分析报告,图形化的用户界面非常漂亮。这些工具(例如:ntopng、iftop)大多基于libpcap库,用于拦截流经网卡的数据包,可用于监控和分析用户空间的网络流量。尽管这些工具功能齐全,但基于libpcap库的流量监控工具无法处理高速(Gb以上)网络接口,因为用户空间数据包拦截的系统开销太高。在本文中,我们介绍了一个简单的shell脚本,它可以在不依赖慢速libpcap库的情况下监控网络流量。这些脚本支持Gb级以上的高速网络接口,如果您对“聚合”网络流量感兴趣,它们可以统计每个网络接口上的流量。该脚本主要基于sysfs虚拟文件系统,是内核用来向用户空间输出设备或驱动程序相关信息的一种机制。网络接口的相关分析数据会通过“/sys/class/net//statistics”输出。例如eth0网口的分析报告会输出到这些文件:数据包/sys/class/net/eth0/statistics/rx_bytes:接收到的字节数/sys/class/net/eth0/statistics/tx_bytes:传输的字节数/sys/class/net/eth0/statistics/rx_dropped:数据包droppedwhenreceivingpackets/sys/class/net/eth0/statistics/tx_dropped:Packetsdroppedwhensendingpackets这些数据会根据内核数据变化自动刷新。因此,您可以编写一系列脚本来分析和计算流量统计信息。这是这样一个脚本(感谢joemiller)。第一个脚本是统计每秒的数据量,包括接收(RX)或发送(TX)。后者是对网络传输中接收(RX)发送(TX)带宽的描述。这些脚本不需要安装任何工具。测量网口每秒数据包:#!/bin/bashINTERVAL="1"#updateintervalinsecondsif[-z"$1"];thenechoechousage:$0[network-interface]echoechoe.g.$0eth0echoechoshowspackets-per-secondexitfiIF=$1whiletruedoR1=`cat/sys/class/net/$1/statistics/rx_packets`T1=`cat/sys/class/net/$1/statistics/tx_packets`sleep$INTERVALR2=`cat/sys/class/net/$1/statistics/rx_packets`T2=`cat/sys/class/net/$1/statistics/tx_packets`TXPPS=`expr$T2-$T1`RXPPS=`expr$R2-$R1`echo"TX$1:$TXPPSpkts/sRX$1:$RXPPSpkts/s"done网络带宽测量:#!/bin/bashINTERVAL="1"#updateintervalinsecondsif[-z"$1"];thenechoechousage:$0[network-interface]echoechoe.g.$0eth0echoexitfiIF=$1whiletruedoR1=`cat/sys/class/net/$1/statistics/rx_bytes`T1=`cat/sys/class/net/$1/statistics/tx_bytes`sleep$INTERVALR2=`cat/sys/class/net/$1/statistics/rx_bytes`T2=`cat/sys/class/net/$1/statistics/tx_bytes`TBPS=`expr$T2-$T1`RBPS=`expr$R2-$R1`TKBPS=`expr$TBPS/1024`RKBPS=`expr$RBPS/1024`echo"TX$1:$TKBPSkb/sRX$1:$RKBPSkb/s"done下面的截图显示了上面两个脚本的输出