这个,seq是发出的icmp的编号,自然在增加,初始化的数值我觉得是根据时间,系统时间来生成的。

解决方案 »

  1.   

    先谢过 kiko_lee ,稍后给你分
    欢迎其他大侠指教,up 者有分
      

  2.   

    哈哈 谢谢 deadwolf 和 7680,稍后给分who can save me ?
      

  3.   

    id就是一个标识,每个应用程序发的icmp请求的id不能一样,这样在icmp回应到来的时候应用程序可以判断这个回应是否是自己所要的。
      

  4.   

    nowCan :
    同时 ping 2 个地址,用抓包工具抓下来的 icmp 包里 id 是一样的。这是不是和你说的矛盾?
      

  5.   

    ole ole ole ole ,会的请帮忙回答,不会的请帮忙 up ,谢谢各位弟兄
      

  6.   

    echo是用来标识目的主机是否能够到达,所以其分为echo请求和echo回答。所以其中的id是来表示请求、回答、不可到达。
      

  7.   

    yoboo 
    请求的类型字段一是 type ,对于有些类型的 type 可能还需要 code 字段来指定确切含义,
    而不是 id 字段对于 echo 这样的请求 icmp 的头是这样的
     |type|code| chksum |   id   |   seq   |...
     1byte 1byte 2byte     2byte  2byte如前边的一位弟兄所说:id 和 seq 可以辩明是哪个应用程序发出的包。
    我现在的疑问是:id 是根据什么生成的? 是不是一台机器在开机后、关机秒年 发出的所有icmp 包 id 一直一样?
      

  8.   

    I UP LE!!GIVE ME SCORE!!
      

  9.   

    ICMP的结构
    struct icmp{
         char  ic_type;
         char  ic_code;
         short ic_cksum;
         union{
                  struct {
                          int ic_id:16; /*echo type, a message id*/
                          int ic_seq:16;/*echo type, a seq. number*/
                         }ic1;
                  ...
              }
              ...
          }
    然后,你看这几句:    struct icmp *pic;
                         ...
                         pic->ic_id = getpid();
    此处,getpid()是UNIX下的函数:返回调用进程的id。(请参考《用TCP/IP进行网际互联》第二卷)
    不知这样说对否。
      

  10.   

    先谢过 yoboo_yb ,看了这句 pic->ic_id = getpid(); 就明白了虽然 windows 下可能不同,我是在 windows 2000 下做的实验,同时 tracert 和 ping 几个地址,他们的 id 都是一样的,过几天再测试还是一样(0x300,一直没关机)。看来 id 是个比较随意的值,和 seq 一起维护好包与程序对应关系就行了
      

  11.   

    不知可有专门讲RAW SOCKET的资料或书(讲的详细的也好)?
      

  12.   

    to pitchstar:
      在windows下,请基本socket实现和UNIX是一样的。在ping的UNIX中的ICMP协议版本实现中id = getpid();也就说明你获取到的id应该是一样的(0x300)。(请参考《Linux网络编程》清华大学出版社)P232。to naile:
        请看《Windows Sockets 网络程序设计大全》清华大学出版社。这本书对于Raw Socket讲得挺好。
      

  13.   

    yoboo_yb
    windows 2000 下 icmp 包 id 不是进程 id ,你试一下就知道了, n 个进程发出的 icmp 包 id 是一样的,难道他们的 pid 也一样?
      

  14.   

    刚又试了一下,进程 id 分别为 312 和 992 的两个 ping ,发出的包 id 都是 1280(0x500),不再是 0x300 了,但两个程序仍然一致,和 pid 又都不相等。
    大多数操作系统的 tcp/ip 栈都是基于 bsd/3 的实现(2000 不知道是不是),但可能各自细节上有不同的处理吧。
      

  15.   

    声明
    问题基本搞清楚了,再 up 没分了,谢谢大家的热情帮助,尤其是:kiko_lee nowcan  yoboo_yb我现在没法给分, csdn 有问题,从昨天到今天一直没加上