深度剖析WinPcap之(五)——编译与使用WinPcap(1)

本文详细介绍了如何在Windows2000/XP/2003/Vista/2008等x86架构的Win32平台上编译WinPcap,包括构建驱动程序NPF、构建库文件packet.dll和wpcap.dll的过程,以及这些组件的安装步骤。此外,还提供了一个简单的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转自 http://eslxf.blog.51cto.com/918801/198999

 

本节主要说明了在各种 Win32 平台上如何编译 WinPcap[1] ,包括内核层与用户层两部分。所有的源代码可从 http://www.winpcap.org 网站获取。同时也对 WinPcap 的使用作了简单介绍,并给出一个简单的使用实例。

1.1.    源代码目录结构

WinPcap的所有源代码都可从http://www.winpcap.org网站获取,此处采用的源代码包为WpcapSrc_4_1_beta5.zip,源代码目录结构如图5-1所示。其中:
Common目录下为几个共用的头文件。
dox 目录下为一些说明文档。
Examples-pcap与Examples目录下为一些示例代码,两个目录的区别在于前者是采用libpcap库接口的示例程序,后者为采用wpcap库接口的示例程序。
Packet9x目录下为Windows 9x平台的驱动程序NPF的源代码与Packet.dll库的源代码,分别放置在VXD与DLL目录下。
PacketNtx目录下为Windows NTx平台的驱动程序NPF的源代码与Packet.dll库的源代码,分别放置在driver与DLL目录下。
wpcap目录下为wpcap.dll库的源代码。

[1] 此处我们只关注Windows 2000/XP/2003/Vista/2008 (x86架构)下WinPcap相关的问题,不关注Windows NT4、Windows 9x及x64架构的问题。同时所有的实际操作都在Window XP上进行。
 
clip_image002
图5-1 WinPcap源代码目录结构
可从http://www.winpcap.org网站获取开发包WpdPack_4_1_beta5.zip,便于WinPcap的软件开发,该软件包的目录结构如图5-2所示,其中:
docs目录下为详细的用户使用手册。
Examples-pcap与Examples-remote目录下为一些示例代码,两个目录的区别在于前者是采用libpcap库接口的示例程序,后者为采用wpcap库接口的示例程序。
Include目录下为在WinPcap库上开发所需的头文件。
Lib目录下为在WinPcap库上开发所需的库文件。

clip_image004
图5-2 WpdPack 开发包目录结构
 

1.2.      构建驱动程序NPF

在开始编译之前,我们需要注意NPF是依赖于平台的。所以强烈建议编译驱动程序的操作系统与将要使用NPF的操作系统一致。此处我们以Windows XP(x86架构)平台下 驱动程序NPF的构建为例,来说明构建的过程。
此处使用WDK 6001.18002[2]编译WinPcap 4.1 beta5。WinPcap 4.1 beta5的文档要求采用Microsoft Windows Driver Kit (WDK) 6000 or 6001进行编译。使用老的DDK编译WinPcap也应该可以,但是可能需要手动修改编译脚本,为了禁止PREfast(PREfast是一个静态代码分析工具,在最近的DDK/WDK版本附带)。
接着就可按下列步骤开始NPF的构建:
1)      Windows[开始]菜单选择[所有程序],然后选择[Windows Driver Kits],接下来选择[WDK 6001.18002],接着选择[Build Environments],选择[Windows XP]。
如果需要编译一个release版本,就选择[Windows XP x86 Free Build Environment] ,如果需要编译一个debug版本,就选择[Windows XP x86 Checked Build Environment]。因为我们的CPU是x86架构,所以选择x86的构建环境。
对于构建release版本的操作总结如下:
[开始]-> [所有程序]-> [Windows Driver Kits]-> [WDK 6001.18002]->
[Build Environments]-> [Windows XP]->
[Windows XP x86 Free Build Environment]
对于构建debug版本的操作总结如下:
[开始]-> [所有程序]-> [Windows Driver Kits]-> [WDK 6001.18002]->
[Build Environments]-> [Windows XP]->
[Windows XP x86 Checked Build Environment]
2)       构建环境接着出现如图5-3所示的命令提示窗口。切换路径到WinPcap源代码的PacketNTx目录,执行CompileDriver脚本命令,如图5-4所示。
[2] WDK 6001 的下载 参见下一篇博文的 说明
clip_image006
图5-3 Windows XP x86 Free Build Environment命令行窗口
clip_image008 图5-4执行CompileDriver脚本命令
3)       该脚本执行过程如图5-5所示,最终生成驱动程序(npf.sys),该二进制文件存在F:/winpcap/PacketNTx/driver/bin/i386目录下(Free与Checked Build方式构建的npf.sys文件都在该目录下)。
clip_image010
图5-5 CompileDriver脚本执行过程

1.3.      构建packet.dll

