创建ESP32开源WiFi MAC(介质访问控制)层

内置WiFi

内置的 WiFi.h 库将使我们能够轻松使用 ESP32 板的 WiFi 功能。

连接到 Wi-Fi 接入点:

#include <WiFi.h>const char* ssid = "yourNetworkName";
const char* password = "yourNetworkPassword";void setup(){Serial.begin(115200);delay(1000);WiFi.mode(WIFI_STA); //OptionalWiFi.begin(ssid, password);Serial.println("\nConnecting");while(WiFi.status() != WL_CONNECTED){Serial.print(".");delay(100);}Serial.println("\nConnected to the WiFi network");Serial.print("Local ESP32 IP: ");Serial.println(WiFi.localIP());
}void loop(){}
Connecting
................
Connected to the WiFi network
Local ESP32 IP: 192.168.43.129

获取WiFi网络信息

创建开源WiFi MAC

在我们开始对 802.11 PHY 硬件的工作原理以及我们如何与其交互进行逆向工程之前,我们首先需要找到或构建有帮助的工具。我们将使用 3 种主要方法:

  • 静态逆向工程
  • 模拟器中的动态代码分析
  • 真实硬件上的动态代码分析

静态逆向工程

对于静态分析,我们使用 NSA 开发的开源逆向工程工具 Ghidra。 开箱即用时,Ghidra 尚不支持 Xtensa(ESP32 的 CPU 架构),但有一个插件可以增加支持。 ESP32 SDK 中使用的构建工具会生成 ELF 文件(一种可以包含元数据的二进制文件)和平面二进制文件:使用 ELF 文件的优点是可以自动设置大多数函数名称。

模拟器中的动态分析

下面是 QEMU 记录的单个内存访问的示例:这是对地址 3ff46094 的写入(W),值为 00010005,由函数 ram_pbus_force_test 完成。调用堆栈的其余部分也会被记录,并转换为符号名称(如果可用)。

W 3ff46094 00010005 ram_pbus_force_test 400044f4 set_rx_gain_cal_dc set_rx_gain_testchip_70 set_rx_gain_table bb_init register_chipv7_phy esp_phy_load_cal_and_init esp_phy_enable wifi_hw_start wifi_start_process ieee80211_ioctl_process ppTask vPortTaskWrapper

最后,我们还更正了 MAC 地址的处理,以便数据包捕获在数据包中包含正确的 MAC 地址,而不是硬编码地址。

真实硬件进行动态分析

为了动态分析真实硬件上的固件,我们使用 JTAG 硬件调试接口。 通过在ESP32和JTAG调试器之间连接一些跳线,我们可以调试ESP32。 我们按照此文中描述的步骤操作,使 JTAG 调试器 (CJMCU-232H) 正常工作。

软件MAC和硬件MAC

SoftMAC(软件 MAC)和 HardMAC(硬件 MAC)是指实现 Wi-Fi MAC 层的两种不同方法。 SoftMAC 依靠软件来管理 MAC 层功能,这提供了灵活性且易于修改,但会消耗更多的功率/CPU 周期。 另一方面,HardMAC 将 MAC 层处理卸载到专用硬件,从而减少了 CPU 使用率和功耗,但限制了在不更改硬件的情况下适应新功能的能力。

通过编写一些仅循环发送数据包的最小固件,并使用前面描述的三种逆向工程策略,确定了发送数据包的 Wi-Fi 硬件生命周期的高级概述:

调用 esp_wifi_start(),这间接调用了 esp_phy_enable()。esp_phy_enable() 负责初始化 wifi 硬件。现在,我们准备发送数据包:

传输数据包

作为(非常有限的)概念验证,我们希望通过直接使用内存映射外设来发送任意 802.11 帧,因此无需使用 SDK 函数。 从上面的生命周期图中可以看到,在传输之前,我们首先需要初始化wifi硬件。 不幸的是,这种初始化比发送数据包复杂得多:为了初始化硬件,需要大约 50000 次外围存储器访问,而传输数据包(包括处理中断)则需要大约 50 次。 这些根本不是精确的数字,但它们给出了所涉及的复杂性的一个概念。

接收数据包

参阅一:亚图跨际
参阅二:亚图跨际

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

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

相关文章

GraalVM 原生镜像支持中文文档

本文为官方文档直译版本。原文链接 GraalVM 原生镜像支持中文文档 引言GraalVM 原生镜像介绍与 JVM 部署的主要区别了解 Spring Ahead-of-Time 处理源代码生成生成提示文件生成代理类 开发您的第一个 GraalVM 原生应用程序应用样本使用构建包构建原生映像系统要求使用 Maven使用…

word press 好用的插件

Custom Post Type UI Filester-File Manager Pro 同样支持在 WordPress 后台编辑、删除、上传、下载、压缩、复制和粘贴文件和文件夹等操作&#xff0c;并且编辑文件时&#xff0c;支持代码高亮显示。 Custom Post Type UI Database Backup for WordPress 按需备份WordPr…

L1-012 计算指数(Java)

题目 真的没骗你&#xff0c;这道才是简单题 —— 对任意给定的不超过 10 的正整数 n&#xff0c;要求你输出 2n。不难吧&#xff1f; 输入格式&#xff1a; 输入在一行中给出一个不超过 10 的正整数 n。 输出格式&#xff1a; 在一行中按照格式 2^n 计算结果 输出 2n 的值。…

深度解析HubSpot数据分析:洞察未来商业趋势

在当今数字化的商业环境中&#xff0c;数据是推动决策和业务增长的关键。作为业内领先的CRM平台&#xff0c;HubSpot不仅为企业提供了高效的客户关系管理工具&#xff0c;同时也成为了数据分析的利器。 1. HubSpot数据分析的核心价值 1.1 洞察客户行为和趋势 HubSpot数据分析…

