ESP32 WIFI使用介绍
ESP32 WIFI 概述
- WIFI 库支持配置及监控 ESP32 WIFI 连网功能。
- 支持配置
- station 模式(即 STA 模式或 WIFI 客户端模式),此时 ESP32 连接到接入点(AP)。
- AP 模式(即 soft-AP 模式或接入点模式),此时 station 接入点 ESP32。
- AP-STA 共存模式(ESP32 既是接入点,同时又作为 station 连接到另一个接入点)。
- 上述模式的各种安全模式(WPA、WPA2 及 WEP 等)。
- 扫描接入点(包括主动扫描和被动扫描)。
- 使用混杂模式监控 IEEE802.11 WIFI 数据包。
宏定义 WIFI_INIT_CONFIG_DEFAULT
- 配置
wifi_init_config_t 结构体的默认值。
#define WIFI_INIT_CONFIG_DEFAULT() { \.event_handler = &esp_event_send_internal, \.osi_funcs = &g_wifi_osi_funcs, \.wpa_crypto_funcs = g_wifi_default_wpa_crypto_funcs, \.static_rx_buf_num = CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM,\.dynamic_rx_buf_num = CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM,\.tx_buf_type = CONFIG_ESP32_WIFI_TX_BUFFER_TYPE,\.static_tx_buf_num = WIFI_STATIC_TX_BUFFER_NUM,\.dynamic_tx_buf_num = WIFI_DYNAMIC_TX_BUFFER_NUM,\.cache_tx_buf_num = WIFI_CACHE_TX_BUFFER_NUM,\.csi_enable = WIFI_CSI_ENABLED,\.ampdu_rx_enable = WIFI_AMPDU_RX_ENABLED,\.ampdu_tx_enable = WIFI_AMPDU_TX_ENABLED,\.amsdu_tx_enable = WIFI_AMSDU_TX_ENABLED,\.nvs_enable = WIFI_NVS_ENABLED,\.nano_enable = WIFI_NANO_FORMAT_ENABLED,\.rx_ba_win = WIFI_DEFAULT_RX_BA_WIN,\.wifi_task_core_id = WIFI_TASK_CORE_ID,\.beacon_max_len = WIFI_SOFTAP_BEACON_MAX_LEN, \.mgmt_sbuf_num = WIFI_MGMT_SBUF_NUM, \.feature_caps = g_wifi_feature_caps, \.sta_disconnected_pm = WIFI_STA_DISCONNECTED_PM_ENABLED, \.magic = WIFI_INIT_CONFIG_MAGIC\
};
函数 esp_wifi_init
- esp_err_t esp_wifi_init(wifi_init_config_t *config)
- 为 WiFi 驱动初始化 WiFi 分配资源,如 WiFi 控制结构、RX/TX 缓冲区、WiFi NVS 结构等,这个 WiFi 也启动 WiFi 任务。
- 必须先调用此 API,然后才能调用所有其他 WiFi API。
- 推荐使用 WIFI_INIT_CONFIG_DEFAULT 宏将配置初始化为默认值。
- wifi_init_config_t
- WIFI 初始化结构体。传递给
esp_wifi_init 调用的 WiFi 堆栈配置参数。
typedef struct {system_event_handler_t event_handler; /**< WiFi event handler */wifi_osi_funcs_t* osi_funcs; /**< WiFi OS functions */wpa_crypto_funcs_t wpa_crypto_funcs; /**< WiFi station crypto functions when connect */int static_rx_buf_num; /**< WiFi static RX buffer number */int dynamic_rx_buf_num; /**< WiFi dynamic RX buffer number */int tx_buf_type; /**< WiFi TX buffer type */int static_tx_buf_num; /**< WiFi static TX buffer number */int dynamic_tx_buf_num; /**< WiFi dynamic TX buffer number */int cache_tx_buf_num; /**< WiFi TX cache buffer number */int csi_enable; /**< WiFi channel state information enable flag */int ampdu_rx_enable; /**< WiFi AMPDU RX feature enable flag */int ampdu_tx_enable; /**< WiFi AMPDU TX feature enable flag */int amsdu_tx_enable; /**< WiFi AMSDU TX feature enable flag */int nvs_enable; /**< WiFi NVS flash enable flag */int nano_enable; /**< Nano option for printf/scan family enable flag */int rx_ba_win; /**< WiFi Block Ack RX window size */int wifi_task_core_id; /**< WiFi Task Core ID */int beacon_max_len; /**< WiFi softAP maximum length of the beacon */int mgmt_sbuf_num; /**< WiFi management short buffer number, the minimum value is 6, the maximum value is 32 */uint64_t feature_caps; /**< Enables additional WiFi features and capabilities */bool sta_disconnected_pm; /**< WiFi Power Management for station at disconnected status */int magic; /**< WiFi init magic number, it should be the last field */
} wifi_init_config_t;
- config
- 结构体指针。指向 WIFI 初始化配置结构体。
- return
- ESP_OK: 成功
- ESP_ERR_WIFI_NO_MEM: 内存不足
- others: esp_err.h
函数esp_wifi_set_mode
- esp_err_t esp_wifi_set_mode(wifi_mode_t mode)
- 设置 WIFI 操作模式。
- 可以设置为 station、soft-AP 或 station + soft-AP 模式,默认为 soft-AP 模式。
- wifi_mode_t
- WIFI 配置模式枚举。
ty
typedef enum {WIFI_MODE_NULL = 0, /**< null mode */WIFI_MODE_STA, /**< WiFi station mode */WIFI_MODE_AP, /**< WiFi soft-AP mode */WIFI_MODE_APSTA, /**< WiFi station + soft-AP mode */WIFI_MODE_MAX
} wifi_mode_t;
- mode
- WIFI 操作模式。
- return
- ESP_OK: 成功
- ESP_ERR_WIFI_NOT_INT: WIFI 未由
esp_wifi_init 初始化
-
- ESP_ERR_WIFI_ARG: 无效的参数
- other: esp_err.h
函数esp_wifi_set_config
- esp_err_t esp_wifi_set_config(wifi_interface_t interface, wifi_config_t *conf)
- 设置 ESP32 STA 或 AP 的配置。
- 该 API 只有在指定接口开启时才能调用,否则 API 失败。
- ESP32 仅限于一个通道,因此在 soft-AP + station 模式下,soft-AP 会自动调整其通道与 station 的通道相同。
- wifi_interface_t
- 指定接口枚举。
- 该 API 只有在指定接口开启时才能调用,否则 API 失败
typedef enum {WIFI_IF_STA = ESP_IF_WIFI_STA,WIFI_IF_AP = ESP_IF_WIFI_AP,
} wifi_interface_t;
- interface
- 接口
- wifi_config_t
- WIFI 配置。
- 账号、密码等。
typedef union {wifi_ap_config_t ap; /**< configuration of AP */wifi_sta_config_t sta; /**< configuration of STA */
} wifi_config_t;
- wifi_ap_config_t
- soft-AP 模式配置结构体。
typedef struct {uint8_t ssid[32]; /**< SSID of ESP32 soft-AP. If ssid_len field is 0, this must be a Null terminated string. Otherwise, length is set according to ssid_len. */uint8_t password[64]; /**< Password of ESP32 soft-AP. */uint8_t ssid_len; /**< Optional length of SSID field. */uint8_t channel; /**< Channel of ESP32 soft-AP */wifi_auth_mode_t authmode; /**< Auth mode of ESP32 soft-AP. Do not support AUTH_WEP in soft-AP mode */uint8_t ssid_hidden; /**< Broadcast SSID or not, default 0, broadcast the SSID */uint8_t max_connection; /**< Max number of stations allowed to connect in, default 4, max 10 */uint16_t beacon_interval; /**< Beacon interval which should be multiples of 100. Unit: TU(time unit, 1 TU = 1024 us). Range: 100 ~ 60000. Default value: 100 */wifi_cipher_type_t pairwise_cipher; /**< pairwise cipher of SoftAP, group cipher will be derived using this. cipher values are valid starting from WIFI_CIPHER_TYPE_TKIP, enum values before that will be considered as invalid and default cipher suites(TKIP+CCMP) will be used. Valid cipher suites in softAP mode are WIFI_CIPHER_TYPE_TKIP, WIFI_CIPHER_TYPE_CCMP and WIFI_CIPHER_TYPE_TKIP_CCMP. */bool ftm_responder; /**< Enable FTM Responder mode */
} wifi_ap_config_t;
- wifi_sta_config_t
- station 模式配置结构体。
typedef struct {uint8_t ssid[32]; /**< SSID of target AP. */uint8_t password[64]; /**< Password of target AP. */wifi_scan_method_t scan_method; /**< do all channel scan or fast scan */bool bssid_set; /**< whether set MAC address of target AP or not. Generally, station_config.bssid_set needs to be 0; and it needs to be 1 only when users need to check the MAC address of the AP.*/uint8_t bssid[6]; /**< MAC address of target AP*/uint8_t channel; /**< channel of target AP. Set to 1~13 to scan starting from the specified channel before connecting to AP. If the channel of AP is unknown, set it to 0.*/uint16_t listen_interval; /**< Listen interval for ESP32 station to receive beacon when WIFI_PS_MAX_MODEM is set. Units: AP beacon intervals. Defaults to 3 if set to 0. */wifi_sort_method_t sort_method; /**< sort the connect AP in the list by rssi or security mode */wifi_scan_threshold_t threshold; /**< When sort_method is set, only APs which have an auth mode that is more secure than the selected auth mode and a signal stronger than the minimum RSSI will be used. */wifi_pmf_config_t pmf_cfg; /**< Configuration for Protected Management Frame. Will be advertized in RSN Capabilities in RSN IE. */uint32_t rm_enabled:1; /**< Whether Radio Measurements are enabled for the connection */uint32_t btm_enabled:1; /**< Whether BSS Transition Management is enabled for the connection */uint32_t reserved:30; /**< Reserved for future feature set */
} wifi_sta_config_t;
- conf
- 结构体指针。指向 wifi_config_t WIFI 配置结构体。
- return
- ESP_OK: 成功
- ESP_ERR_WIFI_NOT_INIT: WIFI 没有被 esp_wifi_init 初始化
- ESP_ERR_INVALID_ARG: 无效的参数
- ESP_ERR_WIFI_IF: 无效的接口
- ESP_ERR_WIFI_MODE: 无效的模式
- ESP_ERR_WIFI_PASSWORD: 无效的密码
- ESP_ERR_WIFI_NVS: WIFI 内部 NVS 错误
- other: esp_err.h
函数esp_wifi_start
- esp_err_t esp_wifi_start(void)
- 根据当前配置启动 WIFI。
- 如果为 WIFI_MODE_STA 模式,则创建 station 控制块并启动 station。
- 如果为 WIFI_MODE_AP 模式,则创建 soft-AP 控制块并启动 soft-AP。
- 如果为 WIFI_MODE_APSTA 模式,则创建 soft-AP 和 station 控制块并启动 soft-AP 和 station。
- return
- ESP_OK: 成功
- ESP_ERR_WIFI_NOT_INIT: WIFI 没有被 esp_wifi_init 初始化
- ESP_ERR_INVALID_ARG: 无效的参数
- ESP_ERR_NO_MEM: 内存不足
- ESP_ERR_WIFI_CONN: WIFI 内部错误、station 或 soft-AP控制块错误
- other: esp_err.h
配网存储并清除配网信息接口
如果使用 esp_wifi_set_config 在恢复出厂设置时不知如何擦除flash 因为flash中保存有SN。
t
typedef enum {wifi_unconfiged = 0,wifi_configed = 0xAA,
}wifi_info_storage_t;
#define ID_AND_PWD_LEN (32+64)
/*********************************************** *函数名:clearWifiConfigFlag* *功能描述:清除配网标记,如果运行这个函数,可以配合esp_restart(),复位系统。重新配网* * -- 主要是取代nvs_flash_erase()函数,这个函数把所有的数据都擦除,是不对的。* *******************************************/
void clearWifiConfigFlag(void)
{nvs_handle my_handle;// 0.打开nvs_open("WIFI_CONFIG", NVS_READWRITE, &my_handle); // 1.写入标记 0x00,清除配网标记nvs_set_u8(my_handle, "WifiConfigFlag", wifi_unconfiged);// 2.提交 并保存表的内容ESP_ERROR_CHECK(nvs_commit(my_handle)); // 3.关闭nvs退出nvs_close(my_handle);
}
//保存wifi配置参数结构体变量wifi_config到nvs
static void saveWifiConfig(wifi_config_t *wifi_config)
{nvs_handle my_handle;// 0.打开nvs_open("WIFI_CONFIG", NVS_READWRITE, &my_handle); // 1.写入标记 0xaa,表示已经配过网nvs_set_u8(my_handle, "WifiConfigFlag", wifi_configed);// 2.写入AP ID和AP passwordESP_ERROR_CHECK(nvs_set_blob(my_handle, "wifi_config", wifi_config, ID_AND_PWD_LEN));// 3.提交 并保存表的内容ESP_ERROR_CHECK(nvs_commit(my_handle)); // 4.关闭nvs退出nvs_close(my_handle);
}//从nvs中读取wifi配置到给定的sta_config结构体变量
static esp_err_t readWifiConfig(wifi_config_t *sta_config)
{nvs_handle my_handle;unsigned char u8WifiConfigVal;// 0.打开nvs_open("WIFI_CONFIG", NVS_READWRITE, &my_handle); // 1.读取标志位,并判断nvs_get_u8(my_handle, "WifiConfigFlag", &u8WifiConfigVal);if(u8WifiConfigVal != wifi_configed){// 1.1 没有配过网,关闭nvs,返回错误码ESP_LOGI(TAG, "no wifi config,read fail!");nvs_close(my_handle); return ESP_FAIL;}else{ // 1.2 进入下个步骤ESP_LOGI(TAG, "wifi configed ,read ok!"); }// 2.读取上一次配网的ID,passworduint32_t len = ID_AND_PWD_LEN;esp_err_t err = nvs_get_blob(my_handle, "wifi_config", sta_config, &len);ESP_LOGI(TAG, "readout SSID:%s", sta_config->sta.ssid);ESP_LOGI(TAG, "readout PASSWORD:%s", sta_config->sta.password);// 3.关闭nvs退出nvs_close(my_handle);return err;
}
ESP获取连接的WiFi信号强度
通过WiFi扫描接口过滤出连接的WiFi信息
wifi_sta_record* get_rssi(void)
{uint16_t number = 1;uint16_t ap_count = 0;wifi_sta_record* sta_record = (wifi_sta_record*) malloc (sizeof(wifi_sta_record));wifi_ap_record_t ap_info[1];wifi_config_t wifi_sta_cfg;BLUFI_INFO("start scan");memset(ap_info, 0, sizeof(ap_info));if (esp_wifi_get_config(WIFI_IF_STA, &wifi_sta_cfg) != ESP_OK)//获取已连接的ap参数{BLUFI_ERROR("esp_wifi_get_config err"); return NULL;}wifi_scan_config_t scan_config = { 0 };scan_config.ssid = wifi_sta_cfg.sta.ssid;//限制扫描的ap的ssidstrcpy((char *)sta_record->ssid, (char*)wifi_sta_cfg.sta.ssid);scan_config.bssid = wifi_sta_cfg.sta.bssid;//限制扫描的ap的mac地址esp_wifi_scan_start(&scan_config, true);//阻塞扫描ap,scan_config为扫描的参数ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));//获取扫描到的ap信息ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));//获取扫描到的ap数量,因为限制了ssid和mac,因此最多只会扫描到1个for (int i = 0; (i < 1) && (i < ap_count); i++) {BLUFI_INFO("SSID \t\t%s", ap_info[i].ssid);BLUFI_INFO("RSSI \t\t%d", ap_info[i].rssi);ESP_LOGI(TAG, "Channel \t\t%d", ap_info[i].primary);ESP_LOGI(TAG, "BSSID: \t\t%02x:%02x:%02x:%02x:%02x:%02x", ap_info[i].bssid[0],ap_info[i].bssid[1],ap_info[i].bssid[2],ap_info[i].bssid[3],ap_info[i].bssid[4],ap_info[i].bssid[5]);}esp_wifi_scan_stop(); //from start to stop need 3210msBLUFI_INFO("stop scan\r\n");sta_record->rssi = ap_info[0].rssi;return sta_record;
}//测试使用
wifi_sta_record* sta_info;
sta_info = get_rssi();
BLUFI_INFO("blufi sta signal strength ssid:%s, rssi:%d ",sta_info->ssid,sta_info->rssi );
方法二:直接使用乐鑫封好的API:esp_wifi_sta_get_ap_info
wifi_sta_record* get_rssi(void)
{wifi_sta_record* sta_record = (wifi_sta_record*) malloc (sizeof(wifi_sta_record));wifi_ap_record_t ap_info[1];memset(ap_info, 0, sizeof(ap_info));//获取当前连接的WiFi信息if (esp_wifi_sta_get_ap_info(ap_info)!= ESP_OK){BLUFI_ERROR("esp_wifi_sta_ap_info err"); return sta_record;}strcpy((char *)sta_record->ssid, (char*)ap_info[0].ssid);sta_record->rssi = ap_info[0].rssi;return sta_record;
}
相关文章:
ESP32 WIFI使用介绍
ESP32 WIFI 概述 WIFI 库支持配置及监控 ESP32 WIFI 连网功能。支持配置 station 模式(即 STA 模式或 WIFI 客户端模式),此时 ESP32 连接到接入点(AP)。AP 模式(即 soft-AP 模式或接入点模式)&…...

