我在Scapy中伪造了我捕获的某些数据包中IP头中的TTL值。除了IP和传输层头中的校验和之外,还有什么我应该重新计算的吗?
现在我正在做:
for p in myPackets:
p[IP].ttl = targetTTL
del(p[IP].chksum)
del(p[IP].payload.chksum)
for i in range(len(myPackets)):
myPackets[i] = myPackets[i].__class__(str(myPackets[i]))
我问这个问题是因为Scapy的sr
功能,它将数据包与其响应匹配(在我的情况下是ICMP)已经返回带有一些RTT的数据> 1秒,这是荒谬的,因为我使用ttl = 1。
答案 0 :(得分:0)
您是否尝试过发送数据包? Scapy应该自动为你重新计算校验和。你也可以尝试将它们设置为None,但我不认为这是必要的。
答案 1 :(得分:0)
我相信如果你在数据包上调用show2()命令,scapy会自动重新计算校验和。因此,如果对象pckt中的索引为0的数据包,则应调用pckt.show2()并且校验和应该是正确的。至少这是我的理解。
pkt.show2()与show相同,但在汇编的数据包上(例如,计算校验和)Source