Windows 筛选平台 (WFP)_wfp proxy-程序员宅基地

技术标签: 编程  

原文路径::http://msdn.microsoft.com/zh-cn/library/windows/hardware/gg463267.aspx


引用于微软官方

Windows 筛选平台 (WFP)

更新日期: 5月 15日 2008年

此信息适用于以下操作系统:
Windows Vista
Windows Server 2008

简介

Windows 筛选平台 (WFP) 是 Windows Vista 和 Windows Server 2008 中全新的体系结构,它使独立软件供应商 (ISV) 能够筛选和修改 TCP/IP 数据包、监视或授权连接、筛选受 Internet 协议安全性 (IPsec) 保护的通信以及远程过程调用 (RPC)。对 TCP/IP 数据包的筛选和修改首次实现了对 TCP/IP 数据包处理路径的访问。在该路径中,您可以在进行其他处理之前检查或修改传出和传入数据包。通过在不同层上访问 TCP/IP 处理路径,您可以更轻松地创建防火墙、防病毒软件、诊断软件以及其他类型的应用程序和服务。

WFP 提供了各种 API,您可以参与发生在 TCP/IP 协议堆栈中多个层上的筛选决定。WFP 还集成并支持下一代防火墙功能,比如经过身份验证的通信以及基于使用 Windows Sockets API 的应用程序的动态防火墙配置。该功能也称为基于应用程序的策略。

WFP 不是防火墙。它是一组系统服务及用户模式和内核模式 API,它使您能够开发防火墙和其他监视连接或处理数据包的软件。例如,Windows Vista 和 Windows Server 2008 中的 Windows 防火墙就使用了 WFP。

如果您正在构建新的 Windows Vista 或 Windows Server 2008 软件,则使用 WFP 的优势是更高的性能、更低的编程复杂性以及内置的诊断支持。此外,您还可以对 Internet 协议版本 4 (IPv4) 和 Internet 协议版本 6 (IPv6) 通信使用内置的筛选引擎。WFP 还提供了强大的安全框架,在该框架中无法绕过配置正确的筛选器。

注意:若要提高性能,Windows Vista 和 Windows Server 2008 中的 TCP/IP 可以将任务或连接卸载到具有相应 TCP/IP 卸载功能的网络适配器。可以在不影响性能的情况下卸载未经过 WFP 筛选的连接。

为什么要将组件转换到 WFP

Windows Vista 包含用于 TCP/IP 协议堆栈的新体系结构。该体系结构是 IPv4 和 IPv6 的集成实现,称为双 IP 层体系结构。它对直接访问 TCP/IP 协议堆栈以便在 Windows XP 和 Windows Server 2003 中处理数据包的方法进行了大量更改。这些方法包括防火墙挂钩、筛选器挂钩以及涉及自定义解决方案(如传输驱动程序接口 (TDI) 筛选器驱动程序)的其他方法。若要更正操作并在 Windows Vista 和 Windows Server 2008 中执行同等功能,通常您必须更改您的应用程序、服务或驱动程序。

注意:Windows Vista 和 Windows Server 2008 继续支持 TDI 筛选器驱动程序和 Windows Sockets 分层服务提供程序 (LSP)。

若要更改您现有的组件,请参阅本文后面的“转换组件以使用 WFP”。通常,您必须将用于访问 TCP/IP 数据包处理路径的当前方法映射到使用针对 Windows Vista 和 Windows Server 2008 的 WFP 的同等方法。针对新的 TCP/IP 协议堆栈和 WFP 体系结构对软件进行修订可以为依赖于 TCP/IP 数据包处理路径的组件提供额外的功能。这些功能在 Windows Vista 和 Windows Server 2008 之前的 Windows 版本中可能不存在。