JavaEE简单实例——MyBatis的一对一映射的嵌套查询的简单介绍和基础配置
简单介绍: 在前一章我们介绍了关于MyBatis的多表查询的时候的对应关系,其中有三种对应关系,分别是一对一,一对多,多对多的关系。如果忘记了这三种方式的对应形式可以去前面看看,一定要记住这三种映射关系的…...
详解指针(进阶版)(1)
前言:总篇章分为(1)和(2),本篇内容包括:指针数组,数组指针,&数组名与数组名的区分 数组传参 ,函数指针,函数指针数组 part 1:指…...

【OJ】盐荒子孙
📚Description: 盐体图 盐是对人类生存具有重要意义的物质之一。当中国古人从肉食为主转向谷食为主的时候,吃盐的需求就发生了,因为动物血肉里面包含有足够人体所需的盐分,而谷 物本身不包含盐分。在长达几十万年的旧石器时代&…...

Java数据结构 —— 手写线性结构(稀疏数组、栈、队列、链表)
目录 稀疏数组 顺序表 链表 单向顺序链表 双向链表 双向循环链表求解约瑟夫环(Joseph) 栈 顺序栈 队列 顺序队列 顺序循环队列 稀疏数组 当一个数组中大部分值为0,或者相同时,可以采用稀疏数组的方式来保存,从而节约存储…...

