本节主要说明了在各种 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_p_w_picpath002
图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_p_w_picpath004
图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_p_w_picpath006
图5-3 Windows XP x86 Free Build Environment命令行窗口
clip_p_w_picpath008 图5-4执行CompileDriver脚本命令
3)       该脚本执行过程如图5-5所示,最终生成驱动程序(npf.sys),该二进制文件存在F:\winpcap\PacketNTx\driver\bin\i386目录下(Free与Checked Build方式构建的npf.sys文件都在该目录下)。

clip_p_w_picpath010
图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_p_w_picpath.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目录下,替换原有文件。

本文出自 “千江月” 博客,请务必保留此出处http://eslxf.blog.51cto.com/918801/198999