我一直在使用 Scapy,并且一直在制作数据包。我遇到的一个问题是试图在数据包中指定某些数据/选项。例如,我想制作一个带有选项 60 的 DHCP 数据包,但我不知道为此使用的有效输入数据是什么。我知道数据包应该有一个 DHCP.options
列表,我可以将这样的选项添加到列表中,但我如何知道我实际可以使用的数据类型和范围?我也知道我可以在解释器中键入 DHCPOptions
来查看它是一个“供应商类 ID”,但我如何才能将它正确地添加到数据包中呢?
另一个例子:对于 TCP 时间戳选项,我发现我必须输入 ('Timestamp', (int,int))
,换句话说,字符串 时间戳
和该元组中的两个整数元组,在我不知道的某种范围内。
所以最终,我的问题是我在哪里/如何找到如何将有效输入数据添加到 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 用作示例,但我想知道如何添加任何有效选项。
最佳答案
好吧,这可能不是完整的答案,因为我也发现很难找到这样的信息,但是......
对于某些选项,您可以查看dhcp.py它们是如何在 DHCPOptions
字典中定义的 - 例如,您看到 renewal_time
根据其定义是 int 类型并且默认设置为 21600 - IntField("renewal_time ", 21600)
。
对于其他信息,我建议深入研究 RFC。例如,RFC 2132描述了 DHCP 选项和 BOOTP 供应商扩展。
RFC 1497仅指供应商选项。
关于python - 如何在 Scapy 中正确修改数据包数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24399236/