使用 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() 方法。
Syntax: sniff( iface , count, prn, timeout = None )
Parameter:
- iface is the interface we want to sniff to be on. ( Default = All interfaces available).
- count is the total number of packets to be sniffed. (0 means infinity)
- prn is the callback method to be applied to every sniffed packet.
- timeout is the time after which you want to sniff function to stop working in s. (Default is none)
方法
- 导入模块
- 查找界面名称
- 将 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)
输出: