热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

WinPcap中文技术文档(4.1.2)第四章

1.WinPcap核心资料1.1.详细描述这部分指南从最底层的模块开始,描述了WinPcap的核心结构与接口。这部分内容的适合那些想要扩展或修改本软件的人,或者是那些对WinPcap的工作原理感兴趣的人。因此,那些只希望在他们的软件中,使用WinPcap的开发人员,不需

1.WinPcap核心资料 1.1. 详细描述 这部分指南从最底层的模块开始,描述了WinPcap的核心结构与接口。这部分内容的适合那些想要扩展或修改本软件的人,或者是那些对WinPcap的工作原理感兴趣的人。因此,那些只希望在他们的软件中,使用WinPcap的开发人员,不需

1. WinPcap核心资料

1.1. 详细描述

这部分指南从最底层的模块开始,描述了WinPcap的核心结构与接口。这部分内容的适合那些想要扩展或修改本软件的人,或者是那些对WinPcap的工作原理感兴趣的人。因此,那些只希望在他们的软件中,使用WinPcap的开发人员,不需要阅读此部分的内容。

1.2. WinPcap 结构

引用WinPcap主页上的一段内容:

WinPcap是一个Win32平台的,用于捕获数据包和进行网络分析的体系结构。它包括了一个内核级的数据包过滤器,一个低层动态链接库(packet.dll),一个高层的且依赖于系统的库(wpcap.dll)。

为什么我们使用术语“体系结构”而不是“库”呢?因为数据捕获是一个低层的行为,它需要和网络适配器,及操作系统的信息交换,特别是网络的实现。所以,一个简单的库是实现不了的。

以下结构显示了WinPcap的不同的组件:

首先,捕获系统需要占用操作系统的协议栈来访问通过网络的原始数据。这就需要有部分内容要运行在操作系统内核中,可以直接访问网络接口驱动。这部分内容非常依赖于系统,在我们的解决方案中,它被认为是设备驱动,称为Netgroup Packet Filter(NPF);我们为Windows 95,Windows98,Windows ME, Windows NT 4, Windows 2000 和 Windows XP提供了不同版本的驱动。这些驱动都提供了相同的基本功能,比如数据捕获和发送,也提供了一些高级功能,比如可编程的过滤系统和一个监听引擎,前者可以被用来获取过滤后的数据流(比如,可以从指定的端口,仅捕获ftp数据流),后者提供了一个强大的,但很简单的方式来获取数据流的统计信息。(比如获取网络流量或者两个主机间交换数据的总大小)。

其次,捕获系统必须输出一个端口,以便用户级应用程序利用内核驱动所提供的特性。WinPcap提供了两个不同的库:packet.dll 和 wpcap.dll。

第一个动态库提供了低层的API,它可以直接访问驱动的函数,并且依赖于微软操作系统的可编程接口。

第二个动态库提供了更多强大的,高层次的,和libpcap(一个知名的Unix捕获库)兼容的捕获原语。这些函数捕可以在不考虑网络硬件和操作系统的情况下捕获数据。

纵观本文档,我们会首先使用PacketDriver API 或 packet.dll的函数,然后才是wpcap, wpcap.dll 或 libpcap的。

1.3. 如何编译WinPcap

这部分内容会告诉你,在不同的win32平台上如何编译WinPcap。源代码可以在WinPcap 网站上获得。

1.3.1. 编译驱动

编译NPF时,有两个主要的路径:WindowsNTx和Windows 9x。注意,因为NPF驱动是与平台相关的,所以,为了连接正确的DDK库,我们强烈建议编译的时候,要选择将来会被使用的那个操作系统。比如,如果你使用Windows NT 4 DDK库赖编译驱动,那么在Windows2000或其他操作系统上运行,将不会那么顺利了。

1.3.1.1. 在Windows NT4平台上编译驱动

软件需求:

1) Microsoft Driver Developer Kit (DDK) for Windows NT4

2) 能在VisualStudio 6上编译的Microsoft Platform Software Development Kit (SDK)的较新的版本(最新的平台发布于2003年2月)。这个版本的PSDK在Microsoft的网站上提供,参见:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm。同时,它也可以在线订阅:http://www.qmedia.ca/launch/psdk.htm,同时,在微软的用户下载网站里,也为微软MSDN用户提供了订阅。

3) Microsoft Visual C++ 6.0 with Service Pack 5 or 6 (这两个版本在微软的网站上都有提供).

如果你的系统符合上面的三个要求,那么请按照下列步骤:

