Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转移套接字的TCP校验和计算_C_Tcp_Ip_Freebsd_Checksum - Fatal编程技术网

转移套接字的TCP校验和计算

转移套接字的TCP校验和计算,c,tcp,ip,freebsd,checksum,C,Tcp,Ip,Freebsd,Checksum,我有一个插座。当我看到数据包时,我正在尝试更改其端口。当我这样做时,我是否需要重新计算TCP校验和以及IP校验和 我正在尝试这样做,但我在tcpdump中看到重置数据包。我不知道这是因为我计算tcp校验和错误,还是因为发生了其他事情 我使用了这个网站的cksum方法: 我认为使用转移插座,如果我改变一件事,它应该是相当简单的,但似乎不是。有没有TCP校验和计算器可以用来验证我得到的值是否正确?您确实需要重新计算校验和。以下是计算说明:有关NAT/PAT必须进行的校验和调整,请参见的第3.3节。

我有一个插座。当我看到数据包时,我正在尝试更改其端口。当我这样做时,我是否需要重新计算TCP校验和以及IP校验和

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

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


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

您确实需要重新计算校验和。以下是计算说明:

有关NAT/PAT必须进行的校验和调整,请参见的第3.3节。您不必遍历整个数据包,只需根据修改的字节调整校验和。

。在它们的C函数中,您知道args旧指针和新指针具体指的是什么吗?我是否只需要创建两个包含新旧数据的变量?
optr
指向您从旧数据包中删除的内容,nptr指向您在新数据包中插入的内容。因此,如果您只是更改端口号,optr指向原始端口,nptr指向替换端口。您可以使用两个变量,或者一个变量可以指向数据包中的位置。我不确定我是否需要一份旧包和旧包的完整副本。我想我在回答中说得很清楚,当时我说“你不必检查整个包”。校验和的好处在于,如果更改一个字节,校验和只会更改新旧字节之间的差值。像CRC和MD5这样的算法提供了更好的完整性检查,但它们更昂贵,并且没有这种简单的特性。