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");
    }


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

 

程序运行结果:
 
 

【笔记】wincap收集并统计网络流量

统计引擎利用了内核级的数据包过滤器,来有效地为收集到的数据包进行分类。为了使用这个特性,编程人员必须打开一个适配器,并且,可以使用pcap_setmode()将它设置为统计模式(statistical...
  • guoduhua
  • guoduhua
  • 2012-12-26 15:29:39
  • 958

libpcap详解

一 概述: (一)libpcap(Packet Capture Library),即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库。它是一个独立于系统的用户层包捕获的API接口...
  • first_wolf
  • first_wolf
  • 2013-04-12 14:45:27
  • 1342

libpcap 捕包分析TCP流

libpcap捕包,将tcp流插入数据库分析,在libpcap官方代码基础上改动完成。备份之~ /* * checkSeq.cpp * * Sniffer example of TCP/IP ...
  • u013242491
  • u013242491
  • 2014-02-21 17:37:14
  • 1815

Linux 网络编程—— libpcap 详解

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

libpcap 源码解读

http://hi.baidu.com/suyupin/blog/item/c2b761123068140a5baf53fa.html http://hi.baidu.com/52hack/blog/...
  • che2606005002
  • che2606005002
  • 2009-11-11 11:02:00
  • 507

从网上搜索到的一些关于pcap源代码,入门级的

/*pcap_1.c*/#include #include #include   /* 如果没有pcap的系统,要自己下载一个 */#include #include #include #includ...
  • bat603
  • bat603
  • 2006-09-04 17:08:00
  • 9781

网络编程系列之五 libpcap库(共24个函数的实例)

之前在windows下用过winpcap,但是libpcap终究与它还是有区别的。 已经决定从事Linux的方向了,下面就完整的学习下libpcap函数库。 目的:熟悉库中的所有函数, 对于其中所...
  • Mjt_csdn
  • Mjt_csdn
  • 2015-07-29 16:50:08
  • 1846

libpcap流量统计

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

libpcap和pfring应用程序--Pcap_open_live(二)

首先以libpcap为主线,先通过pcap_open_live函数,做一些初始化的操作,比如打开网卡,设置好读取数据包的回调函数等等,然后就可以通过pcap_next,pcap_next_ex,pca...
  • smilestone322
  • smilestone322
  • 2012-12-29 21:22:08
  • 12916

libpcap源码分析

百度文库的地址:http://wenku.baidu.com/view/1a8fc4baa26925c52cc5bff2#  其中有部分是参考网上资料。 1、Libpcap介绍 ...
  • zhuguorong11
  • zhuguorong11
  • 2016-08-12 19:01:59
  • 450
收藏助手
不良信息举报
您举报文章:libpcap编程--流量统计。。
举报原因:
原因补充:

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