如何在Scapy中正确修改数据包数据?

1 投票
1 回答
1589 浏览
提问于 2025-04-18 10:58

我最近在使用Scapy这个工具,尝试制作一些数据包。但是我遇到一个问题,就是在数据包中指定某些数据或选项时不知道该怎么做。比如说,我想制作一个带有选项60的DHCP数据包,但我不知道可以用什么有效的数据。我知道数据包应该有一个DHCP.options的列表,我可以把选项加到这个列表里,但我怎么知道可以用什么类型和范围的数据呢?我也知道在解释器里输入DHCPOptions可以看到它是一个“厂商类ID”,但我到底该怎么正确地把它加到数据包里呢?

再举个例子:对于TCP时间戳选项,我发现我必须把它输入为(‘Timestamp’, (int,int)),也就是说要有一个包含字符串Timestamp的元组,以及一个包含两个整数的元组,但我不知道这两个整数的范围是什么。

所以,最终我的问题是:我该从哪里找到在Scapy中添加有效输入数据到数据包的方法?有没有什么列表或文档可以参考?我搜索了很久,但连源代码里都找不到,文档似乎也没什么帮助。非常感谢任何帮助!

示例代码:

p = Ether()/IP()/UDP()/BOOTP()/DHCP()

# ?:what goes in the list to correctly add any option?
p[DHCP].options = [(?,?)]

# Trying to add option 60 here, unsure how
p[DHCP].options.append( ('vendor_class_id', ?) )  

我用选项60只是举个例子,但我想知道如何添加任何有效的选项。

1 个回答

1

好吧,这可能不是完整的答案,因为我自己也很难找到这样的信息,不过...

对于一些选项,你可以查看 dhcp.py 文件,看看它们是如何在 DHCPOptions 字典中定义的。例如,你会看到 renewal_time 的定义是整数类型,默认值设置为21600 - IntField("renewal_time", 21600)

至于其他信息,我建议你查阅一些RFC文档。例如,RFC 2132 描述了 DHCP选项和BOOTP厂商扩展
RFC 1497 则专门提到了 厂商选项

撰写回答