【打卡】牛客网:BM76 正则表达式匹配

模板的&#xff1a; 关键思想是&#xff1a; 当pattern遇到*时&#xff0c;需要考虑两种情况&#xff1a; str的当前字符和pattern的*前的字符相同&#xff0c;例如str“ab”&#xff0c;pattern“abb*”&#xff0c;“b”和“b*”相同&#xff0c;有两种情况可以选择&#xf…

C语言代码 变种水仙花数

变种水仙花数&#xff1a;把任意的数字从中间拆分成两个数字&#xff0c;如1461可拆分为1和461&#xff1b;14和61&#xff1b;146和1&#xff0c;若所有拆分后的乘积之和等于自身则是一个水仙花数。 14611*461 14*61 146*1 求出5位数中的所有水仙花数。 代码示例&#xf…

MySQL修炼手册1——初探MySQL:连接数据库并执行第一条SQL语句

写在开头 我们将深入学习MySQL的数据库连接和基本SQL语句&#xff0c;通过实际操作演示每个步骤&#xff0c;帮助读者更好地理解和掌握MySQL的基础知识。 1 数据库连接 1.1 连接到不同主机的数据库 连接远程数据库 mysql -h remote_host -u your_username -premote_host: …

【野火i.MX6ULL开发板】在MobaXterm平台利用Type-C线串口连接开发板

0、前言 参考文献&#xff1a; http://t.csdnimg.cn/9iRTm http://t.csdnimg.cn/Z0n60 问题&#xff1a;一直识别不出com口&#xff0c; 拟解决思路&#xff1a; 百度网盘重新下载Debian镜像&#xff0c;烧入full版镜像&#xff0c;随便换一下USB插口&#xff08;电脑主机上…

编程羔手(新手):什么时候用常量,什么时候用枚举类?

静态常量和枚举都是在编程中表示常量的方式&#xff0c;但它们在使用场景和目的上有一些不同。 静态常量&#xff1a; 使用静态常量通常是为了表示一些简单的常量值&#xff0c;例如字符串、数字等。适用于常量值在编译时已知&#xff0c;不需要动态生成的情况。通过静态常量可…

一个大场景下无线通信仿真架构思路(对比omnet与训练靶场)

2020年分析过omnet的源码&#xff0c;读了整整一年&#xff0c;读完之后收获不小&#xff0c;但是也遗憾的发现这个东西只适合实验室做研究的人用于协议的研发与测试&#xff0c;并不适合大场景&#xff08;军事游戏等&#xff09;的应用&#xff0c;因为其固有架构更侧重于每个…

PostGIS学习教程二十:3-D

PostGIS学习教程二十&#xff1a;3-D 注意&#xff1a;本文介绍许多PostGIS2.0及更高版本才支持的功能。 文章目录 PostGIS学习教程二十&#xff1a;3-D一、3-D几何图形二、3-D函数三、N-D索引 一、3-D几何图形 到目前为止&#xff0c;我们一直在处理2-D几何图形&#xff08;…

remote pdb使用记录

以前代码debug一直用原始的pdb&#xff0c;方便好用。最近接触的代码框架使用了ddp加速训练&#xff0c;导致pdb不好用了。 具体来说&#xff0c;在ddp训练时&#xff0c;用单卡训练&#xff0c;跟非ddp模式是一致的&#xff0c;python -m pdb xxx.py的模式也能正常用pdb。但是…

强化学习的数学原理学习笔记 - Actor-Critic

文章目录 概览&#xff1a;RL方法分类Actor-CriticBasic actor-critic / QAC&#x1f7e6;A2C (Advantage actor-critic)Off-policy AC&#x1f7e1;重要性采样&#xff08;Importance Sampling&#xff09;Off-policy PGOff-policy AC &#x1f7e6;DPG (Deterministic AC) 本…

C#,入门教程(13)——字符(char)及字符串(string)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(12)——数组及数组使用的基础知识https://blog.csdn.net/beijinghorn/article/details/123918227 字符串的使用与操作是必需掌握得滚瓜烂熟的编程技能之一&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; C#语言实…

python接口自动化测试框架介绍

之前在项目中搞了一套jmeter jenkins git ant接口自动化测试框架&#xff0c;在项目中运行了大半年了&#xff0c;效果还不错&#xff0c; 最近搞了一套requests unittest ddt pymysql BeautifulReport的接口自动化测试框架&#xff0c; 测试用例在yaml文件中&#xff0c…

Java面向对象综合练习(拼图小游戏),用java图形化界面实现拼图小游戏

1. 设计游戏的目的 锻炼逻辑思维能力利用Java的图形化界面&#xff0c;写一个项目&#xff0c;知道前面学习的知识点在实际开发中的应用场景 2. 游戏的最终效果呈现 Hello&#xff0c;各位同学大家好。今天&#xff0c;我们要写一个非常有意思的小游戏 —《拼图小游戏》 我们…

MySQL语法及IDEA使用MySQL大全

在项目中我们时常需要写SQL语句&#xff0c;或简单的使用注解直接开发&#xff0c;或使用XML进行动态SQL之类的相对困难的SQL&#xff0c;并在IDEA中操控我们的SQL&#xff0c;但网上大都图方便或者觉得太简单了&#xff0c;完全没一个涵盖两个方面的讲解。 单表&#xff1a; …

并发程序设计--D11D12进程间通信

概念&#xff1a;就是进程和进程之间交换信息。 常用通信方式 无名管道&#xff08;pipe&#xff09; 有名管道 &#xff08;fifo&#xff09; 信号&#xff08;signal&#xff09; 共享内存映射(mmap) 套接字&#xff08;socket&#xff09; 过时的IPC通信方式 System…