下表概述了使用 WFP 的一些优势:

  • 您拥有对 TCP/IP 数据包处理路径的精确访问控制。该控制不同于 Windows XP 和 Windows Server 2003 中支持的筛选器和防火墙挂钩方法,这两种方法提供对 TCP/IP 处理路径的受限访问。

  • 由于 WFP 已经提供了一个筛选引擎,因此您不需要构建自己的筛选逻辑和引擎。您只需使用 WFP 筛选引擎并集中于组件带来的增值。

  • 使用 WFP 时,几乎不会影响到带有将来的服务包版本的组件。

  • 实现防火墙或数据包筛选增值解决方案更加容易,因为已经存在筛选逻辑和到 TCP/IP 协议各个层的挂钩。

  • 根据组件的筛选和处理需求,您可以将组件从内核模式切换到用户模式,以便更轻松地开发组件。此外,用户模式组件的崩溃不会影响整个 Windows 系统。

  • 由于所有应用程序和服务都使用相同的筛选引擎,因此很容易确定是否存在执行相同功能的其他应用程序或服务。

  • 很容易开发可以与其他基于 WFP 的筛选解决方案共存的筛选解决方案,所有这些解决方案都遵循 WFP 筛选器仲裁规则。

应该在以下情况下使用 WFP:

  • 组件必须在特定的 TCP/IP 协议堆栈层检查 TCP/IP 通信。

  • 组件需要处理受 IPsec 保护的通信。

  • 您希望在 IPsec 解密之后执行数据包处理。

  • 您希望使用内置的 IPv6 筛选引擎执行 IPv6 数据包筛选,而不是构建自己的 IPv6 筛选引擎。

WFP 体系结构

图 1 显示了 WFP 体系结构及其对第三方应用程序、服务和驱动程序的扩展能力。

图 1 
图 1 WFP 的体系结构及其对第三方组件的扩展能力

WFP 体系结构由以下组件组成:

  • Win32 API

    Win32 API 包含 WFP 筛选 API。执行数据包筛选或处理的第三方防火墙或其他应用程序可以使用 WFP 筛选 API,以在基本筛选引擎中创建筛选器。这些筛选器可以在内核模式筛选引擎中的每层使用一组预定义的筛选条件。IPsec 策略代理服务和 Windows 防火墙是 Windows Vista 和 Windows Server 2008 附带的 WFP 应用程序。有关详细信息,请参阅 MSDN 库中的 Windows 筛选平台。

  • 基本筛选引擎

    该用户模式服务通过向内核模式筛选引擎中添加筛选器来实现用户模式筛选应用程序的筛选器请求。

  • 内核模式筛选引擎

    该内核模式组件存储筛选应用程序通过基本筛选引擎创建的筛选器,并通过筛选层与 TCP/IP 堆栈以及安装的标注驱动程序集交互。由于是通过新的 TCP/IP 堆栈来处理数据包,因此每一层都与内核模式筛选引擎有联系。内核模式筛选引擎检查配置的筛选器,以确定应该允许数据包、丢弃数据包还是将数据包传递到安装的标注驱动程序以检查和修改数据包。

  • 标注驱动程序

    进行简单数据包筛选(即根据预定义的 WFP 筛选条件检查数据包以确定应该允许还是丢弃数据包)不能达到预期目的时,则使用标注驱动程序。要对数据包内容或数据修改进行深度检测,必须具有标注驱动程序。深度检测检查超出预定义筛选条件的通信。深度检测的一个示例是防病毒软件,这类软件必须检测应用程序层数据,以确保传入的数据流中不存在病毒或蠕虫。数据修改的一个示例是网络地址转换 (NAT),在其中转发数据包时,路由器将更改 IPv4 数据包的字段。Windows Vista 和 Windows Server 2008 包含处理 IPsec 和共享 Internet 连接的标注驱动程序。标注驱动程序还可以使用 WFP 内核客户端在基本筛选引擎中创建筛选器。

第三方 ISV 可以使用 WFP 采用以下方式构建应用程序或服务:

  • 某些应用程序和服务仅使用简单数据包筛选。对于这些应用程序和服务,只需使用 WFP Win32 API 在新 TCP/IP 堆栈的相应层设置筛选器的用户模式应用程序或服务。不需要内核模式标注驱动程序。

  • 对于必须执行数据包深度检测或修改的应用程序和服务,则必须创建一个或多个标注驱动程序或用户模式应用程序或服务。标注驱动程序或者用户模式应用程序或服务可以使用 WFP Win32 API 在 TCP/IP 堆栈的相应层上设置筛选器,以便标注驱动程序进行进一步检测。当传入或传出通信与这些筛选器匹配时,内核模式筛选引擎将数据包传递给标注驱动程序,该驱动程序先执行检测或修改,然后再返回该数据包。在有些情况下不需要用户模式应用程序或服务。

