作为Scapy自定义字段的整数数组

时间:2016-02-14 15:32:23

标签: python python-2.7 scapy

我想要伪造的数据包是这样的:

p = IP()/TCP()/Unique()

其中Unique是新图层:

class Unique(Packet):
name = "Unique"
fields_desc=[ IntField("a", 0),
         IntField("b", 0),
         IntField("c", 0)]

我不知道如何定义包含整数数组的字段。 有没有办法做到这一点? 我没有三个字段“a”,“b”和“c”,而是想要一个包含三个整数的字段。

由于3是一个变量号,我可以使用的另一种可能的方法是使用 n IntField,其中n是可变的,但我不知道如何做到这一点,我将不胜感激任何帮助

2 个答案:

答案 0 :(得分:1)

我认为FieldListField对于你正在寻找的东西来说是狡猾的。它定义了任意数量的相同类型字段的数组/列表。

class Unique(Packet):
    name = "Unique"
    fields_desc=[FieldListField("my_array", None, IntField("bla",0))]

>>> Unique(my_array=[1,2,3,4,5]).show()
###[ Unique ]###
  my_array= ['1', '2', '3', '4', '5']
>>> hexdump(Unique(my_array=[1,2,3,4,5]))
0000   00 00 00 01 00 00 00 02  00 00 00 03 00 00 00 04   ................
0010   00 00 00 05                                        ....

答案 1 :(得分:0)

class Unique(Packet):
name = "Unique"
fields_desc=[ IntField("a", 0),
         IntField("b", 0),
         FieldLenField("num_records", None),
         FieldListField("c", None, IntField("number", 0), count_from=lambda pkt: pkt.num_records)
]

您需要包含FieldListField和FieldLenField。 有关更多信息,请参阅此文 http://www.dirk-loss.de/scapy-doc/build_dissect.html#the-variable-length-field