1. 从Windows NT 开始 菜单,选择 程序 然后选择 DevelopmentKits, 然后选择 Windows NT4 DDK. 在这里,如果你想建立一个调试版本,你可以选择Checked Build Environment ,如果你想建立一个发布版本,你可以选择Free Build Environment 。

2.一个命令提示框将被打开。用cd命令移到WinPcap文件夹下的PacketNTx文件夹,输入命令:

CompileDriver

这个脚本会产生一个驱动 (npf.sys),然后,二进制数据会被放入下列文件夹中的一个?

Free BuildEnvironment: winpcap\PacketNTx\driver\bin\NT4\i386\free

Checked BuildEnvironment: winpcap\PacketNTx\driver\bin\NT4\i386\checked

警告: 有时,在编译驱动的过程中,会产生很多'last line incomplete'错误提示。忽略这些错误,并且让编译过程继续进行。它们的产生是由于某些版本的DDK的bug所引起的。

1.3.1.2. 在Windows 2000/XP/2003/Vista(32位和64位AMD64)平台上编译驱动

软件需求:

1) Microsoft Driver Developer Kit (DDK) for Windows Windows XP orWindows Server 2003. 对于 WinPcap 4.0, 最合适的 DDK environment 是 "DDK for Windows Server 2003SP1", 也可以称作 DDK3790.1830.

注意: 在Windows 2000下使用旧的DDK是可以的,但是,你需要手动地修改编译脚本来禁用PREfast。(PREfast是一个静态代码分析工具,捆绑在较新的DDK中)

如果你的系统满足以上需求,那么请按下列步骤进行:

1.从Windows NT 开始 菜单,选择 程序 然后选择 DevelopmentKits, 然后选择 Windows XXX DDK., XXX 就是你的目的系统,然后选择 BuildEnvironments.

1) 32bit 驱动: 选择 Windows2000 ,然后,如果你想建立一个发布版本的程序,请选择 Windows 2000 Free Build Environment,如果你想建立一个调试版本的程序,请选择Windows 2000 Checked Build Environment 。

2) 64bit AMD64 驱动: 选择 WindowsServer 2003 然后,如果你想建立一个发布版本的程序,请选择 Windows Server 2003 Free x64Build Environment 如果你想建立一个调试版本的程序,请选择 Windows Server 2003 Checked x64 Build Environment 。

2.一个命令提示框将被打开。用cd命令移到WinPcap文件夹下的PacketNTx文件夹,输入命令:

CompileDriver

这个脚本会产生一个驱动 (npf.sys),然后,二进制数据会被放入下列文件夹中的一个

1) 32bit driver (both Free andChecked Build): winpcap\PacketNTx\driver\bin\2k\i386

2) 64bit AMD64 driver (both Freeand Checked Build): winpcap\PacketNTx\driver\bin\xp\amd64

1.3.1.3. 在Windows 9x平台上编译驱动

注意: WinPcap已经不再支持这个Windows平台。然而,一些在代码包中,基于这些操作系统的源代码还是可用的。

要在Windows 9x上编译驱动,你需要:

1) Driver Developer Kit (DDK) forWindows 95/98/ME

2) 能在Visual Studio 6上编译的Microsoft Platform Software Development Kit (SDK)的较新的版本(最新的平台发布于2003年2月)。这个版本的PSDK在Microsoft的网站上提供,参见:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm。同时,它也可以在线订阅:http://www.qmedia.ca/launch/psdk.htm,同时,在微软的用户下载网站里,也为微软MSDN用户提供了订阅。

3) Microsoft Visual C++ 6.0 withService Pack 5 or 6 (这两个版本在微软的网站上都有提供).

然后,按下列步骤进行:

1.打开DOS

2.进入 VisualC++BIN 目录 (比如 C:\DEVSTUDIO\VC\BIN) 并执行命令

Vcvars32

3.进入 SDK 目录 (比如 C:\MSSDK) 并执行命令

setenv sdk_path

sdk_path 是 SDK 目录(比如 SetenvC:\MSSDK)

4.进入 DDK 目录 (比如 C:\DDK) 并执行命令

ddkenv 32 net

5.进入驱动源代码所在目录,并执行命令

nmake rtl

来获得发布版本,或者执行

nmake

来获得调试版本

发布版本的 packet.vxd 将会出现在 retail 目录下, 调试版本将会出现在debug 目录下

警告: 在一些系统中, NMAKE使用工具并不能启动 ADRC2VXD, 这一位着驱动二进制数据的产生是正确的,不过没有版本信息。我们还不知道引起这个问题的原因。

1.3.2. 编译 packet.dll

这个DLL的源路径在PacketNTx\dll\

注意: WinPcap已经不再支持这个Windows平台。然而,一些在代码包中,基于这些操作系统的源代码还是可用的。

