VC413 Windows简单防火墙的设计Visual C++
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
虽然防火墙是目前保护网络免〖本文来自:计算机毕业网 〗遭黑客袭击的有效手段,但也有明显不足:无法防范通过防火墙以外的其它途径的攻击,不能防止来自内部变节者和不经心的用户们带来的威胁,也不能完全防止传送已感染病毒的软件或文件,以及无法防范数据驱动型的攻击。
1.3 本课题研究的意义
目前市场上大多数的防火墙产品仅仅是网关型的,虽然它们的功能相当强大,但由于它们基于下述的假设:内部网是安全可靠的,所有的威胁都来自网外。因此,他们防外不防内,难以实现对企业内部局域网内主机之间的安全通信,也不能很好的解决每一个拨号用户所在主机的安全问题,而大多数个人上网之时,并没有置身于得到防护的安全网络内部。 [来源:http://think58.com]
3.应用程序网关本质上是另一种类型的代理服务器。通信时,内部客户首先和应用程序网关建立连接,应用程序网关确定这个连接是否被允许,如果允许的话再和目的计算机建立连接。因此,所有的通讯都需要经过两个连接——客户到网关的连接和网关到目的主机的连接。应用程序网关会监视所有的传输,根据规则决定是否转发他们。和代理服务器一样,外面的世界看到的只是应用网关的IP地址,这就有效地保护了内部网络。
2.1.3 防火墙的局限性
虽然防火墙按照我们的要求严格地把守着网络安全的大门,但它也不是万能的,也存在着一些局限性。比如它不能防范不经过它的攻击,也就是可以寻找一条小路绕开防火墙把守的大门。例如,如果允许从受保护的网络内部向外拨号,一些用户就可能形成与Internet的直接连接。另外,防火墙很难防范来自于网络内部的攻击以及病毒的威胁。它更不可能防止靠欺骗来获得某些可以破坏安全的信息的社会工程的攻击。
〖本文来自:计算机毕业网 〗
1.数据过滤钩子驱动模块
利用在Microsoft Windows 2000 DDK中介绍的Filter-Hook Drive来实现对所有进出接口的数据进行过滤。主要有以下五个步骤:
① 建立内核模式驱动Filter-Hook Drive;
② 取得指向IP Filter Driver的指针; think58.com
[资料来源:http://www.THINK58.com]
③ 利用步骤2得到的指针,发送特殊的IRP来安装过滤函数;
④ 过滤数据;
⑤ 结束过滤,撤消过滤函数。
2.用户操作界面程序模块
该模块主要就是用户所看到的程序界面,是用户和防火墙进行对话的对象。它负责管理用户定义的过滤规则,与数据过滤钩子驱动模块进行通信。主要利用过滤钩子驱动模块应用输出接口提供的四个IOCTL来实现相应功能:START_IP_HOOK(注册过滤函数);STOP_IP_HOOK(撤消过滤函数);ADD_FILTER(安装新的过滤规则)CLEAR_FILTER(清除所有规则) think58.com
[版权所有:http://think58.com]
4.2 过滤钩子驱动的实现
4.2.1 创建内核模式驱动
首先过滤器钩子驱动程序设置过滤器钩子回调函数,它是这类驱动程序的主体,通过系统提供的IP 过滤器驱动注册这些过滤器钩子回调函数,随后,IP 过滤器驱动就可以使用过滤器钩子决定如何处理传入或传出的数据包.所注册的过滤钩子是用PacketFilterExtensionPtr数据类型定义的。以下是该数据类型原型:
tyfedef PF_FORWARD_ACTION
(*PacketFilterExtensionPtr)(
IN unsigned char *PacketHeader, //封包的IP头指针
IN unsigned char *Packet, //具体封包数据,不包括头指针
IN unsigned int PacketLength, //具体封包数据大小,不包含头指针
IN ubsigned int RecvInterfaceTndex, //接收数据的接口适配器编号
IN unsigned int SendInterfaceIndex , //发送数据的接口适配器编号
IN IPAddr RecvLinkNextHop, //接收数据包的适配器IP地址
IN IPAddr SendLinkNextHop //发送数据包的适配器IP地址
本文来自think58
[资料来源:THINK58.com]
);
PacketHearder参数指向的数据通常定义为IPHearder结构,它提供了封包的详细信息。
Typedef struct IPHearder
{
UCHAR iphverLen; //版本号和头长度
UCHAR ipTOS; //服务类型
USHORT ipLength; //封包总长度,即整个IP报的长度
USHORT ipID; //封包标适,唯一标识发送的每一个数据报
USHORY ipFlags; //标志
UCHAR ipTTL; //生存时间
UCHAR ipProtocol; //协议,其中TCP(6)、UDP(17)、ICMP(1)
USHORT ipChecksum; //效验和
ULONG ipSoruce; //源IP地址
ULONG ipDestination; //目的IP地址
}IPPacket;
Packet参数指向去掉IP头之后的数据报,开头是一个TCP头、UDP头、ICMP头,这都需要根据IP头的ipProtocol域确定。
TCP头:〖本文来自:计算机毕业网 〗
typedef stuct_TCPHeader [资料来源:THINK58.com]
{
USHORT sourcePort; //源端口
USHORT destinationPort; //目的端口
ULONG sequenceNumber; //seq序号
ULONG acknowledgeeNumber; //ack序号
UCHAR dataoffset; //数据指针
UCHAR flags; //标志
USHORT windows; //窗口大小
USHORT checksum; //校验和
USHORT urgenPointer; //紧急指针
}TCPHeader;
UDP头:
Typedef stuct_UDPHeader
{
USHORT sourcePort; //源端口号
think58好,好think58
USHORT destinationPort; //目的端口号
USHORT len; //封包长度
USHORT checksum; //校验和
}UDPHearder;
think58.com