0

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

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

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

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

4

3 回答 3

1

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

尝试禁用卸载校验和

ethtool -K eth0 rx off tx off

然后重试并告诉我们

于 2013-02-14T13:36:33.540 回答
1

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

您是否在 Wireshark 中打开了由 scapy 生成的原始 pcap 并验证那里实际上存在校验和?老实说,这听起来像是垃圾进垃圾出的简单案例。

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

如果你弄明白了,请告诉我。

于 2013-02-23T06:34:20.937 回答
1

tcpreplay-edit您可以使用包含在同一包中的解决此问题tcpreplay,特别是此选项:

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

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

于 2015-08-20T14:11:37.280 回答