利用 Scapy 库编写源路由攻击脚本

一、介绍

源路由攻击是一种网络攻击方法,攻击者通过利用IP数据包中的源路由选项来控制数据包的传输路径,从而绕过安全设备或防火墙,直接访问目标系统。源路由功能允许数据包的发送方指定数据包通过的路径,而不是由路由器根据路由表动态决定路径。虽然源路由在某些网络管理和诊断中有其合法用途,但也可以被恶意利用进行攻击。

1.1 源路由类型

  1. 松散源路由(Loose Source Routing, LSRR)
    • 数据包必须经过指定的一些中间节点,但在这些节点之间的路径由路由器自行决定。
  2. 严格源路由(Strict Source Routing, SSRR)
    • 数据包必须严格按照指定的路径经过所有中间节点。

1.2 攻击原理

在源路由攻击中,攻击者利用源路由选项创建数据包,并指定这些数据包应通过的路径。通过这种方式,攻击者可以:

  • 绕过防火墙和其他安全设备。
  • 访问本来无法直接访问的网络部分。
  • 进行网络探测和信息收集。
  • 实施其他类型的网络攻击,如中间人攻击。

1.3 防御措施

为了防止源路由攻击,可以采取以下措施:

  1. 禁用源路由功能

    • 在网络设备(如路由器、防火墙)上禁用源路由功能。这通常可以通过设备的配置接口完成。
  2. 配置防火墙规则

    • 配置防火墙规则以丢弃包含源路由选项的数据包。许多现代防火墙默认会丢弃这些数据包。
  3. 使用入侵检测系统(IDS)

    • 部署入侵检测系统,如Snort,监控网络流量,检测和报警包含源路由选项的数据包。
  4. 网络分段和隔离

    • 通过网络分段和隔离,限制攻击者能够到达的网络范围,减少攻击面。

二、实验环境

  • 攻击者IP地址:192.168.1.103
  • 中间节点IP地址:192.168.134.147
  • 目标IP地址:192.168.1.128

三、实验步骤

  1. 配置攻击环境:确保攻击者计算机安装了Scapy,并且能够访问中间节点和目标。

  2. 使用Scapy构造带有源路由选项的IP包

    我们将构造一百个数据包,使其经过中间节点192.168.1.133再到达目标192.168.1.128

from scapy.all import *
from scapy.layers.inet import IPOption
import time# 攻击者IP地址(源IP)
attacker_ip = "192.168.1.103"# 中间节点IP地址
middle_node_ip = "192.168.134.147"# 目标IP地址
target_ip = "192.168.1.128"# 构造带有源路由选项的IP包
lsrr_option = IPOption(b'\x83\x0c\x04' + inet_aton(middle_node_ip) + inet_aton(target_ip))ip_layer = IP(src=attacker_ip, dst=target_ip, options=[lsrr_option])
tcp_layer = TCP(dport=8030, flags='S')# 创建完整的数据包
packet = ip_layer / tcp_layer# 发送一百个数据包,每个之间间隔0.1秒
for _ in range(100):send(packet)time.sleep(0.1)  # 设置间隔时间,单位为秒

代码解析:

  1. 导入模块
    • from scapy.all import *:导入Scapy的所有功能。
    • from scapy.layers.inet import IPOption:从Scapy的inet层导入IPOption类,用于设置IP选项。
    • import time:导入Python标准库的time模块,用于控制时间间隔。
  2. 定义IP地址
    • attacker_ip:定义攻击者的IP地址。
    • middle_node_ip:定义中间节点的IP地址。
    • target_ip:定义目标的IP地址。
  3. 构造源路由选项
    • IPOption:创建一个IP选项实例。
    • b'\x83\x0c\x04':表示LSRR选项的类型和长度。
      • \x83:LSRR选项类型(131)。
      • \x0c:选项长度(12字节)。
      • \x04:指针位置(指向中间节点的IP地址)。
    • inet_aton(middle_node_ip):将中间节点IP地址转换为二进制格式。
    • inet_aton(target_ip):将目标IP地址转换为二进制格式。
    • 将这些部分连接起来,形成完整的LSRR选项。
  4. 构造IP层
    • IP:创建一个IP包实例。
    • src=attacker_ip:设置源IP地址。
    • dst=target_ip:设置目标IP地址。
    • options=[lsrr_option]:设置IP选项为之前构造的LSRR选项。
  5. 构造TCP层
    • TCP:创建一个TCP包实例。
    • dport=8030:设置目标端口为8030。
    • flags='S':设置TCP标志为SYN(表示连接请求)。
  6. 创建完整的数据包
    • 使用/操作符将IP层和TCP层组合起来,形成一个完整的数据包。
  7. 发送数据包
    • for _ in range(100):创建一个循环,循环100次。
    • send(packet):使用Scapy的send函数发送构造好的数据包。
    • time.sleep(0.1):在每次发送后,暂停0.1秒。这是为了控制发送速率,避免过快的发送可能导致网络拥堵或被检测。

注意:确认你所使用的网络设备是否支持源路由选项。一些现代网络设备默认会禁用这种功能 

四、防御源路由攻击

  1. 禁用源路由选项

    • 在路由器和防火墙中禁用IP包的源路由选项。
  2. 过滤和监控

    • 使用入侵检测系统(IDS)和防火墙规则过滤包含源路由选项的数据包。
    • 定期监控网络流量,检测和响应异常行为。
  3. 使用加密和认证

    • 使用安全协议(如HTTPS、SSH)加密通信,防止中间人攻击。
    • 在关键服务中实施强身份认证机制。

五、总结

通过上述实验,我们展示了如何利用源路由选项进行网络攻击。这种攻击可以用于多种目的,包括绕过访问控制和实施中间人攻击。为了保护网络免受源路由攻击,网络管理员应采取适当的安全措施,如禁用源路由选项、使用入侵检测系统以及加密网络通信。

再次强调,这些技术和方法应仅用于合法的安全测试和研究,未经授权的使用是非法的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/18432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计数排序法

计数排序的核心在于将输入数据转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 当输入的元素是n个0到k之间的整数时,它的运行时间复杂度是O(nk)。计数排序不是比较排序,…

Xshell 5(xmanager5)报错

总结 所有的错误都是因为Xshell版本太低,与新的Linux系统不兼容导致的。 所以解决办法都是使用Xshell7 XShell 7 (解压、运行绿化.bat) https://pan.baidu.com/s/151W_MeLrrceUZQIFiNlMdg?pwd8888错误1:找不到匹配的host key算…

【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)

【LeetCode刷题】Day 10 题目1:30. 串联所有单词的子串(困难)思路分析:思路1:滑动窗口哈希map 题目2:LCR 017.最小覆盖子串思路分析思路1:滑动窗口哈希表 题目1:30. 串联所有单词的子…

基于51单片机的直流电机调速设计

一.硬件方案 本系统采用STC89C51控制输出数据,由单片机IO口产生PWM信号,送到直流电机,直流电机通过测速电路将实时转速送回单片机,进行转速显示,从而实现对电机速度和转向的控制,达到直流电机调速的目的。…

20240528训练题目(2022 国际大学生程序设计竞赛亚洲区域赛 (南京站))

D题 题目描述 You’re the researcher of the International Chat Program Company (ICPC). Today, you discover the following chat history when reviewing some research data. SUA (2022/12/04 23:01:25) I’m out of ideas for competitive programming problems! Pl…

【TC8】如何测试IOP中PHY芯片的Llink-up time

在TC8一致性测试用例中,物理层的测试用例分为两个部分:IOP和PMA。其中IOP中对PHY芯片的Link-up时间的测试,又包含三个测试用例。它们分别是: OABR_LINKUP_01: Link-up time - Trigger: Power on Link PartnerOABR_LINKUP_02: Link-up time - Trigger: Power on DUTOABR_LIN…

qt把虚拟键盘部署到arm开发板上(imx6ull)

分为了qt官方配置的虚拟键盘以及各路大神自己开源的第三方键盘,我本来想尝试利用官方键盘结果一直失败,最后放弃了,后面我用的第三方键盘参考了如下文章: https://blog.csdn.net/2301_76250105/article/details/136441243 https…

算法基础之台阶-Nim游戏

台阶-Nim游戏 核心思想&#xff1a;博弈论 可以看作第i阶台阶上有i个含有i个石子的堆这样所有台阶上一共n!个堆就变成了经典Nim优化&#xff1a;发现偶数阶台阶上2n堆异或 0 , 奇数阶台阶异或 原本石子数量 因此 当遍历到奇数阶时异或一下就行 #include <iostream>…

