tcpreplay删除IP校验和?

tcpreplay删除IP校验和?,tcp,ip,checksum,tcpdump,scapy,Tcp,Ip,Checksum,Tcpdump,Scapy,我用scapy伪造了一个数据包跟踪,然后用tcpreplay重新发送。我使用Scapy重新计算IP和传输层校验和,将数据包保存到pcap文件上的磁盘,并在其上调用tcpreplay 通过并行运行tcpdump,我注意到这些传出数据包的所有IP校验和都没有任何值。似乎每次tcpreplay都会删除它 现在,这是故意的吗?我错过什么了吗 校验和应该是正确的,所以我不认为tcpreplay会因为检查失败而删除它们 我不确定发生了什么,但我怀疑tcpreplay检测到接口将用于发送数据包的卸载校验和处于

我用
scapy
伪造了一个数据包跟踪,然后用
tcpreplay
重新发送。我使用
Scapy
重新计算IP和传输层校验和,将数据包保存到
pcap
文件上的磁盘,并在其上调用
tcpreplay

通过并行运行
tcpdump
,我注意到这些传出数据包的所有IP校验和都没有任何值。似乎每次
tcpreplay
都会删除它

现在,这是故意的吗?我错过什么了吗


校验和应该是正确的,所以我不认为
tcpreplay
会因为检查失败而删除它们

我不确定发生了什么,但我怀疑
tcpreplay
检测到接口将用于发送数据包的
卸载校验和处于活动状态,并让
NIC
计算正确的校验和

尝试使用禁用卸载校验和

ethtool -K eth0 rx off tx off

然后重试并让我们知道发生了什么,但我怀疑
tcpreplay
检测到用于发送数据包的接口的
卸载校验和处于活动状态,并让
NIC
计算正确的校验和

尝试使用禁用卸载校验和

ethtool -K eth0 rx off tx off

然后重试,告诉我们您没有指定正在使用的实际tcpreplay命令,但tcpreplay从不编辑数据包。您可以使用tcpreplay edit或tcprewrite编辑数据包,但不能使用tcpreplay。即使这样,tcpreplay edit/tcprewrite也会计算/修复您的校验和;不是把它们归零

您是否在Wireshark中打开了scapy生成的原始pcap,并验证了其中是否存在校验和?老实说,这听起来像是一个简单的垃圾输入,垃圾输出的例子

FWIW,我不知道有什么能让你的校验和归零。。。至少我无法想象内核为什么会对通过PF_数据包接口发送的数据包这样做——这是一个bug


如果您找到了,请告诉我。

您没有指定正在使用的实际tcpreplay命令,但tcpreplay从不编辑数据包。您可以使用tcpreplay edit或tcprewrite编辑数据包,但不能使用tcpreplay。即使这样,tcpreplay edit/tcprewrite也会计算/修复您的校验和;不是把它们归零

您是否在Wireshark中打开了scapy生成的原始pcap,并验证了其中是否存在校验和?老实说,这听起来像是一个简单的垃圾输入,垃圾输出的例子

FWIW,我不知道有什么能让你的校验和归零。。。至少我无法想象内核为什么会对通过PF_数据包接口发送的数据包这样做——这是一个bug


如果您找到了,请告诉我。

您可以使用
tcpreplay edit
解决此问题,它与
tcpreplay
包含在同一软件包中,尤其是此选项:

-C, --fixcsum              Force recalculation of IPv4/TCP/UDP header checksums

取消激活接口的卸载校验和是没有意义的:当数据包出去时,它将被启用校验和检查的下一台机器拒绝(+99%)

您可以使用
tcpreplay编辑
解决此问题,该编辑包含在与
tcpreplay
相同的数据包中,尤其是此选项:

-C, --fixcsum              Force recalculation of IPv4/TCP/UDP header checksums

取消激活接口的卸载校验和是没有意义的:当数据包出去时,它将被启用校验和检查的下一台机器拒绝(+99%)

这些数据包是否由收据接收到正确的校验和?我不明白你的问题。这些数据包在接收器处被正确接收,所以我不太担心。只是tcpreplay应用于每个数据包都有正确Ip校验和的数据包跟踪时,似乎正在删除这些校验和。如果您在scapy中使用sendfast,它将使用现成的tcpreplay。通常,如果你有校验和问题,最好的办法就是删除它们。Scapy应该在发送时自动修复它。当涉及到发送和接收时,Scapy是各种问题的根源。我很高兴现在使用自己的
sr
实现。不再有数十秒的延迟,不再有负的往返时间,即使对于重复的数据包,数据包的匹配现在也是正确的,等等。这些数据包是通过正确的校验和由收据接收的吗?我不明白你的问题。这些数据包在接收器处被正确接收,所以我不太担心。只是tcpreplay应用于每个数据包都有正确Ip校验和的数据包跟踪时,似乎正在删除这些校验和。如果您在scapy中使用sendfast,它将使用现成的tcpreplay。通常,如果你有校验和问题,最好的办法就是删除它们。Scapy应该在发送时自动修复它。当涉及到发送和接收时,Scapy是各种问题的根源。我很高兴现在使用自己的
sr
实现。不再有数十秒的延迟,不再有负的往返时间,即使是重复的数据包,数据包的匹配现在也是正确的,等等。谢谢你的回答。我不想把我的系统搞砸。由于我不熟悉
卸载
,上述命令将如何影响我机器的可用性?此外,我似乎找不到
rx校验和
tx校验和
之间的区别。有什么想法吗?在任何情况下,当我运行
ethtool
rx校验和:off[fixed]tx校验和:on-tx-checksum-ipv4:off[fixed]tx校验和ip-generic:on[fixed]tx-checksum-ipv6:off[fixed]tx校验和fcoe-crc:off[fixed]tx校验和sctp:off[fixed]
似乎已为传出数据包激活了校验和卸载。这意味着IP校验和将由NIC硬件而不是软件计算。因为tcpdump捕获了