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

Posted

技术标签:

【中文标题】Scapy:伪造数据包时要重新计算的字段【英文标题】:Scapy: fields to recompute when forging packet***y:伪造数据包时要重新计算的字段 【发布时间】:2012-08-06 22:30:44 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

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

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

【讨论】:

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

以上是关于Scapy:伪造数据包时要重新计算的字段的主要内容,如果未能解决你的问题,请参考以下文章

scapy - 基于python的数据包操作库

交互式数据包处理程序 Scapy 入门指南

python中的scapy模块

Scapy SYN 在我们自己的 IP 地址上发送

Python渗透测试工具有哪些

如何检查 scapy 数据包中是不是存在层?