微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从struct iphdr获取片段偏移

如何解决从struct iphdr获取片段偏移

我想在结构中获得fragment offset

struct iphdr

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 <asm/byteorder.h>"
#endif
    __u8    tos;
    __u16   tot_len;
    __u16   id;
    __u16   frag_off;
    __u8    ttl;
    __u8    protocol;
    __u16   check;
    __u32   saddr;
    __u32   daddr;
    /*The options start here. */
};

根据this answer,我构建了该代码

struct iphdr* iph;
printf ("offset = %d \n ",iph->frag_off &IP_OFFSET); # print 370
printf ("more fragment= %d \n ",iph->frag_off &IP_MF ); # print 8192
printf ("do not fragment = %d \n ",iph->frag_off &IP_DF ); # print 0 

我已经用libpcap捕获了这个数据包,并用wireshark观看了 iph->frag_off等于0x2172

偏移量应等于2960(例如wireshark),但在我的计算中等于370

更多片段需要为1(例如wireshark),但在我的计算中等于8192 为什么呢?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。