什么定义了Scapy发送/接收?

2024-05-29 07:33:49 发布

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

我正在和Scapy做一些Wi-Fi脚本,我想做一个WPS请求。作为这项工作的一部分,我需要执行一系列数据包,例如EAPOL(Start),然后从路由器接收一个EAP(请求,标识)数据包。在

如果我用一个适当的包执行SRP(EAPOL),Scapy在等待响应时会超时,因为无论Scapy使用什么定义,身份请求似乎都不是对包的适当“响应”。在

或者,我尝试在发送数据包后直接启动sniff(),但是它似乎没有及时启动以获取数据包。在

一个独立的嗅探线程(在一个单独的控制台窗口中启动)会看到下面的AP响应。在

RadioTap / Dot11 / LLC / SNAP / EAPOL EAP_PACKET / EAP / Padding

所以我的问题是

  • 什么定义了Scapy中的发送/接收对?为什么EAP包不是合适的接收?在
  • 如果在没有看到EAP包之后直接调用sniff(),那么接收它的合适方法是什么?在

干杯。在


Tags: 脚本定义路由器数据包start标识fiscapy
1条回答
网友
1楼 · 发布于 2024-05-29 07:33:49

发送/接收对由层实现的answers方法定义。在

例如,下面是IP层的answers方法:

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函数:

^{pr2}$

虽然正如您所发现的,它有一个缺点,即它不一定能及时启动。所以,您想看看sniff的实现方式。在内部,它使用conf.L2listen,您也可以使用它。在

因此,在发送请求之前,请执行s=conf.L2listen()操作,然后执行s.recv(65536)来接收数据包。您可以使用sel = select([s],[],[],0.001)等待一段时间,等待数据包到达。如果s in sel[0],则可以从套接字读取数据,否则超时时间已过。在

timeout参数以秒为单位,因此我的所有示例都指定了1毫秒的超时。在

相关问题 更多 >

    热门问题