现在要实现数据包拦截修改转发功能,不知有哪几种实现方式现在我想到的有1、用网络安全开发包,类似winpcap之类的吧,但有一个问题,如果程序写好,在主机上不安装winpcap环境,程序能不能正常工作?是不是主机也必须安装相应的开发包。如果要实现数据包拦截修改转发功能,用什么开发包好?至少winpcap是不能实现的。2、实在不行只能用防火墙拦截机制和raw socket 之类的编写了,但也没有思路希望高手指点!程序要在windows 2003上实现.

解决方案 »

  1.   

    2003不能用raw。完成这种功能方法很多。
      

  2.   

    winpcap和raw socket 都不能拦截。拦截和 嗅探是两个概念。也就是你只能查看 数据包的一个副本,正本已经发出去或者接收完了。
      

  3.   

    挂接api网络函数
     sendv
    revice
    等等这样才能修改网络包
    wincap是监听
      

  4.   

    简单点就是 recv , send 这两个api拦截。
    WebBrowser用这两个函数不错。
      

  5.   

    可以从NDIS驱动下手,做一个驱动,拦截到数据包进行修改转发功能
      

  6.   

    还要实现一种功能,考虑了好久,还是不成熟:
    在内网有很多机器,现要把所有数据流都转向内网一台机器A上,再由A修改后转发到外网,但要保证回来的数据包还要分别发往原来各自的源地址。也就相当于一个NAT功能,所以要考虑数据包的拦截、修改、转发。
    我原来的思路是在底层对到达网卡的数据包拦截,把源IP地址改为A的IP地址,目的IP不变,重新计算校验和,转发出去。同时在A机器上维护一张Hash表,记录[srcIP,hash(destIP,srcPort,destPort,type)],其中type表示IP包中下一载荷的类型,如TCP、UDP。回来的数据包根据这张Hash表找到原来的srcIP.原来想只处理TCP和UDP。
    但明显存在很多问题:
    1、ICMP、SSL之类的数据包怎么处理
    2、内网连接一个地址,但该地址不存在,发送回一个ICMP目标不可达报文,那怎么办,这个ICMP报文怎么发回原来的主机?
    3、有此收、发在不同端口的程序,比如FTP又怎么处理NAT功能的确很难实现,请问各位有没有解决方案?
      

  7.   

    很简单,NDIS下有现成的例子只编译就可以用了!
    也可以用HOOK SOCKET API实现!