libpcap编程--流量统计。。

原创 2012年03月22日 20:57:20

从我的网易博客移动。。。


思路:对所抓的包进行分析。分析目标MAC地址和本机MAC地址的比较。如果一样,则为下载流量。否则是上传流量

 

1,获取本机MAC

设置一个全局变量

u_char uploadhost[ETHER_ADDR_LEN];
void getMac()//获取本机MAC
{
    int sockfd;
  struct ifreq struReq;
  sockfd = socket(PF_INET,SOCK_STREAM,0);
  memset(&struReq,0,sizeof(struReq));
  strncpy(struReq.ifr_name, "eth0", sizeof(struReq.ifr_name));
  ioctl(sockfd,SIOCGIFHWADDR,&struReq);
  fprintf(stderr, "%d-%s\n", __LINE__, strerror(errno));
  printf("%s\n", ether_ntoa(struReq.ifr_hwaddr.sa_data));
  strcpy(uploadhost,ether_ntoa(struReq.ifr_hwaddr.sa_data));
  close(sockfd);
}


2,在pacp_loop的回调函数中进行包处理。。先将以太网报头中的ether_dhost转为字符串。。

sprintf(dMac,"%x:%x:%x:%x:%x:%x",(eptr->ether_dhost)[0],(eptr->ether_dhost)[1],
            (eptr->ether_dhost)[2],(eptr->ether_dhost)[3],
            (eptr->ether_dhost)[4],(eptr->ether_dhost)[5]);


然后和uploadhost(本机MAC)进行比较确定这个是上传还是下载数据包。并且统计数据。

if(strcmp(dMac,uploadhost) == 0)
    {
        dllen += pkthdr->len;//没有去掉以太网,IP数据报的报头长度,这样流量统计略有误差
    }
    else
    {
        uplen += pkthdr->len;
        printf("this is the upload!\n");
    }


这样,就可以得到上传和下载的流量数据了。。。

 

程序运行结果:
 
 

Linux 网络编程—— libpcap 详解

概述 libpcap 是一个网络数据包捕获函数库,功能非常强大,Linux 下著名的 tcpdump 就是以它为基础的。               libpcap主要的作用 1)捕获各种数据包...

如何判断socket客户端断开

我写了一个socket的客户端和服务器端,请问服务器端如何判断客户端已经断开连接了如果客户端结束进程,会发出FIN,但是如果是网线拨了,服务器就不知道了。借楼主的贴讨论一下:1.如果拨掉网线的时候服务...

python 使用ssh连接服务器进行远程命令行操作

ssh $ip “nohup sh go.sh > log 2>&1 &” import os import re import time import sys import pyssh fro...
  • wzm112
  • wzm112
  • 2012年06月20日 03:51
  • 1842

libpcap流量统计

最近老师让写一个流量监控程序,用到了libpcap编程。虽然很简单,但是前期也走了一些弯路。最初是直接从别人博客里面copy的代码,然后运行时就是结果就是不正确。本以为是系统问题,我又装了个双系统。。...

Android 的网络编程(9)-流量统计TrafficStats类的使用

对于Android流量统计来说在2.2版中新加入了TrafficStats类可以轻松获取,其实本身TrafficStats类也是读取Linux提供的文件对象系统类型的文本进行解析。android.ne...

Android应用流量统计——NetworkStatsManager使用

在没有Root的情况下,Android应用流量统计在6.0之前一直没有太好的办法,官方虽然提供了TrafficStats,但其主要功能是设备启动以来流量的统计信息,和时间信息无法很好的配合。本文首先简...

Linux下安装vnstat流量统计

1. 下载安装 cd /data/software wget http://humdi.net/vnstat/vnstat-1.11.tar.gz tar zxf vnstat-1.11.tar.gz...

Hadoop2.4.1 简单的用户手机流量统计的MapReduce程序(二)

接着Hadoop2.4.1 简单的用户手机流量统计的MapReduce程序(一),现在我们 又有了新的需求,我们需要根据用户的总流量升序排列。 1.环境:Centos 6.5  32位, 在linux...
  • pfnie
  • pfnie
  • 2016年07月03日 09:29
  • 720

修改openssh源代码,添加流量统计并发送到远程功能

修改openssh源代码,添加流量统计并发送到远程功能 版本号: openssh-6.1p1 1:打开channels.h,在channel结构中增加2个字段,如下图: ...

Android流量统计TrafficStats类的使用

对于Android流量统计来说在2.2版中新加入了TrafficStats类可以轻松获取,其实本身TrafficStats类也是读取Linux提供的文件对象系统类型的文本进行解析。android.ne...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:libpcap编程--流量统计。。
举报原因:
原因补充:

(最多只允许输入30个字)