阅读:2472回复:10
关于Passthru的问题?
想用Passthru做过滤,有几个疑问:
1、Passthru能否截获数据包,在DDK里好象说do nothing。 2、Passthru是在那个函数内看到IP包的包头信息,我想数据还没有传到IP层,能否得到mac地址,源IP地址,目的IP地址等。怎样得到 3、本人想写一个规则来过滤,这个规则为应用程序,怎样和驱动通信呢? |
|
沙发#
发布于:2002-12-21 14:16
1、绝对可以
2、这些都可以得到,不过你要对 NDIS_PACKET 结构有一定的了解 3、建议参考 XP 版的 Passthru,里面已经很好的实现了这个接口,你只要自定义一些控制代码分别处理就可以了 |
|
板凳#
发布于:2002-12-21 16:50
1、绝对可以 加10分! |
|
|
地板#
发布于:2002-12-22 08:49
感谢edust!!!!!!!!!
|
|
地下室#
发布于:2002-12-22 14:24
呵呵,好啊,有分拿就再发挥一点:
(1)Passthru 这个 IMD 示例只是把经过的包重新描述之后仍旧送往既定目的地,所以文档里说它“do nothing”,你当然要改写它以达到自己的目的了,它处在中间层,一般的任务都可以做到 (2)经过 IMD 的包中包括 MAC 头,IP 头,TCP 头,TCP 数据(对于一个 TCP 包),所以这些都可以得到,关于 NDIS_PACKET 的结构教程跟讨论,我推荐一篇东西,非常好! http://www.pcausa.com/resources/ndispacket.htm (3)首先你把 XP 版的 Passthru 看一下,那个框架已经很完善了,之后再参考一下《Windows WDM 设备驱动程序开发指南》里面的相关内容,比如 CTL_CODE 的定义方法,交换数据的几种方法之类的东西。 |
|
5楼#
发布于:2002-12-22 14:36
呵呵,好啊,有分拿就再发挥一点:
(1)Passthru 这个 IMD 示例只是把经过的包重新描述之后仍旧送往既定目的地,所以文档里说它“do nothing”,你当然要改写它以达到自己的目的了,它处在中间层,一般的任务都可以做到 (2)经过 IMD 的包中包括 MAC 头,IP 头,TCP 头,TCP 数据(对于一个 TCP 包),所以这些都可以得到,关于 NDIS_PACKET 的结构教程跟讨论,我推荐一篇东西,非常好! http://www.pcausa.com/resources/ndispacket.htm (3)首先你把 XP 版的 Passthru 看一下,那个框架已经很完善了,之后再参考一下《Windows WDM 设备驱动程序开发指南》里面的相关内容,比如 CTL_CODE 的定义方法,交换数据的几种方法之类的东西。 看了Passthru,但不是很懂。不知IMD在那儿重新描述包,在那儿发送。 在notifyob 中是用那个函数来和驱动通信的? [编辑 - 12/22/02 by arkzhu] |
|
6楼#
发布于:2002-12-24 09:49
看了Passthru,但不是很懂。不知IMD在那儿重新描述包,在那儿发送。 下面针对 XP 版的 Passthru,2000 版的也插差不多: 发送: MPSendPackets PtSendComplete 接收: PtReceive PtReceiveComplete 接收: PtReceivePacket MPReturnPacket |
|
7楼#
发布于:2002-12-24 09:51
在notifyob 中是用那个函数来和驱动通信的? 那个 NotifyObject 没看过,不过你可以不用它那个,把它去掉之后写一个 Win32 App 跟 Driver 通讯。 |
|
8楼#
发布于:2002-12-27 11:22
引用: 1. MPReturnPacket起什么作用?在什么情况下起作用? 2. PtReceivePacket调用结束之后,是否调用PtReceiveComplete? |
|
|
9楼#
发布于:2002-12-27 13:05
1. MPReturnPacket起什么作用?在什么情况下起作用? 如果上层 Protocol 保留了包的所有权,那么你就要在 PtReceivePacket 中返回 1 告诉下层 Adapter,之后等上层 Protocol 处理完之后它回调用 MPReturnPacket 通知你。 |
|
10楼#
发布于:2002-12-27 13:07
2. PtReceivePacket调用结束之后,是否调用PtReceiveComplete? 对应关系是这样的: 接收: |
|