软件需求:

1) 能在Visual Studio 6上编译的Microsoft Platform Software Development Kit (SDK)的较新的版本(最新的平台发布于2003年2月)。这个版本的PSDK在Microsoft的网站上提供,参见:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm。同时,它也可以在线订阅:http://www.qmedia.ca/launch/psdk.htm,同时,在微软的用户下载网站里,也为微软MSDN用户提供了订阅。

注意: 如果你使用Microsoft Visual Studio .NET ,那么平台SDK是不需要编译packet.dll的。

2) Microsoft Visual C++ 6.0 withService Pack 5 or 6 (这两个版本在微软的网站上都有提供).

3) 如果你想用WinPcap建立一个支持CACE无线包捕获技术的程序,你需要从http://www.cacetech.com/products/airpcap.htm下载AirPcapdeveloper's pack。The AirPcap developer's pack需要被解压到和WinPcap同一个目录下。

要编译 PACKET.DLL, 在Visual C++平台下,加载一个包含了目录PacketNTx\dll\project 的工程。以下是一些工程的配置:

1) PacketNT - Win32 Release: 标准发行版配置

2) PacketNT - Win32 Debug: 标准调试版配置

3) PacketNT - Win32 Release NoAirPcap: 标准发行版配置,不支持AirPcap

4) PacketNT - Win32 Debug NoAirPcap: 标准调试版配置, 不支持AirPcap

5) PacketNT - Win32 NT4 Release: 运行于NT4的发行版本配置,不包括对Wan和IP helperAPI的支持。

6) PacketNT - Win32 NT4 Debug: 运行于NT4的调试版本配置,不包括对Wan和IP helperAPI的支持。

7) PacketNT - Win32 Release Vista:运行于Vista的发行版本配置,不包括对Wan的支持(以及NetMon API)。

8) PacketNT - Win32 Debug Vista: 运行于Vista的调试版本配置,不包括对Wan的支持(以及NetMon API)。

9) WanPacket - Win32 Release: 使用WanPacket 库的发行版本,用于同NetMonAPI进行广域网捕捉。

10) WanPacket - Win32 Debug: 使用WanPacket 库的调试版本,用于同NetMonAPI进行广域网捕捉。

选择一种需要的配置,并建立工程来获取二进制文件。

1.3.3. 编译 wpcap.dll

wpcap.dll 可以在任何 Win32 平台下编译,产生的dll是平台相关的。

系统需求:

1) Microsoft Visual C++ 6.0 withService Pack 5 or 6 (这两个版本在微软的网站上都有提供).

2) 能在Visual Studio 6上编译的Microsoft Platform Software Development Kit (SDK)的较新的版本(最新的平台发布于2003年2月)。这个版本的PSDK在Microsoft的网站上提供,参见:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm。同时,它也可以在线订阅:http://www.qmedia.ca/launch/psdk.htm,同时,在微软的用户下载网站里,也为微软MSDN用户提供了订阅。

注意: 如果你使用Microsoft Visual Studio .NET ,那么平台SDK是不需要编译wpcap.dll的。

3) WinPcap源代码的工程文件位于winpcap\wpcap\prj . 从 Visual C++ 开发平台上加载wpcap.dsw并构建程序。

4) 如果你想用WinPcap建立一个支持CACE无线包捕获技术的程序,你需要从http://www.cacetech.com/products/airpcap.htm下载AirPcapdeveloper's pack。The AirPcap developer's pack需要被解压到和WinPcap同一个目录下。

以下是八种工程的配置:

不支持远程捕获,支持AirPcap,不支持DAG,

1) Wpcap debug: 目录输出:winpcap\wpcap\prj\Debug

2) Wpcap release: 目录输出:winpcap\wpcap\prj\Release

支持远程捕获,不支持AirPcap,不支持DAG

3) Wpcap debug REMOTE NO AIRPCAP: 目录输出:winpcap\wpcap\prj\Debug_REMOTE_NO_AIRPCAP

4) Wpcap release REMOTE NOAIRPCAP: 目录输出: winpcap\wpcap\prj\Release_REMOTE_NO_AIRPCAP

支持远程捕获,支持AirPcap,不支持DAG

5) Wpcap debug REMOTE: 目录输出:winpcap\wpcap\prj\Debug_REMOTE

6) Wpcap release REMOTE: 目录输出:winpcap\wpcap\prj\Release_REMOTE

支持远程捕获,支持AirPcap,支持DAG

7) Wpcap debug REMOTE DAG: 目录输出:winpcap\wpcap\prj\Debug_REMOTE_DAG

