如何使用scapy重新计算IP校验和?

8 投票
2 回答
32076 浏览
提问于 2025-04-16 18:15

可能重复的问题:
如何在不发送数据包的情况下计算校验和?

我在一个捕获的数据包中伪造了源IP和MAC地址,但现在我需要重新计算校验和,以确保在数据包被接收时是正确的(当然是在注入网络之后)。我其实不想自己实现校验和的计算,我在想 scapy 是否可以帮我做到这一点。我听说 show2() 函数应该可以重新计算校验和,但我似乎无法让它正常工作。

那么,我该如何使用 scapy 来重新计算(并替换)一个捕获的和伪造的数据包的校验和呢?

谢谢!

2 个回答

4

假设我们在处理一个IP头部,并且想要在下一个跳点之后重新计算校验和:

>>> iph = IP(import_hexcap())
0000 4500 0064 000f 0000 fe01 3726 c0a8 0108
0010 c0a8 030b
>>> iph.ttl = iph.ttl - 1
>>> del iph.chksum
>>> iph.show2()
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x0
len= 100
id= 15
flags= 
frag= 0L
ttl= 253
proto= icmp
chksum= 0x3826
src= 192.168.1.8
dst= 192.168.3.11
options= 

这里的 .chksum 字段就是你需要的答案。

14

正如这里所示,在调用scapy中的show2()方法之前,你需要先删除.chksum这个属性。

撰写回答