基于 IMD 驱动 ARP 防火墙设计 (windows 平台 )
IMD 驱动认识
当 IMD 注册的时候,会同时注册协议和端口,他们分别代码着 protocol_block,miniport_block
而 protocol_block 中的 bindinghanle 代码着 IMD 协议驱动和下层 nic 的绑定关系。 Bindinghanle 其实是一个 open_block 结构,里面存有下层 nic 的回调,例如 send 函数,而 miniport_block 结构中则存有上层协议驱动中回调函数,例如 receive,, 所以调用 indicatereceive (miniport_block,xxx ) 时其实就是调用这个结构中的 receive 函数。当然,如果只有一个 IMD 的话,而且上层协议是 tcp/ip 的话,这个 receive 函数就应该是在 tcpip.sys 中实现,所以按我的理解就是上层 tcpip.sys 对应的 open_block 结构中就有 imd 驱动的 miniport 注册的回调。总体先可以这样理解,因为 WINDOWS 下,还有个 NDIS 。 SYS 驱动协同管理的,挺复杂的,我用 WINDBG 看了下,上面对应的结构中的一些回调函数的地址是 NDIS 。 SYS 空间。
其中 passthru 中的 adapter 结构中的 bindingt 和 minporthandle 和上面的 open_block , miniport_block 分别对应
这鸟玩意资料少,只能暂时做此理解。
程序分为应用层和驱动层 :应用层主要是一个 dll ,负责发送过滤控制码和接收数据过滤警报,驱动层主要是负责判断数据的合法性,然后向应用层发送通知
防火墙主要功能分为三块 :
1. 防止本机被欺骗(接收错误的网关 MAC )
2. 防止 IP 冲突
3. 防止本机在网关的 MAC 记录被窜改
具体代码实现:
1. 防止本机被欺骗最重要的是判断出发送方的 ip 为网关时,识别出对应的数据包中的 MAC