docker部署gitlab过程中遇到的一些问题记录
文章目录用nginx代理docker部署的gitlab服务密码重置docker0网卡异常离线安装apt的包用nginx代理docker部署的gitlab服务 一般咱们不会去暴露很多端口给外面,所以部署完gitlab后,我希望能够用nginx来代理我们的gitlab服务。 gitlab的docker部署参考这个…...

数组的定义与使用
文章目录 数组的基本概念数组的基本用法数组与方法互操作一、数组的基本概念 数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。 注意:1. 数组中存放的元素其类型相同 2. 数组的空间是连在一起的 3. 每个空间有自己的编号࿰…...
SAP ABAP用程序删除开发KEY
在BASISI系统管理中,用户的开发Key存储在DEVACCESS表中,如果由于审计需要删除一些用户的开发Key,而系统有限制SM30, SE16 or SE16N 等事务码的使用,你就可以通过一个小程序去删除开发Key。 代码如下: REPORT ZBCDEV…...
安卓设备TF卡概率性无法识别问题
现象 使用t卡的设备出货前检测是正常的,放在仓库中或出货后再开机,有概率的机器无法识别,重新插拔或重启无效,拔下来放pc电脑上识别后再插回设备则恢复正常能识别。 设备信息 系统: Android 8.1.0 数量:抽检有12%的设备无法识别 TF卡:SanDisk Ultra 64GB 10 A1 microS…...

