免费注册 查看新帖 |

Chinaunix

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

【求助】如何修改TCP“伪头”的计算 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-03 10:09 |只看该作者 |倒序浏览
在TCP计算校验和的时候包括了“伪头”,其中有第三层的IP地址信息。现在我想使它计算“伪头”的时候对网络位不敏感,比如192.128.10.32/24和172.16.20.32/24这两个地址的主机与本地主机通信,会被本地TCP认为是同一个连接。我的想法是在第三层往上交IP地址的时候,把所有/24的地址的网络位都统一清零,如上面的两个地址都变成0.0.0.32/24。
为了完成这样的一个操作,我该怎么做?希望大侠们能给点建议?
能不能直接利用netfilter的INPUT钩子点,直接在那里增加那样一段清零的代码?

招聘 : c/c++研发
论坛徽章:
0
2 [报告]
发表于 2009-05-08 14:29 |只看该作者

回复 #1 coco_kai 的帖子

清0以后你的校验和都不正确了,这种数据包肯定是要被丢弃的

论坛徽章:
0
3 [报告]
发表于 2009-05-08 15:07 |只看该作者
问下,你说的伪头是什么东西?
tcp的校验和只包括tcp头和tcp数据段,不包括ip头
ip头也有个校验和,他只包括ip头本身
你到底说的什么东西?

还有,你在input里把ip网络位改了,你的本地主机如何回应对方,他找不到对方ip了
除非你把所有改动都记录下来,回应的时候再改回去,那么实际上你就是要在input里实现一个snat,那个工程就浩大了。。。netfilter改得面目全非~~

论坛徽章:
0
4 [报告]
发表于 2009-05-11 18:10 |只看该作者

回复 #3 llxxtnt 的帖子

TCP的校验和除了你说的那些还包括一个“伪头”,它包括源IP地址,目的IP地址, TCP包长度, TCP协议号。
可以参考以下链接
http://www.linuxforum.net/forum/ ... &sb=5&o=all

嗯,回应的时候是需要维护一个表,把原先清零的网络地址映射回来。
其实就是想在协议栈的三层和四层之间做一个东西,使得四层会屏蔽三层IP的网络位。
当然,那个环境要求所有IP地址的主机位都不一样。

[ 本帖最后由 coco_kai 于 2009-5-11 18:14 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-05-11 18:11 |只看该作者

回复 #2 jerryhua 的帖子

谢谢回贴,如果我在清零操作的时候重新计算校验和,应该就可以了吧?

[ 本帖最后由 coco_kai 于 2009-5-11 21:11 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-05-12 15:33 |只看该作者
恩,这个项目很有意义,如果lz能把它弄出来的话
加油,我看结果

论坛徽章:
0
7 [报告]
发表于 2009-05-12 17:23 |只看该作者
有点深奥
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP