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

时间:2014-06-25 02:24:00

标签: python python-2.7 tcp dhcp scapy

我一直在使用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 个答案:

答案 0 :(得分:1)

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

对于某些选项,您可以检查dhcp.py如何在DHCPOptions字典中定义它们 - 例如,您看到renewal_time的定义是int类型和默认设置到21600 - IntField("renewal_time", 21600)

对于其他信息,我建议挖掘RFC。例如,RFC 2132描述了 DHCP选项和BOOTP供应商扩展
RFC 1497仅指供应商选项