在vc程序中怎样获取icmp差错报文,以及怎样得到ip的原始包,高手帮忙,多谢!

解决方案 »

  1.   

    1.通过socket编程获取IP层以及IP层以上的数据包(当然就包括ICMP数据了)。
    2.通过更低层的驱动获取网卡数据,这样就连更底层的数据都可以获取了,更不用说IP层了。
    以上方法在网上都有不上范例,可自己去找。
      

  2.   

    sniffer raw package,then analyse ICMP and IP protocal.,you can use winpcap.
    typedef struct _ICMP_HEADER  //定义ICMP首部
    {
    BYTE  i_type; //8位类型
    BYTE  i_code; //8位代码
    USHORT i_cksum; //16位校验和
    }ICMP_HEADER;
    typedef struct _IP_HEADER
    {
    __u8            h_lenver;//4位首部长度+4位IP版本号
        __u8            tos;//8位服务类型TOS
        __u16           tot_len;//16位总长度(字节)
        __u16           id;//16位标识
        __u16           frag_off;//3位标志位
        __u8            ttl;//8位生存时间 TTL
        __u8            protocol;//8位协议 (TCP, UDP 或其他)
        __u16           check;//16位IP首部校验和
        __u32           saddr;//32位源IP地址
        __u32           daddr;//32位目的IP地址
    }IP_HEADER;
      

  3.   

    工具可以用 Sniffer或者NetXRay之类的冬冬
    用NDis可以连802.3以太网帧甚至其他IPX和AppleTalk都一起抓过来