说白了就是一个NAT
我已经用Pcap实现了一个
但是苦于Pcap只能抓包不能拦截
所以用它做网关的时候我必须用防火墙禁用网关自身的所有通信
现在考虑到还是用拦截-修改-转发这样的方式比较好
简单描述一下就是:
1、网卡收到数据包
2、符合规则就放入到我的Buff中,不交给上层,不符合规则就原样交给上层
3、我的程序负责从Buff中读取数据包根据相关规则修改
4、通过指定的网卡直接发送出去 我看了《NAT在NDIS中间层驱动中的实现》一文
由于对NDIS不是很懂,而且那篇文章也没有给出全部源码我要实现:
1、告诉操作系统在网卡收到包的时候先调用我的过滤函数,次函数把符合一定规则的数据包放到一个缓冲区中而不转交给上层,不符合的直接交给上层。
2、我另外开一个线程或者进程对上述缓冲区中的包按照一定规则进行修改。并且直接通过指定的网卡(由路由或者NAT表确定)发送出去。现在想问问我的想法能实现吗?实现起来复杂吗?
有没有一个类似LibPcap的开发库可以直接使用?
或者那位大侠有《NAT在NDIS中间层驱动中的实现》的源码或者类似源码放出我参考一下?

解决方案 »

  1.   

    有个工具wirsshark,是开源的,你可以从网上下载它的源码,参考.
      

  2.   

    用spi也可以 ,比ndis简单一点
      

  3.   

    对,用SPI相对比较简单。而且网上的例子也挺多的
      

  4.   

    是啊
    winPcap只能抓包而已你是说修改所有信息
    还是只修改 信息呢
    如果是所有信息包括ip头部
    那只有用驱动了
    如果是后者
    可以考虑用函数钩子
    截获tcp udp包 然后修改转发
      

  5.   

    spi只能实现应用层的捕获,而且我在做的时候似乎总是和isa客户端冲突,很奇怪,别的防火墙就没有关系
      

  6.   

    用IMD中间层驱动或TDI过滤驱动
      

  7.   

    IMD更下层,不能获得与包相关的进程信息,TDI更上层,可以知道是与哪个进程相关的