📜  使用 Scapy Python查找所有 Wifi 设备

📅  最后修改于: 2022-05-13 01:55:17.418000             🧑  作者: Mango

使用 Scapy Python查找所有 Wifi 设备

Scapy 是 Python2 和 Python3 都支持的库。它用于与网络上的数据包进行交互。它具有多种功能,我们可以通过这些功能轻松伪造和操纵数据包。通过 scapy 模块,我们可以创建不同的网络工具,如 ARP Spoofer、Network Scanner、packet dumpers 等。该模块可用于创建与网络安全和道德黑客相关的更高级工具。

在本文中,我们将了解如何获取您周围连接的各种无线网络的 mac 地址以及它们发送的数据包类型。我们将探索 WLAN 标头中的 Adress2,它是发射机地址。然后我们将创建一组这些地址并打印我们得到的所有唯一地址。

我们使用无线设备的 Dot 11 层来获取其地址和有效载荷。 Dot11 是无线通信网络全球规范的技术名称。

要使 scapy 成功运行,应满足以下条件:

对于 Windows:



  • 安装 WinPcap。
  • 转到开始 -> 命令提示符 -> 在管理中打开。并使用命令“ipconfig/all”并复制我们将来将使用的无线适配器的描述。它看起来像这个“Qualcomm QCA9377 802.11ac 无线适配器”。
  • 现在到您正在使用的 IDE 并打开终端并使用“pip install scapy”安装 scapy。

对于 Linux:

只需使用终端使用“pip install scapy”安装 scpay 并使用它。不需要额外的过程。为了获得所需的地址和数据包,使用了 scapy 模块的 sniff() 方法。

方法

  • 导入模块
  • 查找界面名称
  • 将 IFACE_NAME 声明为网卡描述,作为接口提供给嗅探函数
  • 使用所需参数调用 sniff()函数

示例 1:打印所有检测到的地址

Python3
import sys
from scapy.all import *
  
IFACE_NAME = "Qualcomm QCA9377 802.11ac Wireless Adapter"
devices = set()
  
  
def PacketHandler(pkt):
    if pkt.haslayer(Dot11):
        dot11_layer = pkt.getlayer(Dot11)
          
        if dot11_layer.addr2 and (dot11_layer.addr2 not in devices):
            devices.add(dot11_layer.addr2)
            print(dot11_layer.addr2)
  
  
sniff(iface=IFACE_NAME, count=1, prn=PacketHandler)


Python3
import sys
from scapy.all import *
  
IFACE_NAME = "Qualcomm QCA9377 802.11ac Wireless Adapter"
devices = set()
  
  
def PacketHandler(pkt):
    if pkt.haslayer(Dot11):
        dot11_layer = pkt.getlayer(Dot11)
          
        if dot11_layer.addr2 and (dot11_layer.addr2 not in devices):
            devices.add(dot11_layer.addr2)
            print(len(devices), dot11_layer.addr2, dot11_layer.payload.name)
  
  
sniff(iface=IFACE_NAME, count=100, prn=PacketHandler)


输出:

示例 2:打印所有检测到的数据包类型和地址

蟒蛇3

import sys
from scapy.all import *
  
IFACE_NAME = "Qualcomm QCA9377 802.11ac Wireless Adapter"
devices = set()
  
  
def PacketHandler(pkt):
    if pkt.haslayer(Dot11):
        dot11_layer = pkt.getlayer(Dot11)
          
        if dot11_layer.addr2 and (dot11_layer.addr2 not in devices):
            devices.add(dot11_layer.addr2)
            print(len(devices), dot11_layer.addr2, dot11_layer.payload.name)
  
  
sniff(iface=IFACE_NAME, count=100, prn=PacketHandler)

输出: