我有一个数据包跟踪,我使用scapy
进行伪造,并使用tcpreplay
重新发送。我使用Scapy
重新计算IP和传输层校验和,将数据包保存到pcap
文件的磁盘上并在其上调用tcpreplay
。
通过并行运行tcpdump
,我注意到这些传出数据包的所有 IP校验和都没有任何价值。似乎tcpreplay
每次都会删除它。
现在,这是故意发生的吗?我错过了什么吗?
校验和应该是正确的,所以我认为tcpreplay
不会删除它们,因为对它的检查失败了。
答案 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%)