Scapy:伪造数据包时要重新计算的字段

时间:2012-08-09 16:25:43

标签: python tcp udp ip scapy

我在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。

2 个答案:

答案 0 :(得分:0)

您是否尝试过发送数据包? Scapy应该自动为你重新计算校验和。你也可以尝试将它们设置为None,但我不认为这是必要的。

答案 1 :(得分:0)

我相信如果你在数据包上调用show2()命令,scapy会自动重新计算校验和。因此,如果对象pckt中的索引为0的数据包,则应调用pckt.show2()并且校验和应该是正确的。至少这是我的理解。

  

pkt.show2()与show相同,但在汇编的数据包上(例如,计算校验和)Source