怎么在数据包发出之前修改包的源地址?比如我的机子的地址是192.168.0.1  我想发的包的源地址变为 192.168.5.4怎么办?请大虾指教!

解决方案 »

  1.   

    有几种方法:
    1 用原始套结字;但这种方式受操作系统的限制,好像windowsxp已经禁止了原始套结字发送假ip;
    2 通过自己写驱动可以做到,协议驱动就可;
    3 使用wincap组件,这个组件是微软在协议驱动层上提供的类库,直接调用它的函数应该就可以。
      

  2.   

    提供两个方法:
    1. HOOK API, Hook mssock.dll 的连接、发送和接收函数,然后自己实现,改变目标地址。
    2. Arp欺骗,可以用wincap发送arp欺骗包,让机器将主机192.168.5.4 的MAC地址绑定到192.168.0.1,这样发送到192.168.0.1的数据实际上都发送到主机192.168.5.4 了。
      

  3.   

    用Winpcap,想发什么包发什么包,不过MAC、IP头,TCP/UDP头都要自己填充,checksum要自己算
      

  4.   

    4楼的回答很好,因为我也想问这个改变目标地址的方法.不过你说的方法路游器能过滤掉吗?另外8楼说的checksum怎么算?
      

  5.   


    USHORT checksum(USHORT* buffer,int size)   
    {   
    unsigned long cksum=0;   
    while(size>1)   
    {   
    cksum+=*buffer++;   
    size-=sizeof(USHORT);     
    } if(size)   
    {   
    cksum+=*(UCHAR*)buffer;     
    }   
    cksum=(cksum>>16)+(cksum&0xffff);   
    cksum+=(cksum>>16);      return (USHORT)(~cksum);