在 我写了以下代码:
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
环回接口非常特殊,Scapy有时会弄乱它们。在
你应该使用一个“真实”的界面。在
相关问题 更多 >
编程相关推荐