yukun7402
驱动牛犊
驱动牛犊
  • 注册日期2012-01-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1296回复:1

关于TCP头校验和的计算不正确的问题

楼主#
更多 发布于:2013-08-11 23:25
项目需求:
        在浏览器里访问A地址,但是实际上访问到了B地址。

我的思路:
        用Passthru截获到发出去的数据包,如果是TCP包,据按照定好的规则修改其目的IP和目的端口后发送出去,当然,修改后一定要重新计算校验和。

碰到的问题:
        针对ICMP包,也就是ping包,修改目的IP后再计算IP首部校验和,然后发送出去,经测试正常实现了想要的功能,比如ping的是A地址,实际上B电脑收到了。这没问题。
        但是TCP包涉及到了TCP首部校验和,现在是按照教程上的方法计算TCP首部校验和,发出的包没有任何回应,估计是校验和错误所致。
        另外,发现一个奇怪的现象,截获到的一部分包(当然是还未修改的),其TCP首部校验和竟然和伪首部的每16位相加之河相等,奇怪了?

哪位大哥做过这方面的东西,说白了就是个NAT,指导下,谢谢啦。
drivercoding
驱动牛犊
驱动牛犊
  • 注册日期2009-10-19
  • 最后登录2013-08-17
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望191点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2013-08-14 11:49
和NAT一点关系都没有。你这个需求要看在什么级别上解决。不同的实现方式效果是不同的。直接修改IP层的数据最直接,可是算法比较复杂。通DNS角度解决比较简单,但是无法阻止用户直接用IP通讯。
游客

返回顶部