`
y150988451
  • 浏览: 197548 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

linux下获取网络流量的实现方法

阅读更多

通过读取 /proc/self/net/dev 或者 /proc/net/dev 来得到应用程序流量统计.

获取单个APP流量的方法目前Android没有提供API,但可以同抓包来分析得到pid,从而确定是哪个APP产生的流量。

限制APP访问网络可以用iptables脚本来做到,DroidWallhttp://code.google.com/p/droidwall/ 用的就是iptables脚本+白名单来控制网络访问的。仅是通过/proc/net/dev读取其中的数据.(转载)
#include 
#include 
#include

void skipline(FILE *f) 
{ 
  int ch; 
  do { 
    ch = getc(f); 
  } while ( ch != 'n' && ch != EOF ); 
}

int main(int argc, char *argv[]) 
{ 
  FILE *pnd; 
  char buffer[BUFSIZ]; 
  char *interface; 
  struct ifinfo { 
    char name[8]; 
    unsigned int r_bytes, r_pkt, r_err, r_drop, r_fifo, r_frame; 
    unsigned int r_compr, r_mcast; 
    unsigned int x_bytes, x_pkt, x_err, x_drop, x_fifo, x_coll; 
    unsigned int x_carrier, x_compr; 
  } ifc; 
  unsigned long long bin, bout, lbin, lbout; 
  int first;

  if ( argc != 2 ) { 
    fprintf(stderr, "Usage: %s interfacen", argv[0]); 
    exit(1); 
  }

  interface = argv[1];

  first = 1; 
  lbin = 0; lbout = 0;

  while ( 1 ) { 
    pnd = fopen("/proc/net/dev", "r"); 
    if ( !pnd ) { 
      fprintf(stderr, "%s: /proc/net/dev: %s", argv[0], strerror(errno)); 
      exit(1); 
    }

    /* Skip header */ 
    skipline(pnd); 
    skipline(pnd);

    /* Get interface info */ 
    do { 
      if ( fscanf(pnd, " %6[^:]:%u %u %u %u %u %u %u %u %u %u %u %u %u %u %u", 
                  &ifc.name, 
                  &ifc.r_bytes, &ifc.r_pkt, &ifc.r_err, &ifc.r_drop, 
                  &ifc.r_fifo, &ifc.r_frame, &ifc.r_compr, &ifc.r_mcast, 
                  &ifc.x_bytes, &ifc.x_pkt, &ifc.x_err, &ifc.x_drop, 
                  &ifc.x_fifo, &ifc.x_coll, &ifc.x_carrier, &ifc.x_compr) 
           != 16 ) { 
        exit(200); 
      } 
      skipline(pnd); 
    } while ( strcmp(ifc.name, interface) );

    bin  = ifc.r_bytes + (lbin & ~0xffffffffULL); 
    bout = ifc.x_bytes + (lbout & ~0xffffffffULL);

    if ( bin < lbin ) 
      bin += (1ULL << 32); 
    if ( bout < lbout ) 
      bout += (1ULL << 32);

    if ( !first ) { 
      printf("%d %Lu %Lun", time(NULL), (bout-lbout)*8, (bin-lbin)*8); 
      fflush(stdout); 
    } else { 
      first = 0; 
    }

    lbin = bin;  lbout = bout;

    fclose(pnd);

    sleep(1); 
  } 
}
 

 

分享到:
评论

相关推荐

    Linux下实现网络流量记录.pdf

    在Linux操作系统下实现网络流量记录是一个关键的网络管理任务,这有助于监控网络资源的使用情况,提供计费管理和故障排查的数据支持。本文主要介绍了几种在Linux环境下记录网络流量的方法,包括基于代理、路由器以及...

    Linux下实现流量监测源代码

    5. **实时报警**:当网络流量超出预设阈值时,触发警报机制,提醒管理员关注。 通过学习和实践这份源代码,初学者不仅可以掌握网络监控的基础知识,还能提高编程能力,特别是在处理系统级问题和数据分析方面。同时...

    Linux下的MRTG流量监控的设计与实现

    以上就是基于Linux平台使用MRTG进行网络流量监控的设计与实现过程,通过这个过程,我们可以深入了解网络流量监控的工作原理,熟练掌握MRTG和SNMP的使用,并能应用于实际的网络环境中,为网络管理和规划提供强有力的...

    linux下里面如何获取网卡的实时网速

    以下是一些常用的方法和命令,帮助你在Linux下实现类似Windows的任务栏实时网速显示。 1. **`ifconfig` 命令**: `ifconfig` 是一个基础的网络配置工具,可以显示网络接口的状态,包括IP地址、子网掩码、广播地址...

    基于Linux的网络流量控制机制

    ### 基于Linux的网络流量控制机制 #### 摘要及背景 随着互联网技术的飞速发展,网络流量的急剧增长已成为普遍现象,尤其是视频流等多媒体数据的传输需求日益增加。传统的尽力而为(Best-effort)网络模型在处理...

    Linux进程网络流量统计的实现过程

    综上所述,通过Linux内核提供的接口和libpcap库,我们可以实现详细的进程级网络流量统计,这对于诊断网络问题、优化系统性能和保障网络安全具有重要作用。在实际应用中,还需要根据具体需求进行调整和优化,确保统计...

    c++ Linux 流量统计,抓包重组

    标题 "c++ Linux 流量统计,抓包重组" 涉及到的是在Linux环境中使用C++语言开发网络流量监控程序的技术。该程序的主要功能是捕获网络接口上的数据包,对其进行重组和解析,然后将处理结果转换为JSON格式,并存储到...

    进程级别的网络流量监控

    在Linux下,有多种工具可用于实现进程级别的网络流量监控: 1. `netstat`:这是一个基本的命令行工具,可以显示网络连接状态,包括TCP、UDP和RAW连接。通过结合`-p`选项,可以查看每个连接对应的进程ID。 2. `...

    基于Linux内核的流量分析方法.pdf

    KTAM 通过采取 Linux 下可装载模块的方式实现,完全在内核级实现了网络流量的监测分析,降低了系统调用和内存拷贝等开销,提高了流量分析性能。 基于 Linux 内核的流量分析方法的优点是: 1. 降低了系统调用和内存...

    详解Linux查看实时网卡流量的几种方式

    在日常运维工作中,监控和管理服务器的网络流量是一项重要的任务。这不仅有助于了解当前网络环境的状态,还可以帮助排查性能问题、优化资源配置以及确保系统的稳定运行。本文将详细介绍两种常用的方法来查看Linux...

    linux网络流量工具

    `catstream`脚本提供了一种简便的方法来监控Linux系统的网络流量。通过对关键命令的理解和应用,可以快速掌握其实现原理,并根据实际需求进行定制化开发。这对于提升网络管理效率和安全性具有重要意义。

    linux 带宽获取 代码实现

    在Linux环境中,获取系统带宽信息通常是通过命令行工具或者编程接口来实现的。本教程将详细介绍如何在不依赖额外工具的情况下,通过编写简单的脚本来获取网络带宽使用情况。提供的压缩包文件"daikuan.sh"是一个Shell...

    linux高级路由与流量控制

    其中,《Linux高级路由与流量控制》是一份详尽的技术文档,由多位专家共同编写,旨在深入探讨Linux下的高级路由技术和流量控制方法。 #### 二、IPRoute2概述 - **IPRoute2** 是Linux系统中用于网络配置和监控的核心...

    基于MRTG的网络流量监测系统设计与实现 实验报告

    ### 基于MRTG的网络流量监测系统设计与实现 实验报告 #### 1. 系统要求 为了确保MRTG网络流量监测系统的正常运行,首先需要确保计算机处于Windows XP操作系统环境下,并且具备以下条件: - **网络畅通**:确保...

    linux下mrtg流量监控

    MRTG(Multi Router Traffic Grapher)是一款免费的网络流量监控工具,它利用SNMP(Simple Network Management Protocol)协议从网络设备收集数据,并生成图形化的流量报告,便于网络管理员实时监控网络状态。...

    linux主机流量实时监控脚本

    如果需要监控虚拟化环境下的网络流量,用户需要自行对脚本进行相应的修改。 首先,让我们深入了解监控Linux主机流量的基本方法。最常用的工具之一是`ifconfig`,它能够显示网络接口的统计信息,包括接收和发送的...

    网络嗅探器在Linux系统中的实现.pdf

    文章还详细介绍了如何使用混杂工作模式来收集网络中的数据,并结合 TCP/IP 协议在 Linux 系统中实现网络嗅探器的具体方法。 知识点一:以太网卡的广播、多播和混杂工作模式 以太网卡在网络中有三种工作模式:广播...

    mrtg.rar_linux 监控_monitor traffic_流量监控_网络流量_网络监控

    《Linux系统下的网络流量监控——MRTG详解》 在当今信息化社会,网络流量监控对于企业和个人用户都至关重要。它能帮助我们了解网络资源的使用情况,预防网络拥塞,及时发现并解决问题。Linux系统中,MRTG(Multi ...

    [Linux]使用linux下的TC进行服务器流量控制.pdf

    Linux下的TC(Traffic Control)是Linux内核中用于管理网络流量的一个组件,它能够对网络流量进行调度和整形。TC允许用户对通过网络接口的数据包进行控制,例如限速、延迟、丢包等。TC是Linux提供的一种强大的流量...

Global site tag (gtag.js) - Google Analytics