Winpcap编程
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设备驱动 ---数据捕获 ---数据发送 ---可编程的过滤系统 ---监听引擎 ---……
接口
3.1 WinPcap组成--Packet.dll
packet.dll(Packet Driver
API) 提供了一个底层的API访问接 口,可以直接访问网卡,为win32 平台提供了一个公共的接口。
3.1 WinPcap组成
NPF功能: 数据捕获 流量监测 数据发送 dump to disk
1.什么是WinPcap
2.WinPcap的结构
3.WinPcap编程环境配置
环境配置
VC6.0 环境下的配置
1. 到/devel.htm 下载安装 包 和 Developer's Pack. 2.安装驱动。 3.开发时,解压Developer's Pack,分别找到LIB 和 Include 目录。打开VC++,首先在 Tools=>Options=>Directories,分别配置 lib 和 Include 目录。当中Show Directories for 可以指定相应 的文件目录 4.VC++环境配置。 Project=>Settings=>Link=>Object/Library Modules 里面添加需要的LIB. (Packet.lib wpcap.lib ws2_32.lib)
在同一下拉框中找到“库文件”,然后对应到开发包的lib目录;
设置编译条件;在项目属性页中:
配置属性->C/C++->预处理器->预处理器定义,增加 ;WPCAP;HAVE_REMOTE;每 一个预定义符用";"隔开; 在项目属性页中:配置属性->链接器->命令行->附加选项对应的文本 框中增加:“wpcap.lib ws2_32.lib”;
struct pcap_pkthdr { struct timeval ts; //时间戳 bpf_u_int32 caplen; //数据包保存在pcap文件中的实际长度, 以字节为单位 bpf_u_int32 len; //所抓获的数据包的真实长度,如果文件 中保存不是完整的数据包,那么这个值可能要比前面的数据包长度 的值大。}; struct timeval{ DWORD DWORD 的毫秒值} GMTtime; //秒计时:32位,数据包抓获的时间 microTime; //毫秒计时:32位,抓取数据包时
1. 什么是WinPcap?
什么是WinPcap做不到的? WinPcap不能阻止、过滤或操纵同一机器 上的其他应用程序的通讯:它仅仅能简单地“监 视”在网络上传输的数据包。所以,它不能提供 以下支持: 网络流量控制 服务质量调度 个人防火墙
1.什么是WinPcap
2. WinPcap的结构
3.1 WinPcap组成
举例:过滤并分析UDP数据包
使用pcap.dll编程
3、过滤数据包
使用pcap.dll编程
4、发送原始数据
int pcap_sendpacket ( pcap_t * p, u_char * buf, inp:设备标识
buf:待发送的数据包 size:缓冲区buf的长度
1.什么是WinPcap
2.WinPcap的结构
3.WinPcap编程环境配置
4.数据结构 5.WinPcap编程
使用pcap.dll编程
1、获取设备列表
int pcap_findalldevs_ex (char * source, struct pcap_rmtauth * auth, pcap_if_t ** alldevs, char * errbuf )
WinPcap编程
内容提要
什么是WinPcap WinPcap的结构 WinPcap编程环境配置
数据结构
WinPcap编程
1.什么是WinPcap
1. 什么是WinPcap?
当应用程序需要访问原始数据包,即没有被操作系统 利用网络协议处理过的数据包时,socket无法满足需要, WinPcap为Win32应用程序提供这种访问方式。
VC6.0 编译不通过
下载4.0.1版本的WinPcap安装包和开发包
OR
更新VC6.0的SDK OR 使用VS2008
1.什么是WinPcap
2.WinPcap的结构
3.WinPcap编程环境配置
4.数据结构
3 数据结构
① 接口地址信息
struct pcap_addr { struct pcap_addr *next; //指向下一个地址 struct sockaddr *addr; //指向sockaddr类型的结构 struct sockaddr *netmask; struct sockaddr *dstaddr; 如非点到点,则为NULL }; //指向addr相应的掩码 //与addr对应的目标地址, struct sockaddr *broadaddr; //addr相应的广播地址
3 数据结构
②网卡接口信息 typedef struct pcap_if pcap_if_t
struct pcap_if { struct pcap_if *next; //指向下一个接口结构
char *name;
// 设备名,打开设备时使用
//设备的描述信息
char *description;
struct pcap_addr *addresses;//指向地址链 表的第一个地址 bpf_u_int32 flags; }; //接口标志
WinPcap提供了以下功能
捕获原始数据包,无论它是发往本机的,还是在其他设 备(共享媒介)上交互的
在数据包递交给某应用程序前,根据用户指定的规则过 滤数据包
将原始数据包通过网络发送出去
收集并统计网络流量信息
1. 什么是WinPcap?
基于WinPcap的典型应用
网络与协议分析器 (network and protocol analyzers) 网络监视器 (network monitors) 网络流量记录器 (traffic loggers)
环境配置
VS2008 环境下的配置
1. 到/devel.htm 下载安装 包 和 Developer's Pack. 2.安装驱动 3.打开.net平台,设置环境目录;
在菜单:工具->选项;弹出的选项窗体左边点击:项目和解决方案>VC++目录;在右边:“显示以下内容的目录”标签下面的 下拉框 中找到“包含文件”,然后对应到开发包的Include目录;
WinPcap is an architecture for packet capture and network analysis for the Win32 platforms. It includes a kernel-level packet filter(NPF), a low-level dynamic link library (packet.dll), and a high-level and systemindependent library (wpcap.dll).
举例:发送原始数据包
WinPcap的过滤规则
1) 表达式支持逻辑操作符,可以使用关键字 and、or、 not对子表达式进行组合,同时支持使用小括号。
2) 基于协议的过滤:使用协议限定符:ip、arp、rarp、 tcp、udp等。
3) 基于MAC地址的过滤要使用限定符ether(代表以 太网地址)
说明:
以系统独立的方式访问网卡,开发的应用程序在不同的 Windows系统上运行不需重新编译(向后兼容) 透明处理NPF驱动
3.1 WinPcap组成--Wpcap.dll
Wpcap.dll(wpcap,libpcap) 不依赖于操作系统,与 libpcap 兼 容 , 提 供 了 更 加 高层、抽象的函数。
3.1 WinPcap组成--Wpcap.dll
功能
获取网络适配器列表 获取网络适配器的不同信息,比如网卡描述和地址的 列表
捕获数据包
发送数据 有效保存数据包到磁盘
创建一个数据包过滤器把它们应用到数据捕获中去
3.1 WinPcap组成--NPF
NPF(Netgroup Packet Filter)
功能:函数返回一个 pcap_if 结构的链表, 每 个这样的结构都包含了一个适配器的详细信息。
举例 :使用WPcap获得设备列表
使用pcap.dll编程
2、打开适配器并捕获数据包
pcap_t* pcap_open (const char * source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth * auth, char * errbuf ) 功能:打开网卡,设置混杂模式 int pcap_loop ( pcap_t * p, int cnt, pcap_handler callback, u_char * user )
3 数据结构
③捕捉实例 typedef struct pcap pcap_t 一个已打开的捕捉实例的描述符。这个 结构体对用户来说是不透明的,它通过 wpcap.dll提供的函数,维护了它的内容。 在打开网卡后的一系列操作中作为本次 捕获的标识。
3 数据结构
④包描述头:dump文件中每个数据包的头部描述 信息。
仅作为源地址时: ether src mac_addr 仅作为目的地址:ether dst mac_addr 既作为源地址又作为目的地址:ether host mac_addr mac_addr应该遵从00:E0:4C:E0:38:88的格式
WinPcap的过滤规则
环境配置
典型错误:
error C2079: 使用未定义的 struct“bpf_program” fatal error C1083: 无法打开包括文 件:“sys/time.h”: No such file or directory
原 “pcap.h” 修改后 “pcap.h”
环境配置
典型错误:
网络流量发生器 (traffic generators)
用户级网桥及路由 (user-level bridges and routers) 网络入侵检测系统 (network intrusion detection systems (NIDS)) 网络扫描器 (network scanners) 安全工具 (security tools)
3.1 WinPcap组成--Packet.dll
功能
安装,启动和停止NPF设备驱动 从NPF驱动接收数据包 通过NPF驱动发送数据包 获取可用的网络适配器列表 获取适配器的不同信息,比如设备描述,地址列表和掩码 查询并设置一个低层的适配器参数
two versions of packet.dll
the first one runs under Windows 95/98/ME the second one is for Windows NT/2000/XP.
功能:抓包,每抓到包后调用callback函数处理。
举例:使用回调函数打开适配器并捕获数据包
使用pcap.dll编程
3、过滤数据包
int pcap_compile (pcap_t * p, struct bpf_program * fp, char * str, int optimize, bpf_u_int32 netmask ) 将一个高层的布尔过滤表达式编译成一个能够被过 滤引擎所解释的低层的字节码。 int pcap_setfilter (pcap_t * p, struct bpf_program * fp ) 将一个过滤器与内核捕获会话关联。
一个数据报捕捉系统需要不经过系统协议栈的实现直 接访问网络上传输的原始数据,这种功能的实现需要在 系统内核运行组件与网卡直接打交道,由于需要与系统 交互,因此与操作系统的依赖性非常强,对于不同的操 作系统,都需要提供不同版本的NPF与系统交互。
3.1 WinPcap组成
NPF的位置
NPF is implemented as a protocol driver
接口
3.1 WinPcap组成--Packet.dll
packet.dll(Packet Driver
API) 提供了一个底层的API访问接 口,可以直接访问网卡,为win32 平台提供了一个公共的接口。
3.1 WinPcap组成
NPF功能: 数据捕获 流量监测 数据发送 dump to disk
1.什么是WinPcap
2.WinPcap的结构
3.WinPcap编程环境配置
环境配置
VC6.0 环境下的配置
1. 到/devel.htm 下载安装 包 和 Developer's Pack. 2.安装驱动。 3.开发时,解压Developer's Pack,分别找到LIB 和 Include 目录。打开VC++,首先在 Tools=>Options=>Directories,分别配置 lib 和 Include 目录。当中Show Directories for 可以指定相应 的文件目录 4.VC++环境配置。 Project=>Settings=>Link=>Object/Library Modules 里面添加需要的LIB. (Packet.lib wpcap.lib ws2_32.lib)
在同一下拉框中找到“库文件”,然后对应到开发包的lib目录;
设置编译条件;在项目属性页中:
配置属性->C/C++->预处理器->预处理器定义,增加 ;WPCAP;HAVE_REMOTE;每 一个预定义符用";"隔开; 在项目属性页中:配置属性->链接器->命令行->附加选项对应的文本 框中增加:“wpcap.lib ws2_32.lib”;
struct pcap_pkthdr { struct timeval ts; //时间戳 bpf_u_int32 caplen; //数据包保存在pcap文件中的实际长度, 以字节为单位 bpf_u_int32 len; //所抓获的数据包的真实长度,如果文件 中保存不是完整的数据包,那么这个值可能要比前面的数据包长度 的值大。}; struct timeval{ DWORD DWORD 的毫秒值} GMTtime; //秒计时:32位,数据包抓获的时间 microTime; //毫秒计时:32位,抓取数据包时
1. 什么是WinPcap?
什么是WinPcap做不到的? WinPcap不能阻止、过滤或操纵同一机器 上的其他应用程序的通讯:它仅仅能简单地“监 视”在网络上传输的数据包。所以,它不能提供 以下支持: 网络流量控制 服务质量调度 个人防火墙
1.什么是WinPcap
2. WinPcap的结构
3.1 WinPcap组成
举例:过滤并分析UDP数据包
使用pcap.dll编程
3、过滤数据包
使用pcap.dll编程
4、发送原始数据
int pcap_sendpacket ( pcap_t * p, u_char * buf, inp:设备标识
buf:待发送的数据包 size:缓冲区buf的长度
1.什么是WinPcap
2.WinPcap的结构
3.WinPcap编程环境配置
4.数据结构 5.WinPcap编程
使用pcap.dll编程
1、获取设备列表
int pcap_findalldevs_ex (char * source, struct pcap_rmtauth * auth, pcap_if_t ** alldevs, char * errbuf )
WinPcap编程
内容提要
什么是WinPcap WinPcap的结构 WinPcap编程环境配置
数据结构
WinPcap编程
1.什么是WinPcap
1. 什么是WinPcap?
当应用程序需要访问原始数据包,即没有被操作系统 利用网络协议处理过的数据包时,socket无法满足需要, WinPcap为Win32应用程序提供这种访问方式。
VC6.0 编译不通过
下载4.0.1版本的WinPcap安装包和开发包
OR
更新VC6.0的SDK OR 使用VS2008
1.什么是WinPcap
2.WinPcap的结构
3.WinPcap编程环境配置
4.数据结构
3 数据结构
① 接口地址信息
struct pcap_addr { struct pcap_addr *next; //指向下一个地址 struct sockaddr *addr; //指向sockaddr类型的结构 struct sockaddr *netmask; struct sockaddr *dstaddr; 如非点到点,则为NULL }; //指向addr相应的掩码 //与addr对应的目标地址, struct sockaddr *broadaddr; //addr相应的广播地址
3 数据结构
②网卡接口信息 typedef struct pcap_if pcap_if_t
struct pcap_if { struct pcap_if *next; //指向下一个接口结构
char *name;
// 设备名,打开设备时使用
//设备的描述信息
char *description;
struct pcap_addr *addresses;//指向地址链 表的第一个地址 bpf_u_int32 flags; }; //接口标志
WinPcap提供了以下功能
捕获原始数据包,无论它是发往本机的,还是在其他设 备(共享媒介)上交互的
在数据包递交给某应用程序前,根据用户指定的规则过 滤数据包
将原始数据包通过网络发送出去
收集并统计网络流量信息
1. 什么是WinPcap?
基于WinPcap的典型应用
网络与协议分析器 (network and protocol analyzers) 网络监视器 (network monitors) 网络流量记录器 (traffic loggers)
环境配置
VS2008 环境下的配置
1. 到/devel.htm 下载安装 包 和 Developer's Pack. 2.安装驱动 3.打开.net平台,设置环境目录;
在菜单:工具->选项;弹出的选项窗体左边点击:项目和解决方案>VC++目录;在右边:“显示以下内容的目录”标签下面的 下拉框 中找到“包含文件”,然后对应到开发包的Include目录;
WinPcap is an architecture for packet capture and network analysis for the Win32 platforms. It includes a kernel-level packet filter(NPF), a low-level dynamic link library (packet.dll), and a high-level and systemindependent library (wpcap.dll).
举例:发送原始数据包
WinPcap的过滤规则
1) 表达式支持逻辑操作符,可以使用关键字 and、or、 not对子表达式进行组合,同时支持使用小括号。
2) 基于协议的过滤:使用协议限定符:ip、arp、rarp、 tcp、udp等。
3) 基于MAC地址的过滤要使用限定符ether(代表以 太网地址)
说明:
以系统独立的方式访问网卡,开发的应用程序在不同的 Windows系统上运行不需重新编译(向后兼容) 透明处理NPF驱动
3.1 WinPcap组成--Wpcap.dll
Wpcap.dll(wpcap,libpcap) 不依赖于操作系统,与 libpcap 兼 容 , 提 供 了 更 加 高层、抽象的函数。
3.1 WinPcap组成--Wpcap.dll
功能
获取网络适配器列表 获取网络适配器的不同信息,比如网卡描述和地址的 列表
捕获数据包
发送数据 有效保存数据包到磁盘
创建一个数据包过滤器把它们应用到数据捕获中去
3.1 WinPcap组成--NPF
NPF(Netgroup Packet Filter)
功能:函数返回一个 pcap_if 结构的链表, 每 个这样的结构都包含了一个适配器的详细信息。
举例 :使用WPcap获得设备列表
使用pcap.dll编程
2、打开适配器并捕获数据包
pcap_t* pcap_open (const char * source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth * auth, char * errbuf ) 功能:打开网卡,设置混杂模式 int pcap_loop ( pcap_t * p, int cnt, pcap_handler callback, u_char * user )
3 数据结构
③捕捉实例 typedef struct pcap pcap_t 一个已打开的捕捉实例的描述符。这个 结构体对用户来说是不透明的,它通过 wpcap.dll提供的函数,维护了它的内容。 在打开网卡后的一系列操作中作为本次 捕获的标识。
3 数据结构
④包描述头:dump文件中每个数据包的头部描述 信息。
仅作为源地址时: ether src mac_addr 仅作为目的地址:ether dst mac_addr 既作为源地址又作为目的地址:ether host mac_addr mac_addr应该遵从00:E0:4C:E0:38:88的格式
WinPcap的过滤规则
环境配置
典型错误:
error C2079: 使用未定义的 struct“bpf_program” fatal error C1083: 无法打开包括文 件:“sys/time.h”: No such file or directory
原 “pcap.h” 修改后 “pcap.h”
环境配置
典型错误:
网络流量发生器 (traffic generators)
用户级网桥及路由 (user-level bridges and routers) 网络入侵检测系统 (network intrusion detection systems (NIDS)) 网络扫描器 (network scanners) 安全工具 (security tools)
3.1 WinPcap组成--Packet.dll
功能
安装,启动和停止NPF设备驱动 从NPF驱动接收数据包 通过NPF驱动发送数据包 获取可用的网络适配器列表 获取适配器的不同信息,比如设备描述,地址列表和掩码 查询并设置一个低层的适配器参数
two versions of packet.dll
the first one runs under Windows 95/98/ME the second one is for Windows NT/2000/XP.
功能:抓包,每抓到包后调用callback函数处理。
举例:使用回调函数打开适配器并捕获数据包
使用pcap.dll编程
3、过滤数据包
int pcap_compile (pcap_t * p, struct bpf_program * fp, char * str, int optimize, bpf_u_int32 netmask ) 将一个高层的布尔过滤表达式编译成一个能够被过 滤引擎所解释的低层的字节码。 int pcap_setfilter (pcap_t * p, struct bpf_program * fp ) 将一个过滤器与内核捕获会话关联。
一个数据报捕捉系统需要不经过系统协议栈的实现直 接访问网络上传输的原始数据,这种功能的实现需要在 系统内核运行组件与网卡直接打交道,由于需要与系统 交互,因此与操作系统的依赖性非常强,对于不同的操 作系统,都需要提供不同版本的NPF与系统交互。
3.1 WinPcap组成
NPF的位置
NPF is implemented as a protocol driver