2

我正在使用 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。

4

2 回答 2

0

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

于 2012-08-09T16:50:01.427 回答
0

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

pkt.show2() 与 show 相同,但在组装数据包上(例如计算校验和)来源

于 2012-08-30T14:17:26.430 回答