阅读:1479回复:8
怎么接收网络数据包到驱动程序?请高手指导(特急)
我想知道当网络数据包到网卡后如何变成IRP包的??
然后我怎么才能得到我想要的数据? 比如http包 udp包 请各位高手不吝赐教!!! |
|
沙发#
发布于:2005-06-27 13:47
简单讲,网络数据到达网卡后,miniport driver调用NdisMIndicateReceivePacket通知tcp/ip协议,tcpip.sys,是ndis protocol driver,同时又是tdi server,如果tdi client(对于windows系统,这时候client一般是afd.sys),调用了TdiReceive函数,或者注册了Receive的回调函数,就会被调用,此时就是Irp的格式了,你可以安装一个tdi filter,就可以得到象http包,udp的包
|
|
板凳#
发布于:2005-06-27 17:48
谢谢 那么我得到的数据是不是就是完整的数据包?比如http包。那么我是否就可以使用共享内存与应用程序交互??在驱动中开辟共享内存的时机又在哪里才能进入应用程序的上下文呢?
一般的过滤驱动程序可以得到网络数据包吗? 再次感谢zhaock和各位高手 |
|
地板#
发布于:2005-06-27 19:02
如果想处理http这种数据包,写个代理就好了,tdi filter太麻烦了
|
|
地下室#
发布于:2005-06-29 10:38
我的意思是在ndis驱动中网络包我在哪里可以得到?
如果是irp包的话,怎么还原成原始的封包呢?? 谢谢~~! |
|
5楼#
发布于:2005-06-29 10:46
对于ndis,你可以做imd 驱动,就可以得到网络包。但ndis看不到irp。
|
|
6楼#
发布于:2005-06-29 10:52
imd驱动是什么??
ndis不是可以截获网络包吗?他截的是什么包?我可以利用吗? |
|
7楼#
发布于:2005-06-29 11:17
imd驱动你看一下ddk ndis的帮助,具体的例子程序是passthru,做防火墙一般用它来做
|
|
8楼#
发布于:2005-06-29 13:00
微软的passthru例子
|
|