【问题标题】:TCP checksum calculation for divert socket转移套接字的 TCP 校验和计算
【发布时间】:2012-10-23 15:03:14
【问题描述】:

我有一个转换插座。我正在尝试更改数据包上的端口,因为我看到它们。当我这样做时 - 我需要重新计算 TCP 校验和和 IP 校验和吗?

我正在尝试这样做,但我在 tcpdump 中看到了重置数据包。我不知道这是因为我计算的 tcp 校验和错误,还是其他原因。

我使用了这个网站的 cksum 方法:

http://www.enderunix.org/docs/en/rawipspoof/

我认为使用转换插座,如果我改变一件事,它应该是相当简单的,但似乎不是。有没有一个 TCP 校验和计算器可以用来验证我得到了正确的值?

【问题讨论】:

    标签: c tcp ip freebsd checksum


    【解决方案1】:

    您确实需要重新计算校验和。下面是计算的说明:TCP/IP Checksum calculation

    【讨论】:

      【解决方案2】:

      请参阅RFC 1631 的第 3.3 节,了解 NAT/PAT 必须进行的校验和调整。您不必遍历整个数据包,只需根据您修改的字节调整校验和即可。

      【讨论】:

      • 有趣。在他们的 C 函数中,你知道具体的 args 旧指针和新指针指的是什么吗?我是否只需要创建两个包含新旧数据的变量?
      • optr 指向您要从旧数据包中删除的内容,而 nptr 指向您要插入新数据包中的内容。因此,如果您只是更改端口号, optr 指向原始端口, nptr 指向替换端口。您可以使用两个变量,或者一个可以指向数据包中的位置。
      • 啊,好吧——这很有道理。我不确定是否需要旧数据包和数据包的完整副本。
      • 当我说“你不必检查整个数据包”时,我想我在答案中已经明确了这一点。校验和的好处是,如果您更改一个字节,校验和只会根据旧字节和新字节之间的差异而改变。 CRC 和 MD5 等算法提供了更好的完整性检查,但它们更昂贵并且没有这个简单的属性。
      猜你喜欢
      • 1970-01-01
      • 2015-01-04
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2010-10-14
      • 2019-01-30
      • 2015-01-30
      相关资源
      最近更新 更多