WinPcap使用
使用Winpcap示例程序的时候解疑

使用Winpcap示例程序的时候解疑使用Winpcap示例程序的时候,会出现很多错误(转)WINPCAP编程环境设置2008-05-19 12:41一、WINPCAP编程环境设置在正式WinPcap编程之前,要配置运行环境。
1、运行环境设置Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行:wpcap.dll Packet.dll WanPacket.dll pthreadVC.dll 这四个动态链接库在WinPcap驱动程序里。
如果没有这个驱动程序,需要到WinPcap官方网站上下载,下载地址为: 如果应用程序出现一下提示,那就是没有安装驱动程序的原因了。
也可以不安装WinPcap驱动程序。
但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32目录下。
(似乎有些问题)2、配置编程环境。
1> 从上下载WINPCAP SDK -WpdPack,WinPcap SDk里面包含库文件,头文件,文档文件和一些例子。
解压到一个指定的目录。
解压缩后把Include目录添加到IDE的包含文件中(VC6.0 T ools->Option->Directory; VS 2003/2005 工具->选项->项目和解决方案/项目->VC++目录); lib目录添加为新的库文件目录(VC6.0Tools->Option->Directory; VS 2003/2005 工具->选项->项目和解决方案/项目->VC++目录)如下图所示。
2> 如果一个源文件使用了WinPcap提供的库函数,那么就需要在该文件开始的位置添加pcap.h包含文件(或者在引用的文件中),即#include “pcap.h”也许会出现下面的错误:fatal error C1083: 无法打开包括文件:“pcap.h”: No such file or directory这个错误表明找不到pcap.h文件,这个头文件在驱动程序安装完成后也是没有的,它是开发包里面的一个头文件,所以,如果要运行程序还需要到官方网站上去下载WinPcap SDK,并按步骤1添加到项目中。
使用Wincap编制一个简单的网络数据包监听与捕获程序

u_short crc; //首部校验和(Header checksum)
ip_address saddr; //源地址(Source address)
ip_address daddr; //目的地址(Destination address)
u_int op_pad; //选项与填充(Option + Padding)
使用pcap_open()函数打开适配器,将这个函数的snaplen参数设为65535,这比能遇到的最大的MTU还要大,以保证能收到完整的数据包。另一个参数flag设为PCAP_OPENFLAG_PROMISCUOUS,意为混杂模式,不管这个数据包是不是发给本机的,都会去捕获。参数to_ms指定读取数据的超时时间,这里设置为1000ms,在适配器上进行读取操作都会在to_ms毫秒时间内响应。
ih = (ip_header *) (pkt_data +
14); //以太网头部长度
/*打印协议类型*/
int i;
for(i = 0; i < 10; i++){
if(protocol[i].number == ih->proto){
break;
}
}
if(i <= 9)
printf("%5s ", protocol[i].name);
return 0;
}
/*回调函数,当收到每一个数据包时会被libpcap所调用*/
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
winpcap过滤规则

winpcap过滤规则
Winpcap过滤规则有:
1.基于协议的过滤。
使用协议限定符,协议限定符可以为ip、arp、
rarp、tcp、udp等。
2.基于MAC地址的过滤。
使用限定符ether(代表以太网地址)、
当MAC地址仅作为源地址时表达式为ether src mac_addr,仅作为目的地址时表达式为ether dst mac_addr,既作为源地址又作为目的地址时表达式为ether host mac_addr。
3.基于IP地址的过滤。
使用限定符host(代表主机地址)。
当IP
地址仅作为源地址时过滤表达式应为src host ip_addr,仅作为目的地址时过滤表达式为dst host ip_addr,既作为源地址又作为目的地址时表达式为host ip_addr。
此外,还有基于端口的过滤。
WinNetCap使用手册

