why (iphdr->ihl)*4 or (iphdr->ihl)<<2?
来源:互联网 发布:windows loader v2.4 编辑:程序博客网 时间:2024/06/05 04:24
struct iphdr {
#if defined(__LITTLE_ENDIAN_BITFIELD)
__u8 ihl:4,
version:4;
#elif defined (__BIG_ENDIAN_BITFIELD)
__u8 version:4,
ihl:4;
#else
#error "Please fix "
#endif
__u8 tos;
__be16 tot_len;
__be16 id;
__be16 frag_off;
__u8 ttl;
__u8 protocol;
__sum16 check;
__be32 saddr;
__be32 daddr;
/*The options start here. */
};
tot_len,就是IP包的长度。把网络字节序,转为本机序就可以了!单独计算这个结构体倒是也好办。不过计算ICMP头里的IP包长度就不能这么做了吧。我见过的做法是:
struct ip *ip;
.....;
ip->ip_hl看过RFC791。
ip->ip_hl 的最小合法大小是5.
没有更多资料了,期待大牛们指教。[quote]原帖由 [i]VIP_fuck[/i] 于 2009-10-30 11:22 发表 [url=http://bbs3.chinaunix.net/redirect.php?goto=findpost&pid=11407409&ptid=1605500][attach]21103[/attach][/url]
我见过的做法是:
struct ip *ip;
.....;
ip->ip_hl [/quote]
因为IP首部的IHL域在计算IP首部长度是是以32位为单位的(4字节)
所以得到IHL域的值要乘以4(没理解上去。
详细说说。
谢谢。ok,谢谢。
明白了。
但是如果ip头部有附加数据怎么办?这个长度改怎么计算?IHL域就是用来计算IP首部长度的,得到它的值乘以4就是IP首部长度
IP首部包括!20字节的定长部分+可选的变长部分!
一般IP首部都没附加部分,所以算出来的就是20个字节
总之,要算IP首部长度,只要IHL×4,不管IP首部有没有附加数据部分
#if defined(__LITTLE_ENDIAN_BITFIELD)
__u8 ihl:4,
version:4;
#elif defined (__BIG_ENDIAN_BITFIELD)
__u8 version:4,
ihl:4;
#else
#error "Please fix "
#endif
__u8 tos;
__be16 tot_len;
__be16 id;
__be16 frag_off;
__u8 ttl;
__u8 protocol;
__sum16 check;
__be32 saddr;
__be32 daddr;
/*The options start here. */
};
tot_len,就是IP包的长度。把网络字节序,转为本机序就可以了!单独计算这个结构体倒是也好办。不过计算ICMP头里的IP包长度就不能这么做了吧。我见过的做法是:
struct ip *ip;
.....;
ip->ip_hl看过RFC791。
ip->ip_hl 的最小合法大小是5.
没有更多资料了,期待大牛们指教。[quote]原帖由 [i]VIP_fuck[/i] 于 2009-10-30 11:22 发表 [url=http://bbs3.chinaunix.net/redirect.php?goto=findpost&pid=11407409&ptid=1605500][attach]21103[/attach][/url]
我见过的做法是:
struct ip *ip;
.....;
ip->ip_hl [/quote]
因为IP首部的IHL域在计算IP首部长度是是以32位为单位的(4字节)
所以得到IHL域的值要乘以4(没理解上去。
详细说说。
谢谢。ok,谢谢。
明白了。
但是如果ip头部有附加数据怎么办?这个长度改怎么计算?IHL域就是用来计算IP首部长度的,得到它的值乘以4就是IP首部长度
IP首部包括!20字节的定长部分+可选的变长部分!
一般IP首部都没附加部分,所以算出来的就是20个字节
总之,要算IP首部长度,只要IHL×4,不管IP首部有没有附加数据部分
- why (iphdr->ihl)*4 or (iphdr->ihl)<<2?
- iphdr
- IP Header Length (IHL)
- iphdr结构
- iphdr结构
- iphdr结构
- iphdr结构
- struct--iphdr -- IP头部
- struct--iphdr -- IP头部
- struct--iphdr -- IP头部
- struct--iphdr -- IP头部
- iphdr结构分析
- struct--iphdr -- IP头部
- struct--iphdr -- IP头部
- struct iphdr详解
- redefinition of 'struct iphdr'
- struct iphdr详解
- struct--iphdr -- IP头部
- 用FusionChiarts制作饼图时百分比小数位的问题
- “线反转法”键盘扫描
- 配置JDK Linux环境
- 伊朗导弹爆炸可能因Stuxnet 病毒所致
- Java 基础一些代码练习笔记(抽象类)
- why (iphdr->ihl)*4 or (iphdr->ihl)<<2?
- 从网址字符串取得参数值的函数(C语言)
- shp文件--大地平面坐标转为经纬度坐标
- 网页自动跳转代码
- BW自定义数据源之数据建模
- 利用 Velocity 模板引擎制作网站
- mysql查询数据库,表名和字段
- wxWidgets 类列表
- 10.1工作总结