linux安装nodejs和微信小程序自动化部署操作
一.运行环境安装 Node.js 并且版本大于 8.0基础库版本为 2.7.3 及以上开发者工具版本为 1.02.1907232 及以上安装node.js(1).下载node包官网地址:https://nodejs.org/en/download/如果英文不好的,可以看中文网站:https://nodejs.org/zh-cn/download/点击上面的进行下载,当然,也…...

JavaScript高级 Proxy Reflect
1. Proxy 1. 监听对象的变化 有一个对象,我们希望监听这个对象中的属性被设置或获取的过程 我们可以通过 Object.defineProperty 来实现 const obj {name: "why",age: 18,height: 1.88 }// 需求: 监听对象属性的所有操作 // 监听属性的操作 // 1.针对…...

Eth-trunk :LACP模式链路聚合实战
Eth-trunk : LACP模式链路聚合实战 需求描述 PC1和PC3数据vlan10 ,网段为192.168.10.0 /24PC2和PC4数据vlan20 ,网段为192.168.20.0 /24确保设备之间互联互通,使用最大互联带宽并没有环路确保相同网段的PC可以互通判断交换机之间的每个端口…...
【第二章 - 线性表之顺序表】- 数据结构(八千字详解)
目录 一、线性表的定义和特点 二、线性表的顺序表示和实现 2.1 - 线性表的顺序存储表示 2.2 - 顺序表中基本操作的实现 三、练习 3.1 - 移除元素 3.2 - 删除有序数组中的重复项 3.3 - BC100 有序序列合并 3.4 - 88.合并两个有序数组 四、顺序表的问题及思考 线性表、…...
【史上最全面esp32教程】RGB彩灯篇
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录rgb彩灯的介绍使用方法连线库操作彩灯变换颜色实验彩灯呼吸灯效果总结提示:以下是本篇文章正文内容,下面案例可供参考 rgb彩灯的介绍 ESP32…...
大规模 IoT 边缘容器集群管理的几种架构-5-总结
前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介大规模 IoT 边缘容器集群管理的几种架构-1-RancherK3s大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad大规模 IoT 边缘容器集群管理的几种架构-3-Portainer大规模 IoT 边缘容器集群管…...

