Cloudy_hanji
驱动牛犊
驱动牛犊
  • 注册日期2005-01-06
  • 最后登录2005-08-08
  • 粉丝1
  • 关注0
  • 积分56分
  • 威望10点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:4745回复:5

根据<<给刚刚开始作NDIS开发的一点经验 >>和<<基于IMD的包过滤防火墙原理与实现>>两启篇文章写了一个过滤ICMP包SYS    

楼主#
更多 发布于:2005-03-21 17:29
根据<<给刚刚开始作NDIS开发的一点经验 >>和<<基于IMD的包过滤防火墙原理与实现>>两启篇文章写了一个过滤ICMP包SYS,以此还可以过滤通过网络层的数据包
这里关键是我的网卡在PTReceive()函数里用NdisGetReceivedPacket()函数根本得不到任何数据包,所以看了<<给刚刚开始作NDIS开发的一点经验 >>后才知道应该怎么做。
    
附件名称/大小 下载次数 最后更新
2005-03-21_protocol.c (38KB)  455

最新喜欢:

lipengyilipeng...
cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-21 19:03
    感谢Cloudy_hanji兄的分享,小弟也正在学习中间层驱动,有个问题请教一下,我想不向上层协议驱动暴露网卡,直接把数据取出来传给应用程序.是不是不注册微端口就可以了.另外使用ProtocalReceive和ProtocalReceivePacket哪个函数能更快的接收数据呢,我不做任何处理,只是想把进入的所有包都存下来?多谢先!
 :D :D :D
sky
Cloudy_hanji
驱动牛犊
驱动牛犊
  • 注册日期2005-01-06
  • 最后登录2005-08-08
  • 粉丝1
  • 关注0
  • 积分56分
  • 威望10点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-21 20:38
   感谢Cloudy_hanji兄的分享,小弟也正在学习中间层驱动,有个问题请教一下,我想不向上层协议驱动暴露网卡,直接把数据取出来传给应用程序.是不是不注册微端口就可以了.另外使用ProtocalReceive和ProtocalReceivePacket哪个函数能更快的接收数据呢,我不做任何处理,只是想把进入的所有包都存下来?多谢先!
 :D :D :D


我个人认为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反正我只能这样才能收到数据包。
如果有什么地方说错了,请大家指教,我也是初学者,大家共同努力学习
birdtomaster
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2008-09-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-23 10:51
根据<<给刚刚开始作NDIS开发的一点经验 >>和<<基于IMD的包过滤防火墙原理与实现>>两启篇文章写了一个过滤ICMP包SYS,以此还可以过滤通过网络层的数据包
这里关键是我的网卡在PTReceive()函数里用NdisGetReceivedPacket()函数根本得不到任何数据包,所以看了<<给刚刚开始作NDIS开发的一点经验 >>后才知道应该怎么做。
    


如何拦截发送的ICMP,或者说如何拦截发送的包?也象拦截接受的那样家代码好像不行,谢谢!
Cloudy_hanji
驱动牛犊
驱动牛犊
  • 注册日期2005-01-06
  • 最后登录2005-08-08
  • 粉丝1
  • 关注0
  • 积分56分
  • 威望10点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-23 22:40
[quote]根据<<给刚刚开始作NDIS开发的一点经验 >>和<<基于IMD的包过滤防火墙原理与实现>>两启篇文章写了一个过滤ICMP包SYS,以此还可以过滤通过网络层的数据包
这里关键是我的网卡在PTReceive()函数里用NdisGetReceivedPacket()函数根本得不到任何数据包,所以看了<<给刚刚开始作NDIS开发的一点经验 >>后才知道应该怎么做。
    


如何拦截发送的ICMP,或者说如何拦截发送的包?也象拦截接受的那样家代码好像不行,谢谢! [/quote]


这上面是关于接收ICMP包时拦截的啊,如果你要阻止发送的话就要到MPSend函数里在调NDISSend之前做过滤啦!
lornwolf
驱动牛犊
驱动牛犊
  • 注册日期2011-03-28
  • 最后登录2011-03-28
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2011-03-28 10:35
Re:根据&lt;&lt;给刚刚开始作NDIS开发的一点经验 &gt;&gt;和&lt;&lt;基于IMD的包过滤防火墙原理与实现&amp;g ..
好么,完全是抄袭我的代码(以前的Songzh),连注释都不带改的。
游客

返回顶部