斯卡比的自动机,2次执行cy

2024-10-01 19:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

在 我写了以下代码:

from scapy.layers.inet import ICMP,IP
from scapy.all import Raw

class GetIP(Automaton):
    def parse_args(self, **kargs):
        Automaton.parse_args(self, **kargs)

    def master_filter(self, pkt):
        return (ICMP in pkt and pkt[ICMP].type==8)

    @ATMT.state(initial=1)
    def BEGIN(self):
        print("begin state")
        raise self.WAITING()

    @ATMT.state()
    def WAITING(self):
        print("waiting state")
        pass

    @ATMT.state()
    def RECIEVED(self):
        print("recieved state")
        pass

    @ATMT.state(final=1)
    def END(self):
        print("END state")
        raise self.BEGIN()

    @ATMT.receive_condition(WAITING)
    def wait_icmp(self,pkt):
        print("wait-receive condition")
        self.client_ip = pkt[IP].src
        raise self.RECIEVED()

    @ATMT.condition(RECIEVED)
    def got_icmp(self):
        print("received condition")
        raise self.END()

    @ATMT.action(got_icmp)
    def post_icmp(self):
        print("action")
        print(self.client_ip)
GetIP().run()

当获取ICMP请求从报头显示IP时,但是IP被打印了两次。在

用命令发送1个数据包:

^{pr2}$

脚本输出:

WARNING: No route found for IPv6 destination :: (no default route?)
begin state 
waiting state 
wait-receive condition 
recieved state
received condition action
127.0.0.1 
END state 
begin state 
waiting state 
wait-receive condition 
recieved state 
received condition action
127.0.0.1 
END state 
begin state 
waiting state

Tags: selfipdefconditionendreceiveraisestate

热门问题