1:  #include"pcap.h"
   2:  //每次捕获到数据包时,libpcap都会自动调用这个回调函数
   3:  void packet_handler(u_char *param,const pcap_pkthdr*header,const u_char *ptk_data){
   4:      
   5:      char timestr[16];
   6:      //将时间戳转换成可识别的格式
   7:      time_t local_tv_sec=header->ts.tv_sec;   
   8:      tm *ltime=localtime(&local_tv_sec);
   9:      //strftime(timestr,sizeof(timestr),"%H:%M:%S",ltime);
  10:      strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);
  11:      printf("%s,%.6d len:%d\n",timestr,header->ts.tv_usec,header->len);
  12:  }
  13:  int main(){
  14:      pcap_if_t *alldevs;
  15:      pcap_t *adhandle;
  16:      char errbuf[PCAP_ERRBUF_SIZE];
  17:   
  18:      if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)==-1){
  19:          fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);
  20:          exit(1);
  21:      }
  22:   
  23:      //print device list
  24:      int count=1;
  25:      for(pcap_if_t *d=alldevs;d!=NULL;d=d->next){
  26:          printf("%d. %s",count++,d->name);
  27:          printf("(%s)\n",d->description);
  28:      }
  29:      if(count==1) {
  30:          printf("No interface found! Make sure WinPcap is isntalled\n");
  31:          return -1;
  32:      }
  33:      int num;
  34:      printf("Enter the interface number:(1-%d): ",count);
  35:      scanf("%d",&num);
  36:      if(num<1||num>count){
  37:          printf("Out Of Range\n");
  38:          pcap_freealldevs(alldevs);
  39:          return -1;
  40:      }
  41:      pcap_if_t *d=alldevs;
  42:       // 跳转到选中的适配器 
  43:      for(int i=0;i<num;i++,d=d->next){
  44:          // 设备名
  45:          // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容
  46:          // 混杂模式
  47:          // 读取超时时间
  48:          // 远程机器验证
  49:          // 错误缓冲池
  50:          adhandle=pcap_open(d->name,65536,PCAP_OPENFLAG_PROMISCUOUS,1000,NULL,errbuf);
  51:          if(adhandle==NULL){
  52:              fprintf(stderr,"Unable to open the adapter %s",d->name);
  53:              return -1;
  54:          }
  55:          printf("Listening on %s...\n",d->description);
  56:          
  57:          pcap_freealldevs(alldevs);
  58:          //开始捕获 
  59:          pcap_loop(adhandle,0,packet_handler,NULL);
  60:   
  61:      }
  62:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

试验结果:

ARPSpoofing教程(三) - 捕获数据包的更多相关文章

  1. winPcap编程之不用回调方法捕获数据包(五 转)

    这一次要分析的实例程序跟上一讲非常类似(“打开适配器并捕获数据包”),略微不同的一点是本次将pcap_loop()函数替换成了pcap_next_ex()函数.本节的重点也就是说一下这两个函数之间的差 ...

  2. winPcap编程之打开适配器并捕获数据包(四 转)

    在贴源码之前先介绍一个将要用到的很重要的函数--pcap_open(),下面是pcap_open()在remote-ex.h中的声明: pcap_t *pcap_open(const char *so ...

  3. Python3+pyshark捕获数据包并保存为文件

    一.直接使用wireshark捕获数据包并保存为文件 可以使用wireshark通过图形界面的操作来实现捕获数据包并保存为文件. wireshark默认捕获的数据包保存为临时文件,如果最后退出时不选择 ...

  4. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. winpcap使用之捕获数据包

    第一种方法,调用回调函数 #include "pcap.h" /* packet handler 函数原型 */ void packet_handler(u_char *param ...

  6. winPcap_5_打开适配器并捕获数据包

    知道如何获取适配器的信息了,那我们就开始一项更具意义的工作,打开适配器并捕获数据包.编写一个程序,将每一个通过适配器的数据包打印出来. 打开设备的函数是 pcap_open(). (Open a ge ...

  7. winPcap_6_不用回调方法捕获数据包

    用 pcap_next_ex() 函数代替 _5_ 中的 pcap_loop()函数: pcap_loop()函数是基于回调的原理来进行数据捕获,这是一种精妙的方法,并且在某些场合中,它是一种很好的选 ...

  8. Winpcap笔记4之不用回调函数捕获数据包

    函数1: pcap_next_ex(pcap_t*                       p, struct pcap_pkthdr**   pkt_header, const u_char*  ...

  9. Winpcap笔记3之打开适配器并捕获数据包

    上一讲中知道了如何获取适配的信息,这一将我们讲写一个程序蒋每一个通过适配器的数据包打印出来. 打开设备的函数是pcap_open().函数原型是 pcap_t* pcap_open(const cha ...

  10. Linux系统捕获数据包流程

    Linux系统捕获数据包流程 为了提高数据包的捕获效率,瓶颈问题是一个需要非常关注的焦点.减少在捕获数据包过程中的瓶颈,就能够提高数据包捕获的整体性能.下面本文将以Linux操作系统为平台,分析捕获数 ...

随机推荐

  1. C#开发Windows服务

    Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序. 服务可以在计算机启动时自动启动,可以暂停和重新启动而且 ...

  2. Redis Sentinel:集群Failover解决方案(转载)

    本文转载自:http://shift-alt-ctrl.iteye.com/blog/1884370 文中的配置例子,还有failover过程中触发的订阅事件具有很好的参考价值. Redis sent ...

  3. ElasticSearch入门系列(七)搜索

    一.在之前,我们已经学会了如何使用elasticsearch作为一个简单的NoSql风格的分布式文件存储器--我们可以将一个JSON文档扔给Elasticsearch.也可以根据ID检索他们.但Ela ...

  4. android 资讯阅读器(二)

    接着上次的博客,上次移植完了tab以后整个app的框架就算是定下来了. 本次目标: 1.数据的获取与展示(ListView) 2.官方的下拉刷新效果(SwipeRefreshLayout) 3.数据接 ...

  5. 如何在iOS地图上高效的显示大量数据

    2016-01-13 / 23:02:13 刚才在微信上看到这篇由cocoachina翻译小组成员翻译的文章,觉得还是挺值得参考的,因此转载至此,原文请移步:http://robots.thought ...

  6. 转 -- linux IO子系统和文件系统读写流程

    我们含有分析的,是基于2.6.32及其后的内核. 我们在linux上总是要保存数据,数据要么保存在文件系统里(如ext3),要么就保存在裸设备里.我们在使用这些数据的时候都是通过文件这个抽象来访问的, ...

  7. springMVC+mybatis 增删该操作后判断影响行数一直返回-2147482646

    MyBatis发现更新和插入返回值一直为"-2147482646"的错误是由defaultExecutorType设置引起的,如果设置为BATCH,更新返回值就会丢失.mybati ...

  8. openwrt的环境搭建、定制和编译

    参考1:编译openwrt全过程 参考2: ARM9的OpenWRT系统的移植以及 无线视觉操控系统的软件开发 参考3:搭建OpenWrt开发环境(包括编译过程) 参考4:各个openwrt版本的sv ...

  9. Velocity教程【转】

    原文:http://blog.csdn.net/qq_25237663/article/details/52262532 Velocity是一个基于Java的模板引擎,通过特定的语法,Velocity ...

  10. Jenkins_多项目构建(一):单独建立一个项目按顺序执行其它job

    有A,B,C三个Job,A为服务或web Job,B,C为A依赖的其它Job 单独建个Job,按B,C,A的顺序进行编译   1.安装插件:Multijob plugin   2.新建A,B,C三个J ...