网络扫描的整个扫描流程,最强大的网络扫描工具

首页 > 实用技巧 > 作者:YD1662023-12-06 06:51:17

网络扫描的整个扫描流程,最强大的网络扫描工具(1)

一、ESP-C3的WIFI 的功能简介

ESP-C3 是一种小型,低功耗的 Wi-Fi 模块,具有集成的 TCP/IP 协议栈,可以方便地与其他电子设备进行连接。它的 Wi-Fi 功能是通过芯片内部的 ESP32 控制器来实现的。

ESP-C3 可以用作一个独立的 Wi-Fi 芯片,也可以嵌入到其他电子设备中,以实现远程控制和数据采集等功能。

ESP-C3支持两种操作模式:

在 AP 模式下,ESP-C3 可以当作一个无线路由器,允许其他设备连接到它;
而在 STA 模式下,ESP-C3 可以连接到其他的 Wi-Fi 热点。

整体流程示意图:

网络扫描的整个扫描流程,最强大的网络扫描工具(2)

二、ESP-C3 扫描WiFi操作的流程1. 初始化 NVS 模块nvs_flash_init

首先,通过调用 nvs_flash_init 函数初始化 NVS 模块。

2. 初始化网络接口模块esp_netif_init

通过调用 esp_netif_init() 函数初始化网络接口模块。
该函数主要负责初始化网络接口模块的基本框架和配置。在初始化完成后,程序就可以通过网络接口模块实现对网络连接的控制和管理。

3. 创建事件循环esp_event_loop_create_default

通过调用 esp_event_loop_create_default() 函数创建事件循环,该循环将处理所有的网络事件。
该函数是ESP-IDF提供的一个创建默认事件循环的函数。事件循环是ESP-IDF中的一种基本机制,用于处理系统中各种事件,如 WiFi连接事件、TCP连接事件等。

该函数创建一个默认的事件循环后,就会将其注册到ESP-IDF系统中,在创建完成后,程序就可以通过该事件循环进行事件的处理。

4. 配置 WiFi 模块esp_wifi_init

通过调用 esp_wifi_init() 函数配置 WiFi 模块,该函数的参数是一个 wifi_init_config_t 结构体,可以使用默认配置,也可以自定义配置。

esp_wifi_init() 函数是 ESP-IDF 中 WIFI 模块初始化的入口。它需要一个指向 wifi_init_config_t 结构体的指针作为参数。

wifi_init_config_t 结构体是 WIFI 模块初始化的配置结构体,它的作用是配置 WIFI 模块的一些初始化参数,如信道、功率、主动探测时间等。它包含以下成员:

如果不需要配置,也可以调用预定义好的常量 WIFI_INIT_CONFIG_DEFAULT() 进行初始化。

5. 设置 WiFi 模式esp_wifi_set_mode

通过调用 esp_wifi_set_mode 函数设置 WiFi 模式,该模式应设置为 WIFI_MODE_STA,表示该 ESP-C3 芯片为 Station 模式。

6. 启动 WiFi 模块esp_wifi_start

通过调用 esp_wifi_start 函数启动 WiFi 模块。
esp_wifi_start 函数是 ESP-IDF WiFi 库中的一个 API 函数,用于启动 WiFi 的工作。

在使用 WiFi 功能之前,需要先通过调用 esp_wifi_init 函数进行 WiFi 的初始化操作,然后再通过调用 esp_wifi_start 函数启动 WiFi。在调用该函数之后,设备就可以连接到 WiFi 网络并开始接收和发送数据了。

该函数的返回值为 esp_err_t 类型,当返回值为 ESP_OK 时,表示 WiFi 启动成功,否则表示 WiFi启动失败。

7. 开始扫描esp_wifi_scan_start

通过调用 esp_wifi_scan_start 函数开始扫描可用的 WiFi 热点。
esp_wifi_scan_start是ESP-IDF中WiFi模块的一个API函数,用于开始一次WiFi扫描操作。该函数需要两个参数:

wifi_scan_config_t *config:WiFi扫描的配置参数,可以为空指针,表示使用默认配置。
bool blocking:扫描操作是否阻塞。如果为true,表示扫描操作阻塞当前线程,直到扫描结束。如果为false,表示扫描操作是异步的,函数立即返回,扫描结果需要通过回调函数获得。
返回值:

如果调用成功,返回ESP_OK;否则返回一个错误码,表示调用失败的原因。

8. 等待扫描结束

延迟一段时间,以等待扫描结束。

9. 获取扫描结果

通过调用自定义函数 wifi_scan 函数获取扫描到的 WiFi 热点列表。

三、完整demo

#include "freertos/FreeRTOS.h" #include "esp_wifi.h" #include "esp_log.h" #include "nvs_flash.h" #define TAG "wifi_scan" // 定义 wifi_scan 函数,扫描并打印 Wi-Fi 列表 void wifi_scan() { // 存储可用 Wi-Fi 热点数量 uint16_t ap_num; // 存储 Wi-Fi 热点信息的指针 wifi_ap_record_t *ap_records; // 获取可用 Wi-Fi 热点数量 esp_wifi_scan_get_ap_num(&ap_num); if (ap_num == 0) { // 如果没有可用 Wi-Fi 热点,输出提示信息 ESP_LOGI(TAG, "No AP found"); return; } // 分配内存空间存储 Wi-Fi 热点信息 ap_records = (wifi_ap_record_t *)malloc(sizeof(wifi_ap_record_t) * ap_num); if (!ap_records) { ESP_LOGE(TAG, "malloc error"); return; } // 获取所有可用 Wi-Fi 热点信息 ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&ap_num, ap_records)); // 输出可用 Wi-Fi 热点数量 ESP_LOGI(TAG, "Found %d APs", ap_num); // 遍历所有可用 Wi-Fi 热点,并输出信息 for (int i = 0; i < ap_num; i ) { ESP_LOGI(TAG, "SSID:%s\t RSSI:%d\t BSSID:" MACSTR, ap_records[i].ssid, ap_records[i].rssi, MAC2STR(ap_records[i].bssid)); } // 释放内存 free(ap_records); } void app_main() { // 初始化 NVS(Non-Volatile Storage,非易失性存储)模块 // 该函数用于在 flash 中初始化 NVS 存储区域,每个应用仅需调用一次该函数 ESP_ERROR_CHECK(nvs_flash_init()); // 初始化网络接口模块 ESP_ERROR_CHECK(esp_netif_init()); // 创建默认事件循环,该循环将处理所有的网络事件 ESP_ERROR_CHECK(esp_event_loop_create_default()); // 配置 WiFi 模块 wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); // 设置 WiFi 模式为 STA(Station 模式) ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); // 启动WiFi ESP_ERROR_CHECK(esp_wifi_start()); // 开始扫描可用的WIFI热点 ESP_ERROR_CHECK(esp_wifi_scan_start(NULL, true)); // 延迟2秒,等待扫描结束 vTaskDelay(2000 / portTICK_PERIOD_MS); // 获取扫描结果 wifi_scan(); // 保持程序运行 while(1){ vTaskDelay(1); } }

运行效果:

网络扫描的整个扫描流程,最强大的网络扫描工具(3)

网络扫描的整个扫描流程,最强大的网络扫描工具(4)

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.