WEB开发网
开发学院软件开发VC 开发Windows 2000/XP下的防火墙 阅读

开发Windows 2000/XP下的防火墙

 2006-07-20 11:40:33 来源:WEB开发网   
核心提示: 过滤函数我们已经知道了如何开发驱动并安装过滤函数,但还不知道该过滤函数中的任何东西,开发Windows 2000/XP下的防火墙(4),当主机接收或发送一个数据包,该过滤函数总会被调用,这对于进行NAT转换是非常有用的,你可以修改数据包的目标地址,系统会根据函数的返回值决定如何处理这个数据

过滤函数

我们已经知道了如何开发驱动并安装过滤函数,但还不知道该过滤函数中的任何东西。当主机接收或发送一个数据包,该过滤函数总会被调用,系统会根据函数的返回值决定如何处理这个数据包。

函数的原型是这样的:

typedef PF_FORWARD_ACTION
(*PacketFilterExtensionPtr)(
 // Ip数据包的包头
 IN unsigned char *PacketHeader,
 // 不包括头的数据包
 IN unsigned char *Packet,
 // 包长度。不包括IP头的长度
 IN unsigned int PacketLength,
 // 接收数据的接口适配器编号  
 IN unsigned int RecvInterfaceIndex,
 // 发送数据的接口适配器编号
 IN unsigned int SendInterfaceIndex,  
 //接收数据包的适配器IP地址
 IN IPAddr RecvLinkNextHop,
 //发送数据包的适配器IP地址
 IN IPAddr SendLinkNextHop
 );

PF_FORWARD_ACTION 是枚举类型,可能的值有:

PF_FORWARD 指示IP filter Driver立即向IP栈传递数据。对于本地数据包,IP向上送入栈。如果目标是另外的机器并且允许路由,将通过IP路由发送。

PF_DROP 指示IP filter Driver丢弃IP包。

PF_PASS 指示IP filter Driver去过滤该数据包,IP filter Driver如果处理该数据包取决于包过滤API的设置。过滤钩子返回pass的回应,表明它没有处理该数据包而让IP filter Driver去过滤该数据包。

虽然DDK文档只包含了这三个值,如果你查看pfhook.h(Filter-Hook Driver需要的头文件)你可以发现还有一个PF_ICMP_ON_DROP,我猜这个值是用于对ICMP包进行丢弃。

在过滤函数的定义中,传递进来指向数据包头的指针。因此,你可以修改数据头然后发送。这对于进行NAT转换是非常有用的,你可以修改数据包的目标地址,选择IP路由。

上一页  1 2 3 4 5  下一页

Tags:开发 Windows XP

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接