phoenix防火墙原理
应用层原理
Winsock 2 服务提供者接口(SPI)为应用程序提供服务。
SPI的体系结构为:
(协议层次)
Winsock 2 API -> WS2_32.DLL -> SPI -> Transport ,Layered Protocol, SPI -> BaseProtocol
(Winsock 2 结构)
Winsock 2 Application -> Winsock 2 API -> Winsock 2 DLL -> Winsock 2 Transport Function SPI -> Transport Service Provider
分层服务提供者将自己安装到Winsock目录中的基础提供者上面,截取来自应用程序的 Winsock API 调用。
用户创建套接字时,套接字创建函数会在Winsock目录中寻找合适的协议,然后调用此协议的提供者导出的函数完成各种功能。
安装LSP 的过程是:
1、先安装一个分层协议,然后安装协议链; WSCInstallProvider
2、重新为目录排序 WSCWriteProviderOrder
移除LSP 使用 WSCDeinstallProvider
具体编写 LSP 的过程是,导出 WSPStartup函数,在这个函数里面修改 WSPPROC_TABLE 指向的 Winsock 2 API 函数的地址,指向自己的函数.
驱动层原理
NDIS 网络驱动程序为网络驱动抽象了网络硬件,为上层驱动抽象了管理硬件的下层驱动。
Transport Driver Interface (TDI)
|
NDIS Interface
|
NetCard
中间层驱动位于微端口驱动和传输驱动之间,是基于链路层和网络层之间的驱动。
中间层驱动的主要用途之一是过滤网络封包,它能够截获所有的网络数据包。
PassThru 是 DDK 自带的中间层例子,
在 PassThru中,有 4 处封包是可以截获的。
MPSend
MPSendPackets
PTReceive
PTReceivePacket
获取网络数据包的函数是 NdisQueryBufferSafe ,网络数据包在系统内部使用 NDIS_BUFFER 类型的链表存储,取出数据包后根据过滤规则检查,允许的就推进到下一层,不允许的直接丢弃。
-----------------