这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » traceroute 源程序中有一处不懂,想请教!

共4条 1/1 1 跳转至

traceroute 源程序中有一处不懂,想请教!

菜鸟
2004-09-22 03:51:34     打赏

int packet_ok(buf, cc, from, seq) u_char *buf; int cc; struct sockaddr_in *from; int seq; { register struct icmp *icp; u_char type, code; int hlen; #ifndef ARCHAIC struct ip *ip;

ip = (struct ip *) buf; hlen = ip->ip_hl << 2; if (cc < hlen + ICMP_MINLEN) { if (verbose) Printf("packet too short (%d bytes) from %s\n", cc, inet_ntoa(from->sin_addr)); return (0); } cc -= hlen; icp = (struct icmp *)(buf + hlen); #else icp = (struct icmp *)buf; #endif /* ARCHAIC */ type = icp->icmp_type; code = icp->icmp_code; if ((type == ICMP_TIMXCEED && code == ICMP_TIMXCEED_INTRANS) || type == ICMP_UNREACH) { struct ip *hip; struct udphdr *up;

hip = &icp->icmp_ip; hlen = hip->ip_hl << 2; up = (struct udphdr *)((u_char *)hip + hlen); if (hlen + 12 <= cc && hip->ip_p == IPPROTO_UDP && up->uh_sport == htons(ident) && up->uh_dport == htons(port+seq)) return (type == ICMP_TIMXCEED? -1 : code+1); }

... } 在上面的代码中,if (hlen + 12 <= cc && hip->ip_p == IPPROTO_UDP && up->uh_sport == htons(ident) && up->uh_dport == htons(port+seq)), if语句中 hlen + 12 <= cc, 为什么 是加 12?是不是这12Byte中有8Byte的ICMP首部,剩下的 4Byte是UDP首部? 请高手指教!谢谢先!




关键词: traceroute     源程序     中有     一处     不懂         

菜鸟
2004-09-22 17:00:00     打赏
2楼

自己顶一下!


菜鸟
2004-09-23 06:05:00     打赏
3楼
12字节是本地ip层的额外开销,但不通过网络传送,

菜鸟
2004-09-23 06:56:00     打赏
4楼
windchaser兄:能不能说得具体一点? [align=right][color=#000066][此贴子已经被作者于2004-9-22 22:58:04编辑过][/color][/align]

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]