免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1782 | 回复: 2
打印 上一主题 下一主题

IP分片 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-30 17:22 |只看该作者 |倒序浏览
最近写了个sniffer程序,但在IP包重组的时候碰到一些问题,希望有人能帮忙解释下。
主要是关于struct ip结构中unsigned short int ip_off这个字段的运算问题。

因为这个字段记载了IP包的标志位和段内偏移.我对这2个计算如下:
struct ip ip_head;
//这里是计算标志位第3位,跟多段位标志,如果是0说明后面没有后续包(只是说该包是这个分组的最后一个包,不是说传输的最后一个包),1则表示还有包

ip_flag = ntohs(ip_head->ip_off) & 0x2000;
ip_flag = ip_flag >> 13;

//下面是计算这个包在原来包中的起始位置(段内偏移)
loc = ntohs(ip_head->ip_off) & 0x1FFF;
loc = loc * 8;

但从我抓包的结果来看这种算法好像不是正确的。下面是我抓的包的其中2个(只给包头,其实抓的是HTTP包,所以内容也可以列出,但节省长度就不列了)

包A:
TCP from 60.28.164.18:80 to 192.168.1.154:2671 ip flag = 0, ip id = 43987, ip off = 0

包B:
TCP from 60.28.164.18:80 to 192.168.1.154:2671 ip flag = 0, ip id = 43988, ip off = 0

其中ip id指的就是struct ip中的ip_id字段。
包A的内容结尾是:
if(window.location.search.indexOf("from=mail")
包B的内容开头是:
== -1){

2个合并起来刚好是一个JS代码的判断语句。从ip id上看,这2个包很有可能是一个IP包中途被分片,但ip flag却显示位0, 偏移量显示的也为0。所以可能计算有错误。当然也有可能是其它错误。

希望知道的同学给点帮助,谢谢。


论坛徽章:
0
2 [报告]
发表于 2010-08-04 10:34 |只看该作者
求片内偏移的起始位置是正确的,可能不是这个问题。

论坛徽章:
0
3 [报告]
发表于 2010-08-04 16:51 |只看该作者
封包的时候,你计算完loc有没有做htons??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP