大侠请出手,up 有分 这个,seq是发出的icmp的编号,自然在增加,初始化的数值我觉得是根据时间,系统时间来生成的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先谢过 kiko_lee ,稍后给你分欢迎其他大侠指教,up 者有分 哈哈 谢谢 deadwolf 和 7680,稍后给分who can save me ? id就是一个标识,每个应用程序发的icmp请求的id不能一样,这样在icmp回应到来的时候应用程序可以判断这个回应是否是自己所要的。 nowCan :同时 ping 2 个地址,用抓包工具抓下来的 icmp 包里 id 是一样的。这是不是和你说的矛盾? ole ole ole ole ,会的请帮忙回答,不会的请帮忙 up ,谢谢各位弟兄 echo是用来标识目的主机是否能够到达,所以其分为echo请求和echo回答。所以其中的id是来表示请求、回答、不可到达。 yoboo 请求的类型字段一是 type ,对于有些类型的 type 可能还需要 code 字段来指定确切含义,而不是 id 字段对于 echo 这样的请求 icmp 的头是这样的 |type|code| chksum | id | seq |... 1byte 1byte 2byte 2byte 2byte如前边的一位弟兄所说:id 和 seq 可以辩明是哪个应用程序发出的包。我现在的疑问是:id 是根据什么生成的? 是不是一台机器在开机后、关机秒年 发出的所有icmp 包 id 一直一样? I UP LE!!GIVE ME SCORE!! 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进行网际互联》第二卷)不知这样说对否。 先谢过 yoboo_yb ,看了这句 pic->ic_id = getpid(); 就明白了虽然 windows 下可能不同,我是在 windows 2000 下做的实验,同时 tracert 和 ping 几个地址,他们的 id 都是一样的,过几天再测试还是一样(0x300,一直没关机)。看来 id 是个比较随意的值,和 seq 一起维护好包与程序对应关系就行了 不知可有专门讲RAW SOCKET的资料或书(讲的详细的也好)? to pitchstar: 在windows下,请基本socket实现和UNIX是一样的。在ping的UNIX中的ICMP协议版本实现中id = getpid();也就说明你获取到的id应该是一样的(0x300)。(请参考《Linux网络编程》清华大学出版社)P232。to naile: 请看《Windows Sockets 网络程序设计大全》清华大学出版社。这本书对于Raw Socket讲得挺好。 yoboo_ybwindows 2000 下 icmp 包 id 不是进程 id ,你试一下就知道了, n 个进程发出的 icmp 包 id 是一样的,难道他们的 pid 也一样? 刚又试了一下,进程 id 分别为 312 和 992 的两个 ping ,发出的包 id 都是 1280(0x500),不再是 0x300 了,但两个程序仍然一致,和 pid 又都不相等。大多数操作系统的 tcp/ip 栈都是基于 bsd/3 的实现(2000 不知道是不是),但可能各自细节上有不同的处理吧。 声明问题基本搞清楚了,再 up 没分了,谢谢大家的热情帮助,尤其是:kiko_lee nowcan yoboo_yb我现在没法给分, csdn 有问题,从昨天到今天一直没加上 可否把Impersonate理解为Linux下面的sudo? 请进->有问题->进来看看吧 为什么有时需要显性数据转型,有时却不需要呢? 用静态控件显示位图为什么会闪烁 如何由HBITMAP得到bmp中x,y点的RGB值? 为什麽windows提示JIT没有注册类别? CRcordset.open真么才能构建双向滚动的记录集 创建数据源的问题 再问一次,关于在98下加载DOS程序的问题? 关于Windows Shell编程 求救:线程类里使用WSAAsyncSelect怎么截获不到FD_ACCEPT,各位大哥帮我看看 Win2000里,如何做一个守护进程?
欢迎其他大侠指教,up 者有分
同时 ping 2 个地址,用抓包工具抓下来的 icmp 包里 id 是一样的。这是不是和你说的矛盾?
请求的类型字段一是 type ,对于有些类型的 type 可能还需要 code 字段来指定确切含义,
而不是 id 字段对于 echo 这样的请求 icmp 的头是这样的
|type|code| chksum | id | seq |...
1byte 1byte 2byte 2byte 2byte如前边的一位弟兄所说:id 和 seq 可以辩明是哪个应用程序发出的包。
我现在的疑问是:id 是根据什么生成的? 是不是一台机器在开机后、关机秒年 发出的所有icmp 包 id 一直一样?
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进行网际互联》第二卷)
不知这样说对否。
在windows下,请基本socket实现和UNIX是一样的。在ping的UNIX中的ICMP协议版本实现中id = getpid();也就说明你获取到的id应该是一样的(0x300)。(请参考《Linux网络编程》清华大学出版社)P232。to naile:
请看《Windows Sockets 网络程序设计大全》清华大学出版社。这本书对于Raw Socket讲得挺好。
windows 2000 下 icmp 包 id 不是进程 id ,你试一下就知道了, n 个进程发出的 icmp 包 id 是一样的,难道他们的 pid 也一样?
大多数操作系统的 tcp/ip 栈都是基于 bsd/3 的实现(2000 不知道是不是),但可能各自细节上有不同的处理吧。
问题基本搞清楚了,再 up 没分了,谢谢大家的热情帮助,尤其是:kiko_lee nowcan yoboo_yb我现在没法给分, csdn 有问题,从昨天到今天一直没加上