转换组件以使用 WFP

表 1 列出了在 Windows XP 和 Windows Server 2003 中处理数据包的现有方法,以及如何在 Windows Vista 和 Windows Server 2008 中更改它们,以使用 WFP。

表 1 对现有数据包处理方法的更改

Windows XP 和 Windows Server 2003 中的现有方法 Windows Vista 和 Windows Server 2008 中的新方法
用于简单数据包筛选的防火墙挂钩或筛选器挂钩驱动程序。 使用 WFP Win32 API 的用户模式应用程序或服务。
用于深度数据包检测或修改的防火墙挂钩或筛选器挂钩驱动程序。 IP 层、传输层或应用程序层强制 (ALE) 层标注驱动程序以及可选的使用 WFP Win32 API 的用户模式应用程序或服务。
用于简单数据包筛选的传输驱动程序接口 (TDI) 筛选器驱动程序。 使用 WFP Win32 API 的用户模式应用程序或服务。
用于深度数据包(流)检测或修改的 TDI 筛选器驱动程序。 ALE 标注驱动程序以及可选的使用 WFP Win32 API 的用户模式应用程序或服务。
用于 TCP 连接或用户数据报协议 (UDP) 通信管理的 TDI 筛选器驱动程序。 流/数据报数据层标注驱动程序以及可选的使用 WFP Win32 API 的用户模式应用程序或服务。执行高级 TCP 连接管理(如代理、复制或克隆连接)的 TDI 筛选器驱动程序应该继续使用 TDI 筛选器驱动程序。
用于简单数据包筛选的 Windows Sockets LSP。 使用 WFP API 的用户模式应用程序或服务。
用于深度数据包检测或修改的 Windows Sockets LSP。 ALE、传输或流/数据报数据层标注驱动程序以及可选的使用 WFP Win32 API 的用户模式应用程序或服务。
用于简单数据包筛选的网络设备接口规范 (NDIS) 中间层驱动程序。 使用 WFP API 的用户模式应用程序或服务。
用于 TCP 连接或 UDP 通信管理的 NDIS 中间层驱动程序。 ALE 或流层标注驱动程序以及可选的使用 WFP Win32 API 的用户模式应用程序或服务。
用于执行媒体访问控制 (MAC) 级筛选的 NDIS 轻型筛选器驱动程序。 继续使用 NDIS 轻型筛选器驱动程序(WFP 不支持 MAC 级筛选)。


注意:Windows Vista 和 Windows Server 2008 支持 TDI。但是,Microsoft 正在考虑在未来的 Windows 版本中删除 TDI。

结束语

Windows Vista 和 Windows Server 2008 中全新的 WFP 能够进行 TCP/IP 数据包筛选和修改、连接监视或授权、IPsec 筛选以及 RPC 筛选。通常,您必须转换 Windows XP 和 Windows Server 2003 中的 TCP/IP 筛选或连接监视组件,以将 WFP 用户模式应用程序或服务和/或 WFP 内核模式标注驱动程序用于 Windows Vista 和 Windows Server 2008。

资源

WFP 用户模式应用程序或服务:
Windows 筛选平台 - Win32 API
 
http://msdn.microsoft.com/en-us/library/aa366510.aspx

WFP 内核模式标注驱动程序:
Windows 筛选平台标注驱动程序 - Windows 驱动程序工具包
 
http://msdn.microsoft.com/en-us/library/ms796374.aspx

其他:
Windows 核心网络博客中有关 WFP 的文章
 
http://blogs.msdn.com/wndp/archive/tags/WFP/default.aspx 

WFP 论坛 
http://social.msdn.microsoft.com/forums/zh-cn/wfp/threads/ 

WFP 示例项目 
http://blogs.msdn.com/onoj/archive/2007/05/09/windows-filtering-platform-sample.aspx


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Tinna_zhang/article/details/12706903

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf