如何统计某个应用的网络流量(包括网络流入量和网络流出量)问题,可以转换成如何基于端口号进行网络流量统计的问题。大部分网络应用程序都是传输层及以上的协议,因此基于端口号(tcp, udp)统计网络流量基本能覆盖到此类需求。

利用iptables实现基于端口的流量统计是一种比较简单可行的方案。它可以对流经每一条规则的包数量和流量进行计数。例如要对常规的Web服务器进行流量统计,可以设置如下规则:

1
2
root@debian:~# iptables -A INPUT -p tcp --dport 80
root@debian:~# iptables -A OUTPUT -p tcp --sport

第一条规则表示,在INPUT链上添加一条规则,该条规则对所有来自外部网络的、与本机80端口通信的请求有效,即网络流入量,第二条规则则相反, 它用于统计从本机80端口发出的网络流量,即网络流出量。因为我们的目的是统计流量,故此处可以省略ACCEPT或DROP之类的动作。

查看流量计数时,只要加上-nvx参数即可:

1
2
3
4
5
6
7
8
9
10
11
root@debian:~# iptables -nvx -L
Chain INPUT (policy ACCEPT 320 packets, 33045 bytes)
pkts bytes target prot opt in out source destination
0 785 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
 
Chain OUTPUT (policy ACCEPT 311 packets, 33711 bytes)
pkts bytes target prot opt in out source destination
0 1252 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:

iptables的-vx参数表示详细信息,可以以字节为单位显示包数量和网络流量,-n参数表示以数字方式表示ip地址和端口号等,不加的话 iptables会默认将ip反解为主机名,例如127.0.0.1用localhost表示,端口号显示为协议号,例如80显示成http, 5672显示成amqp。

利用iptables规则统计网络流量可以保证应用在关闭重启后统计数据不丢失,但是对于主机重启的情况,它就无能为力了,因为默认情况下主机重启 iptables规则会清空,即使使用开机任务等方式重建iptables规则,流量计数器也会清零。解决此类问题一个变通的方法是定期将网络流量值保存 到文件,并清0重新计数,定期更新的时间越短,机器重启造成的流量计数丢失问题影响越小(特别涉及计费相关的业务)。

创建一个crontab任务,定期将流量统计追加至文件,例如:

1
root@debian:~# iptables -vxn -L >> file

也可以选择直接将流量值追加到文件:

1
root@debian:~# iptables -vxn -L | awk '{print $2}' >> file

当写入文件成功后,记得将流量值清0:

1
root@debian:~# iptables -Z

-Z参数支持指定链名称和规则索引号,例如下列命令表示清空INPUT链的第一条规则的流量计数器。

1
root@debian:~# iptables -Z INPUT 

Reference:
[1] iptables man page: http://ipset.netfilter.org/iptables.man.html.

转载:

http://fengchj.com/?p=2003

