【问题标题】:Scapy: fields to recompute when forging packetsScapy:伪造数据包时要重新计算的字段
【发布时间】:2023-03-29 15:07:01
【问题描述】:

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

【问题讨论】:

    标签: python tcp udp ip scapy


    【解决方案1】:

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

    【讨论】:

    • 它不会重新计算它们。例如,如果我不重新计算 IP 校验和并且留下了不正确的校验和,则数据包将在第一个路由器处被丢弃。
    • @RickyRobinson 您是否尝试在发送前将它们设置为None?您是否尝试过嗅探它们以查看它们是否具有0x0 chksum?
    • 如果您弄乱了各个字段,它肯定会不会为您重新计算校验和。我只是失去了几天,因为它们被丢弃了;做 show2() 解决了这个问题。
    【解决方案2】:

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

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

    【讨论】:

    • 是的,在 stackoverflow 上的一些旧帖子中,我读到 show2 完全符合我在原始帖子 (myPackets[i] =myPackets[i].__class__(str(myPackets[i])) ) 中所写的内容,但无法抑制其在屏幕上的输出。
    • @RickyRobinson 啊,那么您可以做的是暂时更改文本的输出。使用此代码执行此操作:pastebin.com/56WjkAg7 希望对您有用。
    • @RickyRobinson NP 和仅供参考,如果您要解析文本,捕获变量将包含输出的内容。
    • 这只会向您显示 chksum。原始数据包不会改变。如果有人有其他方法来计算校验和并更新数据包,请ping。
    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 2023-03-31
    • 1970-01-01
    • 2013-07-06
    • 2014-11-30
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    相关资源
    最近更新 更多