请问spi能对icmp包过滤么,就是拒绝ping的数据包,我已经实现了对一般的tcp/ip数据包的过滤,但数对icmp好像没有办法,请问能不能实现?如过可以请问如何实现,最好有源代码,谢谢大家拉

解决方案 »

  1.   

    当然可以建议你看看xfilter源代码
      

  2.   

    ICMP属于ip层的,当然可以,你可以参考:
    http://www.vckbase.com/document/viewdoc.asp?id=643
      

  3.   

    不可以,也不可能!!SPI本身就是Win32层的东西,而且属于“拦截Winsock调用”的范畴。换句话说,SPI只能控制本机程序对WINSOCK的使用,却绝对不能控制别的计算机发过来的数据包。希望控制-拦截-过滤别人主动发过来的包,只能使用底层技术-驱动。拦截和过滤ICMP包,只能在驱动层进行(控制可以放在Win32层)。上面几位朋友,显然是混淆了“拦截Winsock调用”和“拦截Icmp包”的区别!这是两个完全不同的概念!期望拦截ICMP包,使之能够拒绝PING的数据包,可以使用:
    1.IpFltDrv技术;
    2.NDIS技术
      

  4.   

    SPI的服务提供者位于WS2_32.DLL下层,而windows通信程序都要调用WS2_32.DLL中的函数(不包括写驱动的),所以用SPI可以实现包过滤。请参阅如下文章:
    http://www.vckbase.com/document/viewdoc.asp?id=643
      

  5.   

    xfilter1.0就是用的SPI, 并不能作到过滤ICMP,它的书里面也讲了。2.0用的是SPI和NDIS的结合,所以可以做到。
    用TDI,NDIS是比较通用的途径。
      

  6.   

    to: kingzai(kingzai)
    “用TDI,NDIS是比较通用的途径”你似乎说错了吧.TDI能够拦截ICMP包???????????呵呵
      

  7.   

    spi不能拦截ICMP的,要在NDIS上拦截,
    ICMP在系统里面的处理方式与TCP/IP不同,这种包直接在系统的内核里面就处理掉了
    也就是在NDIS上处理掉了,并不向应用程提交,所以huangbeyond(校园人渣) 的说法是
    完全正确的,向高手学习
      

  8.   

    sorry,我搞错了,谢谢各位的帮助~
      

  9.   

    TDI的确不可以,我上面说的有错,抱歉。 
    因为TDI Filter Driver 属于 Upper Driver,位于 TcpIp.sys 之上,这就意味着由 TcpIp.sys 接收并直接处理的数据包就不会传送到上面,从而无法过滤某些接收的数据包,典型的就是ICMP,ICMP的应答包直接由TcpIp.sys生成并回应
      

  10.   

    如果仅仅是期望拦截ICMP包,而且只限于在2000/XP系统下实现的话,
    我推荐使用IpFltDrv技术,它比NDIS容易多了,而且实现起来非常非常简单。至于“看看NDIS的Passthru例子”,那就不是很简单的事情了,要花费很大的时间和精力的。
      

  11.   

    http://www.codeproject.com/useritems/drvfltip.asp?target=firewall
    这个例子比较好,