您的位置:首页 > 理论基础 > 计算机网络

WINDOWS网络包过滤技术

2005-01-28 08:41 495 查看
WINDOWS网络包过滤技术

(原文:http://www.ndis.com/papers/winpktfilter.htm)

//似乎是翻译的#转者注:)

//作  者: sevencat (七猫) //原文作者不详#转者注

一、user-mode网络包过滤

1、winsock分层service provider

参照Microsoft Platform SDK上有关文档和例子

http://www.microsoft.com/msdownload/platformsdk/sdkupdate/)

这里有好几个microsoft lsp 例子,最新(可能最bug-free)的经常在这里能找到。需要

知道的是可以通过TDI调用核心TCPIP驱动,而且可以完全绕开WINSOCK,在大多数情况下这

不是一个问题。例如:QOS的实现可以在WINSOCK LSP上。

然而,这样做的话,程序必须察看和操作每个包,而不能依靠WINSOCK LSP,他们要以一

种接近核心态的方法来实现。

2、win2000包过滤接口

  WIN2000包过滤接口提供了一种机制,这种机制允许用户态程序或者服务指定一系列的

"过滤原则",这些过滤原则会被低层的TCPIP实现用来过滤包。这种过滤工主要是对IP原地

址、目标地址、端口号(或者端口号范围)进行pass或者drop操作。

Windows Developer s Journal

《用iphlpapi.dll进行包过滤》作者:Ton plooy,October,2000,Volume 11, Number 10



  WIN2000提供了一个较好对TCPIP的可编程控制,其中包括包过滤。不幸的是,有关这

个新的API的文档并不是很容易能找到。这篇文章向你演示了怎样对特定IP地址或者特定T

CP端口的包进行阻塞的编程。

链接:www.wdj.com

上面这个例子的下载:ftp://ftp.wdj.com/pub/webzip/1110/plooy.zip

Hollis 的解决方案:

  HTS W2K IpHook例子演示了IP过滤和它的HOOK API,包含原文件,而且是免费的,

需要HtsCpp运行时库(免费),下载地址:http://www.hollistech.com/

3、winsock替代DLL

  在使用WINSOCK LSP之前,唯一的办法是用自己的DLL取代微软的WINSOCK DLL,假如

实现顺利的话,自己的DLL会接收用户的WINSOCK调用请求,然后还可以调用原来的WINSOC

K DLL来处理。

  不过这样的实现是比较费力的,其中有个困难就是微软的WINSOCK DLL里面经常有一

些未公开的内部使用的函数,一个WINSOCK代替DLL至少要处理其中的一些未公开函数。

  随着WINDOWS系统结构的变化,有些方面得到了加强,比如系统文件保护,这使得这种

技术变得不太可行。总的说来,使用WINSOCK DLL替换不是一个坏主意。(Xfilter就是用

的这种技术,原代码可能在网上有流传,我以前看到过的)

二、kernel-mode网络包过滤

1、Transport Data Interface (TDI)

  这主要是一个直接在核心TCPIP驱动上面的一层过滤驱动。在WINXP上TDI驱动是一种传

统的NT风格的驱动,使用了基于IRP的API,这里有两种方法来实现。

A、使用核心模式服务的IoAttachDeviceXYZ函数族在TDI上实现一个过滤。

B、对TDI驱动IRP DISPATCH表进行过滤。

  IoAttachDeviceXYZ函数在许多WINNT驱动开发的书上提到。这两种技术都需要对WINN

T驱动开发编程技术十分了解,对TDI函数也要相当的了解。

2、NDIS中间层(IM)

具体请看NDIS IM FAQ:http://www.pcausa.com/resources/ndisimfaq.htm

3、WIN2000 FILTER-HOOK

  请参照有关DDK文档,系统中只能有一个活动的Filter-Hook存在,这点使这种技术的

使用有严重的限制。(平时所见的drvipflt就是用的这个)

4、WIN2000 FIREWALL-HOOK 

  Firewall-Hook Driver函数在文档里介绍得很少,而且在有些win2000版本中不可用。

请参照微软有关文档:http://msdn.microsoft.com/library/default.asp?url=/library

/en-us/network/hh/network/firewall_3wfb.asp

5、NDIS-HOOKING  (费尔防火墙就是用的这种技术吧,据我所知,虽然我没看过原码。



NDIS-Hooking驱动拦截或者叫"HOOK"一些由NDIS封装程序导出的函数。虽然从实现手段上

来说有些不正规,但一个有系统的NDIS-Hooking过滤会非常有效。

另外:NDIS-Hooking过滤驱动有下面的好处:

A、容易安装(可以动态装卸,不过有时候会出问题,里面有些情况现在还未知。)

B、支持拨号-ppp适配器。

  Ndis-Hooking技术在98和ME系统下非常有效和实用。在这些平台上,DDK文档和provi

ded services都能很有用的帮你HOOK由Ndis wrapper导出的函数。

  Ndis-Hooking技术在NT,2000和XP上同样有效和实用。这种技术很像核心模式的调试

器。文档支持较少,而且基本上不会被WHQL认证。

PCAUSA提供了一套NDIS PIM驱动例子,这些例子能在现有的WIN平台上运行成功(从95到

XP)。地址:http://www.pcausa.com/ndispim/Default.htm

其他:

Network操作和进程信息:

  有许多人想知道网络上的操作和WIN进程(就是应用程序啦)之间怎样联系起来,举例

来说,可能会想知道是哪个进程在一个特定的IP端口上发送或接收数据。

  先不考虑这种技术是否有用,或者是否可靠,我们认为核心模式TCPIP驱动上层的过滤

程序可以处理这个问题。而TCPIP驱动下层的过滤程序根本看不到进程信息。特别要注意的

是有些网络服务操作生成一个新的进程attach到系统进程上的。在这种情况下进程信息并

不能告诉我们原先是哪个进程生成的。特别是单独在核心模式下的WIN服务(TDI客户)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: