linux下常见网络流量查看方法与工具
2010-10-19 13:53:47 阿炯

1、bwbar
使用bwbar来查看当前流量与带宽使用情况。bwbar is a simple daemon which creatse a readout of current bandwidth usage, generally for inclusion on a webpage. The output appearin both a text file and a PNG format bargraph in the specified output directory, and is based on data gathered from the specified device and the specified maximum bandwidth.

下载地址:http://www.kernel.org/pub/software/web/bwbar/

2、iftop

iftop是一款Linux下的实时网络流量监控工具,可以在以类unix为操作系统的服务器或VPS上安装使用,主要用来显示本机网络流量情况及各相互通信的流量集合,如单独同那台机器间的流量大小,非常适合于代理服务器和iptables服务器使用。类似于top的实时流量监控工具,无报表功能,需使用root运行。

iftop does for network usage what top(1) does for CPU usage. It listens to network traffic on a named interface and displays a table of current bandwidth usage by pairs of hosts.

安装iftop,必须先安装libpcap,其主页为:http://www.tcpdump.org/release/
pcap安装完成,再来安装iftop

iftop界面说明:
首行是网络流量刻度。
第一行为带宽
连接列表,最后三个分别是2秒,10秒和40秒的平均流量
=>代表发送,<= 代表接收
最后三行表示发送,接收和全部的流量,第二列为你运行iftop到目前流量,第三列为峰值,第四列为平均值。

在iftop的图表中最后有三列流量的数值显示的说明:
其中第一列的意思是:在之前两秒钟的平均流量
第二列的意思是:在之前10秒钟一共的流量
最后一列的意思是:在之前的40秒钟五分之一的流量数值
中间是与其它机器的流量,有个白底的bar直观的标识流量变化,后三列数据分别表示:
1. preceding 2 seconds 过去两秒钟的流量(traffic)
2. around half that amount over the preceding 10s 过去十秒钟流量的一半
3. a fifth of that over the whole of the last 40s 过去40秒钟流量的五分之一

最下面3行
TX:发送流量
RX:接收流量
TOTAL:总流量
cumm:运行iftop以来的总流量
peak:峰值流量
rates:分别表示过去 2s 10s 40s时间内网卡总的平均流量

按h可以得到帮助,从帮助回到流量图也是按h

#iftop -i eth0 -n       就可以看到eth0网卡的流量状况:

iftop 相关命令 :
监控eth1的网卡的流量
# iftop -i eth1
以位元组(bytes)为单位显示流量(预设是位元bits):
$ iftop -B
直接显示IP, 不进行DNS反解:
$ iftop -n
直接显示连接埠编号, 不显示服务名称:
$ iftop -N
显示某个网段进出封包流量
$ iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0
其他参数可下 iftop -h 看说明.
进入iftop画面时, 可按 p 切换是否显示连接埠, n 切换显示IP或主机的domain name, N切换显示连接埠代号或名称, p暂停显示, b切换是否显示长条, B切换计算几秒内的平均流量, 其他按键可以按h观看说明.

常用的参数
-i设定监测的网卡,如:# iftop -i eth1
-B 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n使host信息默认直接都显示IP,如:# iftop -n
-N使端口信息默认直接都显示端口号,如: # iftop -N
-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h(display this message),帮助,显示参数信息
-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
-b使流量图形条默认就显示;
-f这个暂时还不太会用,过滤计算包用的;
-P使host信息及端口信息默认就都显示;
-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

进入iftop画面后的一些操作命令(注意大小写)
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。

官方网站:http://www.ex-parrot.com/pdw/iftop/

3、nload
nload is a console application which monitors network traffic and bandwidth usage in real time. It visualizes the in- and outgoing traffic using two graphs and provides additional info like total amount of transfered data and min/max network usage.

nload默认分为上下两块:上半部分是:Incoming也就是进入网卡的流量,下半部分是:Outgoing,也就是从这块网卡出去的流量,每部分都有当前流量(Curr),平均流量(Avg),最小流量(Min),最大流量(Max),总和流量(Ttl)这几个部分。另外也可以自己定义流量数值显示的单位。
使用‘/usr/local/nload/bin/nload –help’可以看到具体的相关参数了。

nload eth0 - 查看名叫eth0网卡的流量

可查看当前、平均、最小、最大、总共等的流量情况,单位为bit。设置下.nload文件也可以

[root@localhost ~]# cat .nload
Version=”1″
AverageWindow=”300″
BarMaxIn=”51200″
BarMaxOut=”51200″
DataFormat=”MBit”
Devices=”eth0″
MultipleDevices=”[ ]”
RefreshInterval=”500″
TrafficFormat=”MBit”
Version=”1″

比较好的例子:
nload -o 20480 -i 204800 -u M

Nload provides network load graph
nload allow a system administrator to easily monitor the traffic going on its network. It provide both a graph of incoming and outgoing traffic as well as network data transfert statistics.

nload can be used straightforward by typing:
$nload

Once nload is started, you can exit the interface by typing either q or Ctrl-c.

By default, nload will display incoming and outgoing traffic in kBit/s and use eth0 as default network interface on a linux system, fxp0 on BSD, hme0 on Solaris and lan0 on HP-UX.

Monitoring more than 1 network interface:
Nload multiple interface on one screenIf you want to monitor more than on interface, or another one than the default one, you need to supply the network interface names at the end of the command, so for intance, if you want to monitor eth1 and lo, type:
$nload eth1 lo

you can then navigate from a network interface to another by using the following key shortcut:
To go to the:
* next interface use any of the following keys: ArrowRight, ArrowDown, PageDown, Enter, Tab or n
* previous interface: ArrowLeft, ArrowUp, PageUp or p

Some people might prefer to see all the devices status together in the same window. In that case, simply use the -m switch like this:
$nload -m eth1 lo

You can then use the previous key shortcuts to go to the previous and next pages if all the interfaces could not fit in a single window.

Options to use with nload:
nload comes with a bunch of switches which allow you to customize the output given by nload.

You can customize the 100% mark of the incoming bandwidth using -i XXX (where XXX is given in kBits/s) or -o YYY for outgoing traffic, default is 10240.Change the interval of update is done by adding -t SSS (where SSS is the time in milliseconds), default is 500 ms.

To change the type of unit displayed for the traffic numbers use -u h|b|k|m|g for human, bits, kilo, mega or giga bits, using H|B|K|M|G will make the output type being in Bytes, default is k.
-U will do the same but for the amount of data, default is M.

Examples:
monitoring interfaces eth0 and lo with unit type in kBit/s:
$nload eth0 lo

the same, but with both interface in the same windows:
$nload -m eth0 lo

monitoring eth0 with the max value for incoming bandwidth setted at 20kBit/s and max value for outgoing traffic at 15kBit/s with transfert unit type automatically handed by nload in Bit/s
$nload -i 20 -o 15 -u h eth0

Conclusion:
being a ncurse based application, nload is easy to use while monitoring remote hosts via ssh for instance. Moreover, it does not use much CPU or Memory ressources.

The graph provided by nload make it easy to check for bursts or traffic irregularity.

官方主页:http://www.roland-riegel.de/nload/index.html

4、自写程序
#!/bin/bash
#上次更新:2010-10-07
#作者:郑炯
#测试网卡是否正常,网络不通畅的情况下...

#定义参照主机-机房测试地址
hostip='114.80.x.x'

#产生日期时间
datime="$(date +%F%t%T)"

#定义日志文件
logfile=/var/log/detnetcard/$(date +%F).log

#取得日志文件路径并建立之
plogfile=$(dirname $logfile)
if [ ! -d $plogfile ]
then
mkdir --parents --verbose $plogfile
if [ $? -ne 0 ]
then
echo "目录$plogfile创建失败!!" 2>&1
exit
fi
fi

#ping网关及网络此时流量检查,主函数
pingit(){
echo $datime>>$logfile
/usr/bin/fping -a -C 2 $hostip>>$logfile

NIC="eth0"
rx_before=$(/sbin/ifconfig $NIC|/bin/sed -n "8"p|/usr/bin/awk '{print $2}'|/usr/bin/cut -c7-)
tx_before=$(/sbin/ifconfig $NIC|/bin/sed -n "8"p|/usr/bin/awk '{print $6}'|/usr/bin/cut -c7-)
sleep 2
rx_after=$(/sbin/ifconfig $NIC|/bin/sed -n "8"p|/usr/bin/awk '{print $2}'|/usr/bin/cut -c7-)
tx_after=$(/sbin/ifconfig $NIC|/bin/sed -n "8"p|/usr/bin/awk '{print $6}'|/usr/bin/cut -c7-)
rx_result=$[(rx_after-rx_before)/256000]
tx_result=$[(tx_after-tx_before)/256000]

if [ $? -ne 0 ]
then
echo "Fuck!GateWay $hostip Unreachable" 2>&1>>$logfile
echo "In_Speed: "$rx_result"Mbps OUt_Speed: "$tx_result"Mbps">>$logfile
/bin/sync
#        /sbin/reboot
else
echo "NetWork is OK.">>$logfile
echo "In_Speed: "$rx_result"Mbps OUt_Speed: "$tx_result"Mbps">>$logfile
fi
}

#正式调用
pingit


##############

此脚本可能通过手动或cron调用,其将将会在目录'/var/log/detnetcard'下生成相关的文件,记录当时与某一地直通信的情况及当时的进出流量。也可以将其写进while语句来做近实时的输出。本站另外还有一篇关于在debian下流量查看工具介绍的文章。

该文章最后由 阿炯 于 2013-07-04 17:28:43 更新,目前是第 3 版。