WinNetCap使用手册目录WinNetCap的安装 (2)WinNetCap使用方法 (3)功能按钮使用 (4)菜单栏使用 (5)数据查看 (5)WinNetCap的安装1.点击选择“next”;如图1-11-12.选择你要安装的路径然后点击“next”;如图1-21-23.然后一直点击“next”即可安装成功。
WinNetCap使用方法点击图标打开WinNetCap界面;如图1-3在右边会显示本机器上的IP地址,虚拟机上的也会显示。
可以根据自己需要选择监控的IP1-3注意:有时候可能弹出如图1-4一样的错误窗口只要将其拉至边上就可以,不要点击“确定”否则会退出工具。
1-4功能按钮使用当点击“文件”下方的开始等一些按钮;如图1-51-5开始:点击“开始”后会显示所抓到的数据包;如图1-61-6暂停:暂停抓包是占时停止显示所抓到的数据,当点击开始时候会将暂停过程中其他数据包都显示出来。
停止:停止抓包则是不在抓取数据。
清除数据:将所有显示的数据包删除。
关于:显示WinNetCap版本信息。
帮助:打开帮助文件。
保存当前记录:保存所选中的数据。
保存所有记录:将所有数据保存。
如图1-7菜单栏使用文件:单击“文件”里面会显示“保存当前记录”、“保存所有记录”、“退出程序”。
功能跟“保存当前记录”、“保存所有记录”按钮一样。
查看:查看可以看到“网络进程”。
与“任务管理器”类似。
抓包:抓包里面包含了“开始”、“暂停”、“停止”、“清楚数据”4个功能。
与功能按钮一样。
设置:可以编辑抓包条件,只有当启用抓包选中时候才可以使用。
关于与帮助和功能按钮一样。
数据查看当前网络流量:显示当前网络的速度。
抓包计时:记录总共抓包时间。
过滤数据包:在“设置”里面可以设置部分数据不显示,这些不显示的数据总数会在这里显示。
当前抓取:当要查看某一条数据大小时候,鼠标单击所要查看的数据,在这里就会显示此条数据的大小。
总共抓取:显示所抓取的所有数据包的总共大小。
WINPCAP编程环境设置

因为项目需要,而且以前从没用过Winpcap,所以不得不从头学起。
以前虽然看过winsocket,但是,Winpcap的第一个程序,我花了很长时间才编译通过。
对于初学者来说,不太好做的可能是编译程序之前应该做什么事。
我就大体说一下我的过程。
首先先大体介绍下Winpcap。
winpcap(windows packet capture)windows平台下一个免费,公共的网络访问系统。
开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
它提供了以下的各项功能:1> 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;2> 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;3> 在网络上发送原始的数据包;4> 收集网络通信过程中的统计信息。
具体介绍参见/view/696423.htm这里有Winpcap的详细介绍。
下面说一下你在编译Winpcap之前要做的事情。
1 下载Winpcap安装包,地址/install/default.htm。
2 然后到/devel.htm下载WinPcap developer's pack包,解压,里面有配置好的例子和include library。
3 在VC6.0菜单中,点Tolls->Options->Directories中的include files 和library files中添加包里面的include和library。
然后我们就来编写一个最简单的Winpcap程序——获取已连接的网络适配器列表。
首先新建一个工程,选择Win32 Console Application,工程名我们设为winpcap.然后这这个工程中新建一个C++源文件,名字winpcap。
在里面填写如下代码:#include <pcap.h>main( )pcap_if_t *alldevs;pcap_if_t *d;int i=0;char errbuf[PCAP_ERRBUF_SIZE];if (pcap_findalldevs(&alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); exit(1);}for(d= alldevs; d != NULL; 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;}pcap_freealldevs(alldevs);return 0;}运行之前我们要手动给它添加一个动态链接库wpcap.lib,方法是在菜单Project中点Settings,然后在选项中选Link,在library modules 后面填上wpcap.lib,注意和前面的要有空格隔开。
使用Winpcap开发网络数据包分析器

