阅读:4809回复:5
根据<<给刚刚开始作NDIS开发的一点经验 >>和<<基于IMD的包过滤防火墙原理与实现>>两启篇文章写了一个过滤ICMP包SYS
根据<<给刚刚开始作NDIS开发的一点经验 >>和<<基于IMD的包过滤防火墙原理与实现>>两启篇文章写了一个过滤ICMP包SYS,以此还可以过滤通过网络层的数据包
这里关键是我的网卡在PTReceive()函数里用NdisGetReceivedPacket()函数根本得不到任何数据包,所以看了<<给刚刚开始作NDIS开发的一点经验 >>后才知道应该怎么做。 |
|
最新喜欢:lipeng... |
沙发#
发布于:2005-03-21 19:03
感谢Cloudy_hanji兄的分享,小弟也正在学习中间层驱动,有个问题请教一下,我想不向上层协议驱动暴露网卡,直接把数据取出来传给应用程序.是不是不注册微端口就可以了.另外使用ProtocalReceive和ProtocalReceivePacket哪个函数能更快的接收数据呢,我不做任何处理,只是想把进入的所有包都存下来?多谢先!
:D :D :D |
|
|
板凳#
发布于:2005-03-21 20:38
感谢Cloudy_hanji兄的分享,小弟也正在学习中间层驱动,有个问题请教一下,我想不向上层协议驱动暴露网卡,直接把数据取出来传给应用程序.是不是不注册微端口就可以了.另外使用ProtocalReceive和ProtocalReceivePacket哪个函数能更快的接收数据呢,我不做任何处理,只是想把进入的所有包都存下来?多谢先! 我个人认为NDIS有三种方式: 1. Miniport NIC drivers:微端口网卡驱动,位于最底层,直接操纵网卡并且对高层驱动提供接口。 2. Intermediate drivers:IMD中间层驱动,这就是今天的主角,位于1和3之间,具体的作用下面就会介绍。 3. Protocol drivers:高层协议驱动,俗称为TDI(传输驱动程序接口),高于前面两层,直接面向用户级, 为用户提供网络服务,也就是绝大多数程序所用到的网络接口。 我想你的意思可能是只需要用到第三种方式而不是用IMD的方法。 还有关于是用ProtocalReceive还是用ProtocalReceivePacket我认为是应该根本不同网卡来说的。引用<<基于IMD的包过滤防火墙原理与实现>>作者说的“在passthru中,接收数据报是用protocol.c文件中的PtReceive和PtReceivePacket这两个函数来实现的。根据微软的解释,微软建议接收包用PtReceivePacket函数,因为可以得到更高的效率,然而,为了向下兼容,也保留了PtReceive函数给老的网卡使用。所以,在一块网卡上,只可能有一个函数在工作,这要取决于你的网卡型号了。巧的是,我的两台机器的网卡应用的函数正巧不一样。同样是IBM的机器,一台P4 1.5G的机器的网卡是Realtek RTL8139(A) PCI Fast Ethernet Adapter,另外一台P4 2.0G的机器的网卡是Intel(R) PRO/100 VE Network Connection,其中Realtek网卡用的是PtReceive来接包,而Intel的网卡是用PtReceivePacket来接包”。不过我个人感觉一般还是用PtReceive反正我只能这样才能收到数据包。 如果有什么地方说错了,请大家指教,我也是初学者,大家共同努力学习 |
|
地板#
发布于:2005-03-23 10:51
根据<<给刚刚开始作NDIS开发的一点经验 >>和<<基于IMD的包过滤防火墙原理与实现>>两启篇文章写了一个过滤ICMP包SYS,以此还可以过滤通过网络层的数据包 如何拦截发送的ICMP,或者说如何拦截发送的包?也象拦截接受的那样家代码好像不行,谢谢! |
|
地下室#
发布于:2005-03-23 22:40
[quote]根据<<给刚刚开始作NDIS开发的一点经验 >>和<<基于IMD的包过滤防火墙原理与实现>>两启篇文章写了一个过滤ICMP包SYS,以此还可以过滤通过网络层的数据包 如何拦截发送的ICMP,或者说如何拦截发送的包?也象拦截接受的那样家代码好像不行,谢谢! [/quote] 这上面是关于接收ICMP包时拦截的啊,如果你要阻止发送的话就要到MPSend函数里在调NDISSend之前做过滤啦! |
|
5楼#
发布于:2011-03-28 10:35
Re:根据<<给刚刚开始作NDIS开发的一点经验 >>和<<基于IMD的包过滤防火墙原理与实现&g ..
好么,完全是抄袭我的代码(以前的Songzh),连注释都不带改的。 |
|