很长时间不写东西 ,写一点点
Win32下监视网卡有以下几个办法
1. Raw Socket
2.Socket SPI(LSP)
3.NDIS Hooking
4.其他杂办法 Firewall Hooking....
其中值得注意的是3
以前商业firewall一般是NDIS Hooking.
基本原理如下:
NDIS其实是一个NIC driver和Protocol driver的衔接人
它以链表的形式保持了一系列NIC和protocol的数据结构
数据结构里包含这些driver 注册给他们的处理函数.(所有driver都是提供一系列的处理函数等别人call)
你只要能hook到他们 你就在关键时刻获得了硬件或者协议的通知(很powerful啊)
ndis hooking就是调用protocol driver才call的NdisRegisterProtocol
获得那个handle.从而找到NDIS保存的一系列driver的handler.替换他们为自己的.就hook完成了
但是,这并不是最低级 最DNA级别的方法
题目是 "某一特定网卡"
既然是 某一特定网卡.最低级,最底层的方法是 监视对系统 port IO和memory的access.
这个方法原理极其简单.比ndis hooking 简单,强力得多。但却不具备NDIS hooking的通用性。一次编程 只能对某一特定NIC有效。要想监视thinkpad 的 e100,VPC 的dc211x4.你得又写一次代码.看一次databook.
比如,以RTL8139来说 你可以从 0xec30(由PCI总线配置决定) 读DWORD作为物理地址,进而来获得网卡接收的数据.
从0xec20,0xec24,0xec28,0xec2c里的值为物理地址进而 获得其他程序发送的数据.
一切都是那么的清爽 简单. 如同 20年前 DOS下 进行的编程.简约.直观。
完全不用关心是什么操作系统, Win9x,Win2K.Linux,dos
看看端口 什么都清楚了~~~
杨家坪毛线沟九占人