…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
I…
…
实用第一 智慧密集
使 用 Wip a n cp开发 网络数据包分析器
江 洪
摘 要 :使 用 W ip a n cp开 发 包 实现 了一 个 网 络 数 据 包 分 析 器 。 该 分 析 器 可 以 捕 获 UDP或 T P数 C
据 包,并对数 据 包头进 行 分析。
表 3 I 头 结构 表 P
名称 版本 号 长度 4位 4表 示这 是 IV4 . P 说明
表 4和表 5所 示 。
协议 。数 据包 是 进 行 网 络数 据 通 信 的基 本 单 位 。每块 数据 都 包
含 在 数 据 包 中 。 数 据包 中 ,除 了 数据 本 身外 , 还有 数 据 包 头 。
表 2 PPP OE 结 构 表
名 称 版本 号 类型 代 码 长 度 4位 4位 8位 设为 1 设为 I 设为0 说 明
目的 端 u
U DP长度 U DP校验 和
表 5 TCP 结构 表
名称 源端 L J 长度 J 6位 说明 表示数 据 包m哪 个端 u发 出
表 1 以 太 头 结 构 表
名称 长度 说 明 k 层 议 I P校验 和 源 l 址 P地 8位 1 6位 3 2位
l ,如 该值降 为 0就 会破 抛弃
本 文H涉 及 0 H T P和 1H. P这 两种 6.C I UD 校验 I 数据 是 正确 P头 表 示数据 包是 f 哪 个 I j = { P地址 发 出的 表 示数据 包磷 发给 哪个 l 址 P地
【网络程序设计】winpcap网络开发库入门

【网络程序设计】winpcap网络开发库入门Phinecos(洞庭散人)
专注于开源技术的研究与应用 Winpcap网络开发库入门
Winpcap是一个强大的网络开发库,可以实现许多功能:获取可用的网络适配器;获取指定适配器信息(比如名称和描述信息);捕获指定网卡的数据封包;发送数据封包;过滤捕获的包以获取特定包等。
首先到下载安装winpcap 驱动和DLL组件。
然后到下载winpcap开发包,解压到指定目录,
这里我解压到C:\WpdPack_4_0_2\WpdPack,可以看到里面包含了:Lib,Include ,文档和
示例程序。
首先创建一个C++控制台程序,设置如下:
1) 在“Configuration Properties -> C/C++ ->
General”中,在Additional Include
Directories加入Include路径(“C:\WpdPack_4_0_2\WpdPack\Include”)。
2) 在 “Configuration Properties -> Linker -> General”
中,在Additional Library
Directories中加入 winpcap 库文件路
径 ( “C:\WpdPack_4_0_2\WpdPack\Lib” ) 。
WinPcap 教程

WinPcap 教程: 循序渐进教您使用WinPcap本节将向您展示如何使用WinPcap API的一些特性。
这部分教程细化成若干节课,以循序渐进的方式介绍给读者,让读者从最基本的部分(获得设备列表)到最复杂的部分(控制发送队列并收集和统计网络流量)来了解如何使用WinPcap进行程序开发。
有时,我们会给出一些简单使用的代码片断,但同时,我们提供完整程序的链接:所有的源代码包含一些指向手册其他地方的链接,这可以让您很方便地通过点击鼠标来跳转到您想查看的函数和数据结构的内容中去。
范例程序都是用纯C语言编写, 所以,掌握基本的C语言编程知识是必须的,而且,这是一部关于处理原始网络数据包的教程,因为,我们希望读者拥有良好的网络及网络协议的知识。
用Microsoft Visual C++ 创建一个使用wpcap.dll 的应用程序,需要按一下步骤:∙在每一个使用了库的源程序中,将pcap.h 头文件包含(include)进来。
∙如果你在程序中使用了WinPcap中提供给Win32平台的特有的函数,记得在预处理中加入WPCAP 的定义。
(工程->设置->c/c++->预处理程序定义中添加WPCAP)∙如果你的程序使用了WinPcap的远程捕获功能,那么在预处理定义中加入HAVE_REMOTE。
不要直接把remote-ext.h直接加入到你的源文件中去。
(工程->设置->c/c++->预处理程序定义中添加HAVE_REMOTE)∙设置VC++的链接器(Linker),把wpcap.lib库文件包含进来。
wpcap.lib可以在WinPcap 中找到。
∙设置VC++的链接器(Linker),把ws2_32.lib库文件包含进来。
这个文件分布于C的编译器,并且包含了Windows的一些socket函数。
本教程中的一些范例程序,会需要它。
获取设备列表通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表。