WinPcap捕获数据包
首先使用pcap_open打开指定的网卡, 获取使用pcap_loop进行捕获数据包.
// pcap_loop.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#define HAVE_REMOTE
#include <pcap.h>/* packet handler 函数原型 */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);#pragma comment(lib,"wpcap.lib")int _tmain(int argc, _TCHAR* argv[])
{pcap_if_t *alldevs;pcap_if_t *d;int inum;int i=0;pcap_t *adhandle;char errbuf[PCAP_ERRBUF_SIZE];/* 获取本机设备列表 */if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);exit(1);}/* 打印列表 */for(d=alldevs; d; d=d->next){printf("%d. %s", ++i, d->name);if (d->description)printf(" (%s)\n", d->description);elseprintf(" (No description available)\n");}if(i==0){printf("\nNo interfaces found! Make sure WinPcap is installed.\n");return -1;}printf("Enter the interface number (1-%d):",i);scanf("%d", &inum);if(inum < 1 || inum > i){printf("\nInterface number out of range.\n");/* 释放设备列表 */pcap_freealldevs(alldevs);return -1;}/* 跳转到选中的适配器 */for(d=alldevs, i=0; i< inum-1 ; d=d->next, i++);/* 打开设备 */if ( (adhandle= pcap_open(d->name, // 设备名65535, // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式1000, // 读取超时时间NULL, // 远程机器验证errbuf // 错误缓冲池) ) == NULL){fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);/* 释放设备列表 */pcap_freealldevs(alldevs);return -1;}printf("\nlistening on %s...\n", d->description);/* 释放设备列表 */pcap_freealldevs(alldevs);/* 开始捕获 */pcap_loop(adhandle, 0, packet_handler, NULL);getchar();return 0;
}/* 每次捕获到数据包时,libpcap都会自动调用这个回调函数 */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{struct tm *ltime;char timestr[16];time_t local_tv_sec;/* 将时间戳转换成可识别的格式 */local_tv_sec = header->ts.tv_sec;ltime=localtime(&local_tv_sec);strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);printf("%s,%.6ld len:%d\n", timestr, header->ts.tv_usec, header->len);}
WinPcap捕获数据包相关推荐
- 利用WinPcap技术捕获数据包
前言 随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要.在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数 ...
- winPcap编程之打开适配器并捕获数据包(四 转)
在贴源码之前先介绍一个将要用到的很重要的函数--pcap_open(),下面是pcap_open()在remote-ex.h中的声明: pcap_t *pcap_open(const char *so ...
- WinPcap笔记(5):不用回调方法捕获数据包
这里使用pcap_next_ex()函数代替pcap_loop()函数来实现捕获数据包.pcap_loop()函数基于回调原理实现数据捕获,这是一种精妙的方法,并且在某些场合中,它是一种很好的选择. ...
- WinPcap笔记(4):打开适配器并捕获数据包
前面已经能够得到是设备的信息了,现在开始做真正有意义的事情:打开适配器并捕获数据包.这里将用到函数pcap_open(),下面是函数的具体格式: pcap_t* pcap_open ( const c ...
- WinPcap学习(四)打开适配器并捕获数据包
打开设备的函数是pcap_open().下面参数snaplen,flags和to_ms的解释说明 snaplen制定要捕获数据包中的哪些部分.在一些操作系统中(比如xBSD和Win32),驱动可以被配 ...
- winpcap 发送数据包
把WinPcap 中分析数据包的代码复制到VS中,再把WinPcap中数据分析中的一些关于网卡打印的代码复制到VS中. // mist12306.cpp : 定义控制台应用程序的入口点. // #in ...
- 打开适配器并捕获数据包
由前两节的铺垫,我们已经知道如何获取本地适配器的信息了,接下来我们来学习一下如何打开适配器并捕获数据包,听起来相当诱惑,那么咱们立刻进入主题吧!在贴源码之前先介绍一个将要用到的很重要的函数--pcap ...
- windows下手把手教你捕获数据包
希望通过这一系列的文章,能使得关于数据包的知识得以普及,所以这系列的每一篇文章我都会有由浅入深的解释.详细的分析.以及编码步骤,另外附上带有详细注释的源码 文章作者:nirvana 经常看到论坛有人问 ...
- 手把手教你捕获数据包
原文链接:http://blog.csdn.net/piggyxp/article/details/24444 前 言 经常看到论坛有人问起关于数据包的截获.分析等问题,幸好本人也对此略有所知,也 ...
最新文章
- 基于android的天气预报的设计与实现
- 学习笔记53—Wilcoxon检验和Mann-whitney检验的区别
- etc/ld.so.conf
- Js正则表达式数字或者带小数点的数字
- 从0开始Vue2集成Bootstrap4(1)
- mongodb mysql配置_mongoDB数据库原生配置
- Java分层架构的使用规则
- 荒野行动为什么不能获取服务器信息,荒野行动获取服务器信息一直不动 服务器信息0解决方法...
- c语言计算器程序代码有优先级,C语言计算器小程序(源代码+实习报告).doc
- Html5视频video标签中使用blob实现视频播放加密
- android远程控制电视,手机怎么远程控制电视
- 基于JSP的鲜花店商城平台【数据库设计、源码、开题报告】
- 16S rRNA全长测序揭示中国重度污染河口细菌群落的时空动态
- 联通光猫CUAdmin获取
- HttpClient4.5.6设置代理以及代理验证(用户名和密码)
- java jtextarea边框_java swing中的JTextArea边框
- Redis 源码解读之 Rehash 的调用时机
- laradock 安装swoole
- Julia:如何调用其他sub文件中的函数
- mysql架设手游_手游长生诀手工架设完整服务端文件+安卓客户端+架设教程
热门文章
- MySQL 查询表中某字段值重复的数据
- YTKNetwork源码详解
- Java Error(三)
- php数组array_push()和array_pop()以及array_shift()函数
- Python学习之 !/usr/bin/python 和 !/usr/bin/env python区别
- osgEarth使用没有DX的Triton库Triton-MT-DLL-NODX.lib
- 2015.7.17( NOI2015 day1 )
- Android-ndk编译osgdb_3ds静态库
- [网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster原理详解
- [python] LDA处理文档主题分布及分词、词频、tfidf计算