如何在Python中使用Scapy创建假接入点?实现教程

2021年11月16日16:27:01 发表评论 940 次浏览

本文通过使用 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 接入点列表中看到类似的内容:

如何在Python中使用Scapy创建假接入点?实现教程

现在让我们花点心思,同时创建许多假接入点:

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中使用Scapy创建假接入点?实现教程

Python创建假接入点示例 - 这是它在 Android 操作系统上的外观:

如何在Python中使用Scapy创建假接入点?实现教程

如果你不确定如何使用线程,请查看本教程。

这太神奇了,请注意,尝试连接到这些接入点之一将会失败,因为它们不是真正的接入点,只是一种错觉!

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: