如何使用scapy重新计算IP校验和?
可能重复的问题:
如何在不发送数据包的情况下计算校验和?
我在一个捕获的数据包中伪造了源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
这个属性。