利用iptables实现基于端口的网络流量统计的更多相关文章

  1. 利用Openfiler配置基于文件系统的网络存储

    一.Openfiler简介 Openfiler是一个操作系统,其提供基于文件的网络附加存储和基于块的存储区域网络功能. Openfiler支持的网络协议包括:NFS,SMB/CIFS,HTTP/Web ...

  2. 搭建一个简单的基于web的网络流量监控可视化系统

    本文转载于我的个人博客,转载请标明出处. 初衷 在腾讯云的学生认证申请提交上去n天之后,终于得到了审批,所以迫不及待的想玩玩腾讯云,作为一个搞网络的,自然有一些关于网络应用的小玩意,所以把以前部署过的 ...

  3. centos8平台基于iftop监控网络流量

    一,iftop的作用: 基于ip统计外部机器与本机之间的网络流量, 可以方便的查看各客户端是否有非正常的到本机的访问 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnbl ...

  4. 网络流量统计using ADB

    /proc/net/xt_qtaguid/stats 基本覆盖目前所有机型且统计流量全面 adb shell cat /proc/net/xt_qtaguid/stats | grep (uid#) ...

  5. iOS 网络流量统计

    在开发中,有时候需要获取流量统计信息.研究发现:通过函数getifaddrs来得到系统网络接口的信息,网络接口的信息,包含在if_data字段中, 有很多信息, 但我现在只关心ifi_ibytes,  ...

  6. centos8平台使用nethogs基于进程监控网络流量

    一,nethogs的作用: 按进程或程序实时统计网络带宽使用率 我们查看流量的占用时,知道来源的ip.访问的端口,还不足以帮我们确认到进程, 而nethogs则可以让我们查看每个进程所占用的流量带宽 ...

  7. 企业网管软件之SOLARWINDS实战-基于浏览器的网络流量监控

    本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  8. Vnstat: 简单实用的网络流量统计工具

    官方主页: http://humdi.net/vnstat # Ubuntu 安装: (其本上其它发行版的包管理程序中也都包含了这款软件,请自行安装) sudo apt-get install vns ...

  9. 运用Ntop监控网络流量(视频Demo)

    运用Ntop监控网络流量 ____网络流量反映了网络的运行状态,是判别网络运行是否正常的关键数据,在实际的网络中,如果对网络流量控制得不好或发生网络拥塞,将会导致网络吞吐量下降.网络性能降低.通过流量 ...

随机推荐

  1. Abstract-抽象类

    本人理论较差,之前会做却不明原因,最近在改别人的代码发现实现方式完全不同,但对于我这个理论白痴来说完全不知道为什么别人要这么写,好处在哪里. 没有理论的指导,会用也只是不断的Copy前人,永远无法让程 ...

  2. 浅谈css的预编译---less语言

    正如各位所知道的一样,css是一门标记性语言,语法相对简单,对使用者的要求也比较低 .不过可乐不知道友友们有没有发现,在使用css的时候需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤 ...

  3. ArrayList 练习

    ArrayList list = new ArrayList(); Random rd = new Random(); ; i <; i++) { , ); //是否包含当前数字 if (!li ...

  4. 万事开头难,用HTML写的第一个界面,收获颇多

        很开心跟了叶老师学习和做项目,基础不好,前期他会帮你安排好学习路线和计划.前期没有项目做,叶老师先让我先学习jQuery,给我推荐了一些网站,叫我一边学习,一边写博客.其实很早就有想写博客的想 ...

  5. phpcms9添加301跳转

    在做301跳转时遇到了"错误 310 (net::ERR_TOO_MANY_REDIRECTS):重定向过多."的问题,小编在这里把处理方法简单给大家写出来希望可以帮助到大家,另外 ...

  6. canvas制作简单动画

    在画布元素<canvas>中,除了绘制图形.图像.文字外,还可以制作一些简单的动画,制作过程十分简单,主要分为两步操作: 1.自定义一个函数,用于图形的移动或其他动作. 2.使用setIn ...

  7. Linux下*.tar.gz文件解压缩命令 find 命令

    1.压缩命令: 命令格式:tar  -zcvf   压缩文件名.tar.gz   被压缩文件名 可先切换到当前目录下.压缩文件名和被压缩文件名都可加入路径. 2.解压缩命令: 命令格式:tar  -z ...

  8. C程序设计语言练习题1-1

    练习1-1 在你自己的系统中运行"hello, world"程序.再有意去掉程序中的部分内容,看看会得到什么出错信息. 代码如下: #include <stdio.h> ...

  9. GetMemory 函数解析

    GetMemory函数 代码1: void GetMemory(char *p){ p = (char*)malloc(100);}int main(int argc, char *argv[]){ ...

  10. .a静态库的注意事项

    .a静态库  生成的时候   可以分为  debug 版本  和  release 版本. debug:速度比较慢,比较耗性能.会启动更多的  Xcode 系统监控功能.  对错误的敏感度不高. re ...