我正在使用Scapy做一些Wi-Fi脚本,我希望做一个WPS请求。作为其中的一部分,我需要执行一系列数据包,如EAPOL(开始),然后从路由器接收EAP(请求,身份)数据包。
如果我使用适当的数据包执行SRP(EAPOL),Scapy将等待响应超时,因为身份请求似乎不是一个适当的响应'对于Scapy使用的任何定义的数据包。
或者我尝试在发送数据包后直接启动sniff(),但它似乎并没有及时启动来获取数据包。
独立的嗅探线程(在单独的控制台窗口中启动)确实会看到如下的AP响应。
RadioTap / Dot11 / LLC / SNAP / EAPOL EAP_PACKET / EAP / Padding
所以我的问题是
干杯。
答案 0 :(得分:2)
发送/接收对由图层实现的answers
方法定义。
例如,以下是answers
图层的IP
方法:
def answers(self, other):
if not isinstance(other,IP):
return 0
if conf.checkIPaddr and (self.dst != other.src):
return 0
if ( (self.proto == socket.IPPROTO_ICMP) and
(isinstance(self.payload, ICMP)) and
(self.payload.type in [3,4,5,11,12]) ):
# ICMP error message
return self.payload.payload.answers(other)
else:
if ( (conf.checkIPaddr and (self.src != other.dst)) or
(self.proto != other.proto) ):
return 0
return self.payload.answers(other.payload)
您要做的是开发自己的answers(request, potential_response)
函数并接收原始数据包。然后,使用您的answers
函数来确定哪个原始数据包是答案。
要接收原始数据包,您可以使用sniff
功能:
sniff(count=1,timeout=0.001)
虽然你发现它的缺点是它不一定能及时开始。所以,你想看看sniff
的实现方式。在内部,它使用conf.L2listen
,您也可以使用它。
因此,在发送请求之前,请执行s=conf.L2listen()
之后,执行s.recv(65536)
以接收数据包。您可以使用sel = select([s],[],[],0.001)
等待数据包到达的一定时间。如果s in sel[0]
,则可以从套接字读取数据,否则超时传递。
timeout参数以秒为单位,因此我的所有示例都指定了1毫秒的超时。