git 学习随笔

git 学习随笔 基本概念 git 对待数据类似快照流的形式而不是类似 cvs 那样的纪录文件随时间逐步积累的差异 git 中所有数据在存储钱都会计算校验和&#xff08;hash) 三种状态&#xff1a;已提交(committed)&#xff0c;已修改(modified)&#xff0c;已暂存(staged)。 add…

二叉树习题精讲-单值二叉树

单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/univalued-binary-tree/description/ 判断这里面的所有数值是不是一样 方案1&#xff1a;遍历 方案2&#xff1a;拆分子问题 /*** Definition for a binary tree node.* struc…

AcWing 835. Trie字符串统计——算法基础课题解

AcWing 835. Trie 字符串统计 题目描述 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向集合中插入一个字符串 &#x1d465;&#xff1b;Q x 询问一个字符串在集合中出现了多少次。 共有 &#x1d441; 个操作&#xff0c;所有输入的字符串总长度不超过 1…

k8s群集调度之 pod亲和 node亲和 标签指定

目录 一 调度约束 1.1K8S的 List-Watch 机制 ⭐⭐⭐⭐⭐ 1.1.1Pod 启动典型创建过程 二、调度过程 2.1Predicate&#xff08;预选策略&#xff09; 常见的算法 2.2priorities&#xff08;优选策略&#xff09;常见的算法 三、k8s将pod调度到指定node的方法 3.1指…

Python并发编程 06 进程、协程

文章目录 一、多进程调用二、Process类1、主要参数2、实例方法3、属性4、代码示例 三、进程通讯1、进程队列通讯2、管道通讯3、Manager对象 四、进程同步五、进程池六、协程1、协程简述2、用greenlet库实现协程3、用gevent库实现协程 一、多进程调用 与多线程调用相似 from m…

最强端侧多模态模型MiniCPM-V 2.5,8B 参数,性能超越 GPT-4V 和 Gemini Pro

前言 近年来&#xff0c;人工智能领域掀起了一股大模型热潮&#xff0c;然而大模型的巨大参数量级和高昂的算力需求&#xff0c;限制了其在端侧设备上的应用。为了打破这一局限&#xff0c;面壁智能推出了 MiniCPM 模型家族&#xff0c;致力于打造高性能、低参数量的端侧模型。…

leetcode 802.找到最终的安全状态

思路&#xff1a;拓补排序 其实这道题只要把顺序倒过来就行了&#xff0c;我们首先看到没有出度的反而是终端点&#xff0c;我们不如让它反过来成为没有入度的点是终端店&#xff0c;这样的话我们用度的个数来找到终端点就很容易了。 那么这样的话&#xff0c;题目中说若点满…

微信小程序 蓝牙打印esc编码格式

esc.js var encode require("./encoding.js") var app getApp(); var jpPrinter {    createNew: function() {      var jpPrinter {};var data [];var bar ["UPC-A", "UPC-E", "EAN13", "EAN8", "C…

【深度学习】xformers与pytorch的版本对应关系

https://github.com/facebookresearch/xformers/tree/v0.0.23 找tag&#xff1a; tag下面写了对应关系&#xff1a; 安装指令就是&#xff1a; pip install xformers0.0.23 --no-deps -i https://download.pytorch.org/whl/cu118

react ant 表格实现 拖拽排序和多选

项目背景 : react ant 要实现 : 有多选功能(实现批量删除 , 也可以全选) 可以拖拽(可以复制 , 方便顶部的搜索功能) 要实现效果如下 1 这是最初的拖拽功能实现 , 不能复制表格里的内容 , 不符合要求 2 更改了ROW的内容 , 实现了可以复制表格内容 代码 //控制是否可以选中表格…

Unity中自动生成地图(代完善)

地图中有水果、房子、树木和道路。道路能通到水果旁。 代码&#xff1a; using UnityEngine; using System.Collections.Generic; using System.Text;public class TilemapGenerator : MonoBehaviour {public int mapWidth 30;public int mapHeight 20;private int[,] map;…

基于粒子群算法的网络最优节点部署优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于粒子群算法的网络最优节点部署优化,实现WSN网络的节点覆盖最大化。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 .................…