本帖最后由 VisualEleven 于 2011-06-02 22:23:53 编辑

解决方案 »

  1.   

    代码就是http://blog.vckbase.com/zaboli/archive/2004/12/17/2107.html。直接复制代码到VC6里就马上可以跑了(加上一个ws2_32.lib LINK)。
    在DecodeICMPHeader函数里iphdr = (IpHeader *)buf;这句后加上顶楼打印IP的语句。
      

  2.   

    会不会是程序还没执行完,不如设个断点,看看继续执行下去iphdr里面的参数是否有变化
      

  3.   

    发送的时候使用htonl,htons转换一下。接受的时候也要转过来ntohl.
      

  4.   

    如果不打印IP的话,这个程序是没有什么问题的,即便是打印IP,源IP也是正确的。4、5楼的情况考虑不存在。
      

  5.   

    还有就是:unsigned char*pc = (unsigned char*)&(iphdr->sourceIP);
    char pszs[30];
    sprintf(pszs,"%d.%d.%d.%d",*pc,*(pc+1),*(pc+2),*(pc+3));
    printf("recv ip pack from %s\n",pszs);
    这个IP包是对方返回的,为什么里面的sourceIP是本机IP???
      

  6.   

    现在得到的一个比较合理的说法就是:“网络安全机制,干扰了结果”“探测规则 随着 安全网络的过滤。 导致复杂化”“所以你TCP/IP 协议 反馈回来的,都是经过多层网络硬件修改的。所以你得到的,不是你想要的数据”,太黑盒太玄了
      

  7.   

    用这个来显示IP地址
    printf("recv ip pack from %s\n",inet_ntoa(*(in_addr *)&iphdr->destIP));
      

  8.   

    http://blog.csdn.net/VisualEleven/archive/2010/04/21/5512462.aspx
      

  9.   

    这个应该也是单线程或者每次PING一个IP的吧?现在要多线程PING多IP,需要解析返回包的IP头了。