# Wi-Fi 模式

[English]

## ESP32-S3 Wi-Fi AP 通用场景

下图为 AP 模式下的宏观场景，其中包含不同阶段的具体描述：

> AP 模式下 Wi-Fi 事件场景示例

## Wi-Fi Sniffer 模式

Wi-Fi Sniffer 模式可以通过 `esp_wifi_set_promiscuous()` 使能。如果使能 Sniffer 模式， 可以 向应用程序转储以下数据包。

> - 802.11 管理帧

> - 802.11 数据帧，包括 MPDU、AMPDU、AMSDU 等

> - 802.11 MIMO 帧，Sniffer 模式仅转储 MIMO 帧的长度。

> - 802.11 控制帧

> - 802.11 CRC 错误帧

不可以 向应用程序转储以下数据包。

> - 802.11 其它错误帧

对于 Sniffer 模式 可以 转储的帧，应用程序可以另外使用 `esp_wifi_set_promiscuous_filter()` 和 `esp_wifi_set_promiscuous_ctrl_filter()` 决定筛选哪些特定类型的数据包。应用程序默认筛选所有 802.11 数据和管理帧。如果你想要筛选 802.11 控制帧，`esp_wifi_set_promiscuous_filter()` 中的 filter 参数需要包含 “WIFI_PROMIS_FILTER_MASK_CTRL” 类型， 如果你想进一步区分 802.11 控制帧，那么调用 `esp_wifi_set_promiscuous_ctrl_filter()`。

可以在 WIFI_MODE_NULL、WIFI_MODE_STA、WIFI_MODE_AP、WIFI_MODE_APSTA 等 Wi-Fi 模式下使能 Wi-Fi Sniffer 模式。也就是说，当 station 连接到 AP，或者 AP 有 Wi-Fi 连接时，就可以使能。请注意，Sniffer 模式对 station/AP Wi-Fi 连接的吞吐量有 很大影响。通常，除非有特别原因，当 station/AP Wi-Fi 连接出现大量流量，不应使能。

该模式下还应注意回调函数 `wifi_promiscuous_cb_t` 的使用。该回调将直接在 Wi-Fi 驱动程序任务中进行，所以如果应用程序需处理大量过滤的数据包，建议在回调中向应用程序任务发布一个事件，把真正的工作推迟到应用程序任务中完成。

此文档对您有帮助吗？

- 反馈已收到，谢谢！
- 如果您有其他意见，欢迎填写乐鑫文档反馈表。

- 我们重视您的反馈。
- 您可以填写乐鑫文档反馈表告诉我们如何改进该文档。