IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

linux单机根据ip查看流量

展示过去,展望未来【周灵杰】 2014-03-20 23:05:36 累计浏览 4,291 次
本机暂存

我们有些机房是双线机房,一般的机器上面只有2个网卡,而我们搭建网络,一般有外网,内网,由于是双线,就存在电信跟网通2个ip,再加一个内网ip,就存在3个ip,这样的话,在同一个网卡上面就同时存在电信的ip以及网通的ip就不可避免,这个时候,我们想知道这个机器电信跑了多少的流量,网通跑了多少的流量,系统也没有提供相关的查看方法,在互联网上面找了一圈,也没有找到相关的工具,最后没有办法,只能自动动手,丰衣足食.花了一点点时间,学习一下systemtap,下面就贴一下我写的一个简单的脚本程序,具体如下:

global net_ip_read, net_ip_write

probe tcp.recvmsg {
    if (size <= 0) next;
    sk = @defined($sk) ? $sk : $sock->sk;
    ip = tcpmib_local_addr(sk)
    if (ip)
       net_ip_read[ip] <<< size;
}

probe tcp.sendmsg {
    if (size <= 0) next;
    sk = @defined($sk) ? $sk : $sock->sk;
    ip = tcpmib_local_addr(sk);
    if (ip)
        net_ip_write[ip] <<< size;
}

probe end {
    printf("IP             Recev_KBit\tSend_KBit\n");
    foreach([ip] in net_ip_read) {
        n_sk_rx = @count(net_ip_read[ip])
        n_sk_tx = @count(net_ip_write[ip])
        printf("%s\t%d\t\t%d\n",
                ip_ntop(htonl(ip)),
                n_sk_rx ? @sum(net_ip_read[ip])/1024*8 : 0,
                n_sk_tx ? @sum(net_ip_write[ip])/1024*8 : 0);
    }

    delete net_ip_read
    delete net_ip_write
}

运行方法

stap traffic.stp -c "sleep 1"

得到的结果如下
traffic
要运行该脚本记得先安装systemtap这个软件,同时记得给内核安装kernel-debuginfo安装包,另外这里面只是利用tcp的相关接口,统计到的单机每一个ip的流量,如果你的机器上面运行的是udp的服务,统计到的数据将不准确,仔细查看了systemtap里面的相关接口,也没有找到udp相关的查看方法,由于我们的机器上面大部分都是跑的tcp的服务,基本没有提供udp的服务,故基本能满足我的需求,另外大家也可以把脚本改一改,很容易就可以实现每秒实时的显示流量,我这个脚本为了让他在后台运行,方便统计,写成只运行一次.

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. Linux如何统计进程的CPU利用率 (累计阅读 16,307)
  2. 我的 RHCA 之路 (累计阅读 14,012)
  3. Linux内存点滴 用户进程内存空间 (累计阅读 13,228)
  4. 给程序员新手的一些建议 (累计阅读 13,088)
  5. Linux 性能监控、测试、优化工具 (累计阅读 13,011)
  6. 关于linux内存free的一些事情 (累计阅读 12,867)
  7. ps - 按进程消耗内存多少排序 (累计阅读 12,686)
  8. Google怎么用linux (累计阅读 12,580)
  9. Linux Used内存到底哪里去了? (累计阅读 11,866)
  10. find命令的一点注意事项 (累计阅读 11,864)