前言
在WIN7中可以使用 NDIS6
做网络过滤,在 NDIS6
中提供了一种 LightWeight Filter
的框架,
我们这里使用WDK源码中 src -> network -> ndis -> filter
工程作为基础。
修改device.c文件
这个文件主要是处理与应用层通讯的功能,我们可以在 FilterDeviceIoControl
函数中处理
自定义的控制码功能,使用时需要把原有的控制码处理程序删除。
修改filter.h文件
在文件的开头我们可以找到如下一系列宏定义,我们使用的是 NDISLWF
框架(source中定义),
所以只需要修改 NDISLWF
定义的内容,设备名称、服务名称、唯一标识都需要修改
1 |
修改filter.c文件
在 FilterSendNetBufferLists
函数中,处理发送数据包的功能。原函数的代码主要处理
调试和跟踪发送的数据包信息,如果我们不处理这些功能,就可以把相关代码全部删除
1 | VOID FilterSendNetBufferLists( |
在 FilterReceiveNetBufferLists
函数中,处理接收数据包的功能。与发送原函数的类似,
代码主要处理调试和跟踪接收的数据包信息,同样也可以把相关代码全部删除
1 | VOID FilterReceiveNetBufferLists( |
数据包解析函数
与在 NDIS5
中定义的函数相似,但是数据包存储的格式有所变化
1 | PKGFLT_STATUS AnalysisPacket(PMS_FILTER pFilter, PNET_BUFFER_LIST CurNbl, BOOLEAN bRecv) |
获取数据包长度的函数
1 | ULONG GetOneNblLen(IN PNET_BUFFER_LIST CurNbl) |
获取数据包内容的函数
1 | NTSTATUS GetOneNblData(IN PNET_BUFFER_LIST CurNbl, OUT PUCHAR Buffer, IN ULONG BufLen) |
修改INF文件
在 ndislwf.inf
中,修改如下项
1 | ;修改MS_NdisLwf设备名称 |
1 | ;修改ndislwf.sys驱动文件名 |
1 | ;修改NdisLwf服务名称 |