python - Scapy 发送/接收的定义是什么?

标签 python wifi scapy

我正在使用 Scapy 编写一些 Wi-Fi 脚本,并且希望执行 WPS 请求。作为此过程的一部分,我需要处理一系列数据包,例如 EAPOL(开始),然后从路由器接收 EAP(请求、身份)数据包。

如果我使用适当的数据包执行 SRP(EAPOL),Scapy 将超时等待响应,因为对于 Scapy 使用的任何定义,身份请求似乎都不是对数据包的适当“响应”。

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

独立的嗅探线程(在单独的控制台窗口中启动)确实看到了 AP 响应,如下所示。

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

所以我的问题是

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

干杯。

最佳答案

发送/接收对由层实现的 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, possible_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],则可以从套接字读取数据,否则超时。

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

关于python - Scapy 发送/接收的定义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29252331/

相关文章:

python - python初学者错误中的变量增量

iphone - 室内 WiFi 定位在追踪运动方面的准确度如何?

ios - 有没有办法在iOS中自动化wifi

python - 通过python中的原始套接字发送scapy数据包

python - Google OAuth2 - 如何更改 expires_in 或 token_expiry 值?

python - Python 编程 : Controlling Stepper Motor + Raspberry Pi Zero + L293D IC

python - 如何从 protobuf 生成 python 类文件

android - 如何通过wifi查找设备的IP地址?

python - 使用Scapy作为IPS来拦截、选择和转发数据包

python - 使用 scapy 和 python 将 MAC 地址记录到 csv