将参数传递给Scapy的Automaton.run()方法

时间:2019-02-03 11:04:22

标签: python scapy

我正在尝试创建一个自动机,以解析具有Scapy的自动机类的不同数据包。

为此,我需要能够将数据包作为参数传递给自动机。 一种方法是在创建自动机时传递数据包:

my_automaton = MyAutomaton(packet)

此参数将由自动机代码中重载的parse_args函数处理:

class MyAutomaton(Automaton):
  def parse_args(self, pkt, **kargs):
    Automaton.parse_args(self, **kargs)
    self.pkt = pkt
  ... REST OF CLASS ...

如果我为每个传入数据包创建一个新的自动机,这将很好地工作。

但是我只想创建一个自动机并以不同的数据包运行它。 像这样:

my_automaton = MyAutomaton()
my_automaton.run(pkt1)
my_automaton.run(pkt2)

根据文档,这应该是可能的(link):

The parse_args() method is called with arguments given at __init__() and run(). Use that to parametrize the behaviour of your automaton.

并通过在调用parse_args方法时打印到控制台来验证是否确实在自动机创建时以及在调用run方法时调用了它。

但是我似乎无法通过run函数传递任何参数,我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

如文档所示,您需要在初始化自动机时传递参数:

>>> TFTP_read("my_file", "192.168.1.128").run()

在您的情况下

my_automaton = MyAutomaton(pkt1)
my_automaton.run()
my_automaton2 = MyAutomaton(pkt2)
my_automaton2.run()