8) Wpcap release REMOTE DAG: 目录输出:winpcap\wpcap\prj\Release_REMOTE_DAG

注意: wpcap.dll 包含了来自www.tcpdump.org 的libpcap的源代码,对于远程捕获有一些修改。你能包含和构建一个不同版本的libpcap,只需要简单地把它拷贝到winpcap\wpcap\prj下的WinPcap源代码中即可,但是,你必须使用"Debug(调试)"或"Release(发行)"进行配置。

1.3.4. Packet.dll — 数据包驱动API

Packet.dll 是一个动态链接库,并提供了一些低层的函数,用来: ?安装,启动和停止NPF设备驱动

1) 从NPF驱动接收数据包

2) 通过NPF驱动发送数据包

3) 获取可用的网络适配器列表

4) 获取适配器的不同信息,比如设备描述,地址列表和掩码

5) 查询并设置一个低层的适配器参数

packet.dll有两个版本:第一个运行于Windows 95/98/ME, 第二个运行于 Windows NT/2000/XP。

提供了对WinPcap的低层函数的访问,这种访问依赖于系统。这个库维护了所有的依赖于系统的细节(比如管理设备,协助操作系统管理适配器,在注册表中查找信息等),并且输出一个可以在所有Windows操作系统中通用的API。这样,操作系统和库就可以在所有的 Windows操作系统下重新编译并运行了。

然而,不是所有的packet.dll的API是完全可移植的:有些高级特性,比如内核模式下的输出处理,只能运行在WinNTx版本的WinPcap,Win9x的packet.dll不提供这样的功能。换种说法就是,NTx版本要比9x版本功能强大,也就是说,在Win9x版本中提供的所有函数,在WinNTx中都有。

这个库的另一个重要特性,就是维护了NPF驱动。当程序试图访问适配器时,Packet.dll在后台安装和启动了驱动,这些对编程人员来说,是透明的。这就避免了用户通过控制面板,手动安装驱动程序。

非常重要的注意事项,请仔细阅读!

Packet.dll的源代码是开放的,并且有完整的文档。 然而,packet.dll应该被认为是核心API,因为它建立在WinPcap内部的目的,就是为真正的公共API:wpcap.dll建立一层"隔离墙"。
推荐阅读
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 转自:http:www.yybug.comread-htm-tid-15324.html为什么使用Twisted? 如果你并不准备使用Twisted,你可能有很多异议。为什么使用T ... [详细]
  • Valve 发布 Steam Deck 的新版 Windows 驱动程序
    Valve 最新发布了针对 Steam Deck 掌机的 Windows 驱动程序,旨在提升其在 Windows 环境下的兼容性、安全性和性能表现。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • 多核处理器技术的显著进展可追溯至IBM于2001年推出的双核RISC处理器POWER4,标志着服务器处理器迈入多核时代。随后,HP和Sun等公司也纷纷加入这一行列,推动了多核处理器在不同领域的广泛应用。 ... [详细]
  • Python基础教程:struct模块与格式化字符详解
    本文详细介绍了Python中struct模块的功能,以及如何利用格式化字符实现Python与C语言结构体之间的数据转换。文章通过具体实例讲解了struct模块的主要方法及其应用场景。 ... [详细]
  • 深入探讨ASP.NET中的OAuth、JWT与OpenID Connect
    本文作为前文关于OAuth2.0和使用.NET实现OAuth身份验证的补充,详细阐述了OAuth与JWT及OpenID Connect之间的关系和差异,旨在提供更全面的理解。 ... [详细]
  • 本文在前文基础上,进一步探讨了如何利用Multi-Paxos算法解决一系列值的共识问题。文中不仅分析了Basic Paxos的局限性,还详细阐述了通过引入领导者节点优化Multi-Paxos算法的具体方法。 ... [详细]
  • Active Object设计模式解析
    Active Object设计模式通过引入代理(Proxy)和命令(Command)模式,实现了方法调用与执行的解耦,从而支持异步操作和提高系统的并发处理能力。本文将深入探讨Active Object模式的工作原理及其应用场景。 ... [详细]
  • Consul 单节点与集群环境构建指南
    本文详细介绍了如何安装和配置 Consul 以支持服务注册与发现、健康检查等功能,包括单节点和集群环境的搭建步骤。 ... [详细]
  • 本文介绍了 ScrapySharp 的基本使用方法,并深入解析了其中的 CssStyleCollection 类。通过 NuGet 包管理器安装 ScrapySharp 后,开发者可以利用其强大的网页抓取功能。文章转载自一位经验丰富的博主。 ... [详细]
author-avatar
mobiledu2502875123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有