我正在尝试创建一个自动机,以解析具有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
函数传递任何参数,我在这里错过了什么?
答案 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()