tcpreplay删除IP校验和?

时间:2013-02-14 11:55:43

标签: tcp ip checksum tcpdump scapy

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

尝试使用

取消激活卸载校验和
ethtool -K eth0 rx off tx off

然后重试并告诉我们

答案 1 :(得分:1)

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

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

FWIW,我不知道任何会使你的校验和归零的东西......至少我无法想象为什么内核会对通过PF_PACKET接口发送的数据包执行此操作 - 这将是一个错误恕我直言。< / p>

如果你搞清楚了,请告诉我。

答案 2 :(得分:1)

您可以使用tcpreplay-edit中包含的tcpreplay解决此问题,尤其是此选项:

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

停用接口的卸载校验和是没有意义的:当数据包熄灭时,下一台启用了校验和检查的机器会拒绝(+99%)