逆风翻盘拿下感知实习offer,机会总是留给有准备的人
个人背景211本,985硕,本科是计算机科学与技术专业,研究生是自学计算机视觉方向,本科主要做C和python程序设计开发,java安卓开发,研究生主要做目标检测,现在在入门目标跟踪和3d目标检测。无论文&…...

SpringBoot整合阿里云OSS文件上传、下载、查看、删除
SpringBoot整合阿里云OSS文件上传、下载、查看、删除1、开发准备1.1 前置知识1.2 环境参数1.3 你能学到什么2. 使用阿里云OSS2.1 创建Bucket2.2 管理文件2.3 阿里云OSS文档3. 项目初始化3.1 创建SpringBoot项目3.2 Maven依赖3.3 安装lombok插件4. 后端服务编写4.1 阿里云OSS配置…...

对话数字化经营新模式:第2届22客户节(22Day)年猪宴圆满结束!
2023年2月22日,由杭州电子商务研究院联合贰贰网络(集团)、TO B总监联盟等发起举办的“第二届客户节22Day”暨2022年度爱名奖 AM AWARDS颁奖及22年猪宴沙龙活动圆满结束。 (主持人:杜灵芝) 本次沙龙邀请到浙江工业大学管理学院程志…...
数据结构——第二章 线性表(5)——双向循环链表
双向循环链表1.双向循环链表的定义2.双向循环链表的基本操作实现2.1 双向循环链表的初始化操作2.2.双向循环链表的插入操作2.3. 双向循环链表的删除操作1.双向循环链表的定义 单向链表便于查询后继结点,不便于查询前驱结点。为了方便两个方向的查询,可以…...

4面美团软件测试工程师,却忽略了这一点,直接让我前功尽弃
说一下我面试别人时候的思路 反过来理解,就是面试时候应该注意哪些东西;用加粗部分标注了 一般面试分为这么几个部分: 一、自我介绍 这部分一般人喜欢讲很多,其实没必要。大约5分钟内说清楚自己的职业经历,自己的核…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...