📜  如何在Python中使用 Scapy 创建假接入点?

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

如何在Python中使用 Scapy 创建假接入点?

在本文中,我们将讨论如何在Python中使用scapy模块创建假接入点

这个任务可以在Python包scapy-fakeap的帮助下完成。使用这个库的目的不仅是制作假接入点,而且是测试 802.11 协议及其实现。

Scapy是一个Python模块,用于与网络上的数据包进行交互。它具有多种功能,我们可以通过这些功能轻松伪造和操纵数据包。它是一个功能强大的交互式数据包操作程序。它能够伪造或解码多种协议的数据包,通过网络发送它们,捕获它们,匹配请求和回复等等。 Scapy可以轻松处理大多数经典任务,例如扫描、跟踪路由、探测、单元测试、攻击或网络发现。它可以替代hping、arpspoof、arp-sk、arping、p0f甚至Nmap、tcpdumptshark的某些部分。

安装 :

要使用这个库,你需要在你的系统中安装以下Python包:

  • 阴森森的
  • ip
  • 空气蒙
  • dnsmasq(可选)

这些所有Python包都可以通过运行以下命令以简单的步骤安装:  

pip3 install scapy-fakeap

笔记:

  • 为了深入了解代码,我们都需要将您的设备或网络保持在监控模式。
  • 确保您使用的是基于 Unix 或 Linux 的系统。

为了让我们的系统保持更多监控,我们使用了一些实用程序,即aircrack-ng 。可以使用以下命令安装它:

apt-get install aircrack-ng

进入监听模式的步骤:

  • 使用airmon-ng命令启用监控模式
  • 首先,使用以下命令终止系统的所有进程:
airmon-ng check kill
  • 为此启用您的 WLAN 网络,运行命令ifconfig检查系统中的活动网络,然后运行以下命令:
airmon-ng start (your WLAN name)

这将激活您的 WLAN 连接。

您已准备好进一步构建虚假接入点

现在我们将生成一个随机 MAC 地址并设置我们要创建的接入点的名称,然后我们创建一个 802.11 帧,字段为:

  1. type=0:这将表明这是一个管理帧。
  2. subtype :这将表明这个管理帧是一个信标帧。
  3. addr1 :这将引用目标 mac 地址。
  4. addr2 :这将指源 MAC 地址或发件人的 MAC 地址。
  5. addr3 :这将指接入点的 MAC 地址。

现在我们将使用addr2addr3的相同 MAC 地址,因为发送方是接入点。然后我们将使用ssid 信息创建我们的信标帧,然后堆叠在一起并使用scapy模块的sendp()方法发送它们。下面是实现:

Python3
# Import module
from scapy.all import *
 
# Make an variable interface and assign
# this name of wlan connection name "my-Wlan"
interface = "my_Wlan"
 
# This will be sender's MAC address
# This is thre random MAC address generated
sender = RandMAC()
 
# Assign access point name
access_point_name = "Test"
 
# Here we will define 802.11 frame
dot11 = Dot11(type=0, subtype=8,
              addr1="ff:ff:ff:ff:ff:ff",
              addr2=sender, addr3=sender)
beacon = Dot11Beacon()
 
# Assign ssid in frame
e_SSID = Dot11Elt(ID="SSID", info=access_point_name,
                  len=len(access_point_name))
 
# stack all the layers and add a RadioTap
frame = RadioTap()/dot11/beacon/e_SSID
 
# Send the frame in layer 2 every 100 milliseconds
# using the iface interface
sendp(frame, inter=0.1, iface=interface, loop=1)


输出:

当您到达脚本的最后一行并且loop=0时,您的系统将仅发送 1 个数据包作为接入点。

当您到达最后一行代码时 loop=1下面的输出将生成,因为系统将数据包作为访问点连续发送,这将是假的。

ctrl+c后,您的系统将停止发送数据包。