`
david_je
  • 浏览: 368714 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何在Linux下统计高速网络中的流量?

阅读更多

如何在Linux下统计高速网络中的流量?

2014-01-22 11:04 彭秦进 极客范 字号:T | T
一键收藏,随时查看,分享好友!

在Linux中有很多的流量监控工具,它们可以监控、分类网络流量,以花哨的图形用户界面提供实时流量分析报告。本文中我们介绍一种简单的Shell 脚本,它可以监控网络流量而且不依赖于缓慢的libpcap库。

AD:2013云计算架构师峰会课程资料下载

 

nethogs2

在Linux中有很多的流量监控工具,它们可以监控、分类网络流量,以花哨的图形用户界面提供实时流量分析报告。大多数这些工具(例如:ntopng ,  iftop )都是基于libpcap 库的 ,这个函数库是用来截取流经网卡的数据包的,可在用户空间用来监视分析网络流量。尽管这些工具功能齐全,然而基于libpcap库的流量监控工具无法处理高速(Gb以上)的网络接口,原因是由于在用户空间做数据包截取的系统开销过高所致。

在本文中我们介绍一种简单的Shell 脚本,它可以监控网络流量而且不依赖于缓慢的libpcap库。这些脚本支持Gb以上规模的高速网络接口,如果你对“汇聚型”的网络流量感兴趣的话,它们可统计每个网络接口上的流量。

脚本主要是基于sysfs虚拟文件系统,这是由内核用来将设备或驱动相关的信息输出到用户空间的一种机制。网络接口的相关分析数据会通过“/sys/class/net/<ethX>/statistics”输出。

举个例子,eth0的网口上分析报告会输出到这些文件中:

  • /sys/class/net/eth0/statistics/rx_packets: 收到的数据包数据
  • /sys/class/net/eth0/statistics/tx_packets: 传输的数据包数量
  • /sys/class/net/eth0/statistics/rx_bytes: 接收的字节数
  • /sys/class/net/eth0/statistics/tx_bytes: 传输的字节数
  • /sys/class/net/eth0/statistics/rx_dropped: 收包时丢弃的数据包
  • /sys/class/net/eth0/statistics/tx_dropped: 发包时丢弃的数据包

这些数据会根据内核数据发生变更的时候自动刷新。因此,你可以编写一系列的脚本进行分析并计算流量统计。下面就是这样的脚本(感谢 joemiller 提供)。第一个脚本是统计每秒数据量,包含接收(RX)或发送(TX)。而后面的则是一个描述网络传输中的接收(RX)发送(TX)带宽。这些脚本中安装不需要任何的工具。

测量网口每秒数据包:

  1. #!/bin/bash 
  2. INTERVAL="1"  # update interval in seconds 
  3. if [ -z "$1" ]; then 
  4.         echo 
  5.         echo usage: $0 [network-interface] 
  6.         echo 
  7.         echo e.g. $0 eth0 
  8.         echo 
  9.         echo shows packets-per-second 
  10.         exit 
  11. fi 
  12. IF=$1 
  13. while true 
  14. do 
  15.         R1=`cat /sys/class/net/$1/statistics/rx_packets` 
  16.         T1=`cat /sys/class/net/$1/statistics/tx_packets` 
  17.         sleep $INTERVAL 
  18.         R2=`cat /sys/class/net/$1/statistics/rx_packets` 
  19.         T2=`cat /sys/class/net/$1/statistics/tx_packets` 
  20.         TXPPS=`expr $T2 - $T1` 
  21.         RXPPS=`expr $R2 - $R1` 
  22.         echo "TX $1: $TXPPS pkts/s RX $1: $RXPPS pkts/s" 
  23. done 

网络带宽测量:

  1. #!/bin/bash 
  2. INTERVAL="1"  # update interval in seconds 
  3. if [ -z "$1" ]; then 
  4.         echo 
  5.         echo usage: $0 [network-interface] 
  6.         echo 
  7.         echo e.g. $0 eth0 
  8.         echo 
  9.         exit 
  10. fi 
  11. IF=$1 
  12. while true 
  13. do 
  14.         R1=`cat /sys/class/net/$1/statistics/rx_bytes` 
  15.         T1=`cat /sys/class/net/$1/statistics/tx_bytes` 
  16.         sleep $INTERVAL 
  17.         R2=`cat /sys/class/net/$1/statistics/rx_bytes` 
  18.         T2=`cat /sys/class/net/$1/statistics/tx_bytes` 
  19.         TBPS=`expr $T2 - $T1` 
  20.         RBPS=`expr $R2 - $R1` 
  21.         TKBPS=`expr $TBPS / 1024` 
  22.         RKBPS=`expr $RBPS / 1024` 
  23.         echo "TX $1: $TKBPS kb/s RX $1: $RKBPS kb/s" 
  24. done 

下面的屏幕截图显示了上面的两个脚本的输出。

152940zdJ

原文链接: Dan Nanni 翻译: 极客范 彭秦进

译文链接: http://www.geekfan.net/5558/

分享到:
评论

相关推荐

    《精通Linux 设备驱动程序开发》.(Sreekrishnan).pdf

     本书适合中高级linux开发人员阅读。 目录 第1章 引言1 1.1 演进1 1.2 gnu copyleft2 1.3 kernel.org2 1.4 邮件列表和论坛3 1.5 linux发行版3 1.6 查看源代码4 1.7 编译内核7 1.8 可加载的模块...

    精通LINUX设备驱动程序开发

    311 15.1.6 统计 312 15.1.7 配置 313 15.1.8 总线相关内容 314 15.2 与协议层会话 314 15.2.1 接收路径 314 15.2.2 发送路径 315 15.2.3 流量控制 315 15.3 缓冲区管理和并发控制 315 15.4 设备实例:...

    总结UNIX/LINUX下C++程序计时的方法

    但要精确测量程序的运行时间并不容易,因为进程切换、中断、共享的多用户、网络流量、高速缓存访问及转移预测等因素都会对程序计时产生影响。 下面看看小编为大家整理几个计时方法 方法一: 如果是想统计某个程序的...

    PHPADM网络广告管理系统V4.0.zip

    并且由于其所依赖的性能很好的web服务软件和以高速著称的数据库软件在Linux和Windows平台上均能运行,因此具有跨平台功能,它的代码不用做修改就可以直接运行在两个不同的操作系统中。 (4)多层及多维广告位管理:...

    JAVA上百实例源码以及开源项目源代码

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    vc++ 应用源码包_3

    代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...

    vc++ 应用源码包_1

    代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...

    vc++ 应用源码包_2

    代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...

    vc++ 应用源码包_6

    代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...

    vc++ 应用源码包_5

    代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...

    vc++ 开发实例源码包

    代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...

    JAVA上百实例源码以及开源项目

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    小蜜蜂商务网站门户系统3.0

    V3.0 Build 080102 释放时间:08.01.02 10:04...10、支持网站流量统计。 ---------- 其他30余个应用模块请查看各自模块功能介绍 ---------- 安装使用: 安装其他应用模块,必须先装平台系统;请对照安装说明完成安装。

    欣荣泉安防视频监控软件-单机版

    有效规避了全球眼平台中的一些弊端,在组网方式、设备兼容、个性化功能订制上有一系列新颖的解决思路。 欣荣泉视频监控平台软件目前拥有四种版本,分别是: 1.单机版:属于单机管理软件,集服务器和客户端于一体,...

Global site tag (gtag.js) - Google Analytics