构建库packet.dll的源代码在PacketNTx/dll/目录下,要求在Microsoft Visual Studio 2005 SP1版本的环境中构建,理论上可以在Visual Studio 6环境下编译x86版本的,但是工程文件不再进行维护支持。
我们采用Microsoft Visual Studio 2005构建,同时不需要AirPcap适配器的支持。在Microsoft Visual Studio 2005中打开F:/winpcap/packetNtx/Dll/Project/ Packet.sln工程,选择Release配置构建PACKET.DLL库,如果为了调试也可以选择Debug配置
选择Release配置,开始构建,在 Microsoft Visual Studio 2005中选择菜单[Build]执行菜单项[Rebuild Packet],执行结果如下:
1>------ Rebuild All started: Project: Packet, Configuration: Release Win32 ------
1>Deleting intermediate and output files for project 'Packet', configuration 'Release|Win32'
1>Compiling...
1>win_bpf_filter.c
1>Packet32.c
1>f:/winpcap/Common/packet32.h(53) : fatal error C1083: Cannot open include file: 'airpcap.h': No such file or directory
1>NpfImExt.c
1>AdInfo.c
1>f:/winpcap/Common/packet32.h(53) : fatal error C1083: Cannot open include file: 'airpcap.h': No such file or directory
1>Build log was saved at "file://f:/winpcap/packetNtx/Dll/Project/Release/x86/BuildLog.htm"
1>Packet - 2 error(s), 0 warning(s)
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
编译出错,无法打开 airpcap.h文件,此处 不需要支持AirPcap适配器,所以 在文件Packet32 -Int.h的第50行添加#undef HAVE_AIRPCAP_API,再重新构建,执行结果如下:
1>------ Rebuild All started: Project: Packet, Configuration: Release Win32 ------
1>Deleting intermediate and output files for project 'Packet', configuration 'Release|Win32'
1>Compiling...
1>win_bpf_filter.c
1>Packet32.c
1>Compiling Packet.dll with support for WanPacket (aka Dialup thru NetMon)
1>Compiling Packet.dll with support from IP helper API for API addresses
1>NpfImExt.c
1>AdInfo.c
1>Compiling...
1>WanPacket.cpp
1>Compiling resources...
1>Linking...
1>   Creating library f:/winpcap/packetNtx/Dll/Project//Release/x86/Packet.lib and object f:/winpcap/packetNtx/Dll/Project//Release/x86/Packet.exp
1>Generating code
1>Finished generating code
1>Embedding manifest...
1>Build log was saved at "file://f:/winpcap/packetNtx/Dll/Project/Release/x86/BuildLog.htm"
1>Packet - 0 error(s), 0 warning(s)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
构建成功,在F:/winpcap/packetNtx/Dll/Project/Release/x86下生成Packet.dll与Packet.lib 文件。

1.4.     构建wpcap.dll

wpcap.dll能够在任何Win32平台下被构建生成dll,它是独立平台的。  构建库wpcap.dll的源代码在F:/winpcap/wpcap目录下,要求在Microsoft Visual Studio 2005 SP1版本的环境中构建。理论上可以在Visual Studio 6环境下编译x86版本的,但是工程文件不再进行维护支持。
为了编译wpcap.dll,把F:/winpcap/wpcap/PRJ目录下的wpcap.sln加载Microsoft Visual Studio 2005中。这儿有几个不同的工程配置,每一个对x86 (Win32) 与 x64平台都可用。
Ø Release : 标准release配置
Ø Debug : 标准debug配置
Ø Release No AirPcap : 不支持AirPcap 适配器的release配置
Ø Debug No AirPcap : 不支持AirPcap 适配器的debug配置
选择所需的配置并构建工程获得二进制文件 wpcap.dll。
注意wpcap.dll包含了libpcap的源代码,可从www.tcpdump.org网站获取, 不过对远程捕获部分进行了部分修改。也能够包含与构建一个不同版本的libpcap,仅需简单的把它复制到WinPcap  源代码的winpcap/wpcap目录下,但是必须使用 "Debug" 或 "Release"配置选项构建。
选择Release配置,开始构建,在 Microsoft Visual Studio 2005中选择菜单[Build]执行菜单项[Rebuild wpcap],执行结果如下:
1>------ Rebuild All started: Project: wpcap, Configuration: Release Win32 ------
1>Deleting intermediate and output files for project 'wpcap', configuration 'Release|Win32'
1>Compiling...
1>Win32-Extensions.c
1>sockutils.c
1>scanner.c
1>savefile.c
1>pcap.c
1>etherent.c
1>bpf_image.c
1>bpf_filter.c
1>Compiling...
1>bpf_dump.c
1>Compiling resources...
1>Linking...
1>   Creating library f:/winpcap/wpcap/PRJ//Release/x86/wpcap.lib and object f:/winpcap/wpcap/PRJ//Release/x86/wpcap.exp
1>Generating code
1>Finished generating code
1>Embedding manifest...
1>Build log was saved at "file://f:/winpcap/wpcap/PRJ/Release/x86/BuildLog.htm"
1>wpcap - 0 error(s), 303 warning(s)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
( 注意:执行结果 没显示一些警告信息。 )
构建成功,在F:/winpcap/wpcap/PRJ/Release/x86下成功生成wpcap.dll与wpcap.lib文件

1.5.     安装NPF驱动程序与各个库文件

把生成的NPF驱动程序与各个库文件安装到操作系统,此处假设操作系统安装在C盘下,具体的操作步骤如下:
1) 把生成的驱动程序二进制文件npf.sys从F:/winpcap/PacketNTx/driver/bin/i386目录下复制到C:/WINDOWS/system32/drivers目录下。
2)  F:/winpcap/packetNtx/Dll/Project/Release/x86下生成的Packet.dll文件复制到C:/WINDOWS/system32目录下。
3) F:/winpcap/packetNtx/Dll/Project/Release/x86下生成的Packet.lib文件复制到F:/WpdPack/Lib目录下,替换原有文件。
4)F:/winpcap/wpcap/PRJ/Release/x86下生成的wpcap.dll文件复制到C:/WINDOWS/system32目录下。
5)F:/winpcap/wpcap/PRJ/Release/x86下生成的wpcap.lib文件复制到F:/WpdPack/Lib目录下,替换原有文件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值