TCP分流套接字的校验和计算

4
我有一个分流插座。我想在看到数据包时更改端口。当我这样做时,我需要重新计算TCP校验和和IP校验和吗?
我正在尝试这样做,但在tcpdump中看到重置数据包。我不知道这是因为我计算TCP校验和错误,还是其他原因导致的。
我使用了此网站上的cksum方法:

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

我认为使用分流套接字,如果我改变一件事情,应该是相当简单的,但似乎并不是。有没有一个TCP校验和计算器可以用来验证我得到了正确的值?

2个回答

0

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

有趣。在他们的 C 函数中,您知道 args old 指针和 new 指针具体指的是什么吗?我是否只需要创建两个变量,其中包含旧数据和新数据? - Derek
optr 指向您从旧数据包中删除的内容,而 nptr 指向您在新数据包中插入的内容。因此,如果您只是更改端口号,则 optr 指向原始端口,nptr 指向替换端口。您可以使用两个变量,或者一个变量可以指向数据包中的位置。 - Barmar
啊,好的 - 那很有道理。我不确定是否需要整个旧数据包和新数据包的副本。 - Derek
当我说“你不必浏览整个数据包”时,我认为我在回答中已经表明了这一点。校验和的好处是,如果您更改一个字节,校验和只会因旧字节和新字节之间的差异而更改。像CRC和MD5这样的算法提供了更好的完整性检查,但它们更昂贵,没有这种简单的属性。 - Barmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接