一. 实验目的
1. 初步掌握,了解网络编程
2. 了解防火墙的各种形式
3. 写一个简单的防火墙(本实验选用 SPI 实现,但未完成)
设计要求:
1)检查传入数据包中的源地址或目标地址及其他信息,然后阻止数据包通过或者允许
它通过。
2)通过匹配 IP 数据头来确定是否允许通信通过接口。
3)将所有传出的通信都记录在状态表中。在连接通信返回到接口时,将检查状态表以
确保这些通信来源于此接口。
4)实现应用程序筛选器功能,允许用户分析特定应用程序的数据流并且提供应用程序
特定的处理。
5)客户可制定特定的安全策略。
6)设计美观易用的图形界面。
4.由于难度问题,本次实验我只完成了截获数据封包项功能。
二. 相关知识
1)。防火墙的实现方法:
----------
|应用层|------exe 程序,比如 ie
----------
|表示层|-------ws2_32.dll
------ ----
|会话层|-------SPI
----------
|传输层|-------TDI(不能截获 ICMP 等协议的数据)
----------
|网络层|-------NDIS(可以截获所有的网络数据)
----------
|链路层|-------设备驱动
----------
|物理层|-------网卡
----------
如上图,实现防火墙的方法有很多种,比如在表示层用一些 API 函数,在会话层用
WINDOWS 提供的标准的 SPI 方式实现,传输层和网络曾则可以通过写驱动实现。较常用
的是用 HOOK API,或 SPI,或写 NDIS 驱动三种方法。
比较一:SPI 相对 HOOK API 方式要规范多了,而且功能也更强大。
比较二:传输层所写的驱动(以及以上的层的实现)不能截获 ICMP 等协议的数据,而网
络层实现则可以截获所有的数据报。
比较三:API,SPI 只在 user model 实现,而 TDI,NDIS 则在 kernel model 中。
比较四:实现防火强最标准最规范最强大的是在 NIDS 写中间驱动程序实现,但也相对复
杂。(比以上的层)
比较五:在链路层和物理层实现据说太过复杂,并无研究过。