乐鑫技术交流
直播中

刘洋

10年用户 1112经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

sniffer模式下,wifi_promiscuous_set_mac无效是怎么回事?

想使用 wifi_promiscuous_set_mac 过滤出某一个终端 mac ,但是无效。
或者有没有其他的方式只 sniffer 某一个特地 mac 的终端?

   wifi_set_channel(1);
   wifi_promiscuous_enable(0);

   const uint8_t mac[6] = {0x50, 0x8f, 0x4c, 0xfe, 0xc6, 0x52};
   wifi_promiscuous_set_mac(mac);

   wifi_set_promiscuous_rx_cb(promisc_cb);
   wifi_promiscuous_enable(1);


代码如上,但是输出的 mac 仍然是所有的 mac。
                                                                                                                                                      

回帖(1)

切克切克闹

2024-7-11 16:15:22
在这种情况下,我们可以尝试以下几个步骤来解决问题:

1. 确保硬件支持:首先,我们需要确保您的硬件设备支持 promiscuous 模式和 MAC 地址过滤。不同的硬件设备可能有不同的功能和限制。

2. 检查 API 文档:查阅您使用的 WiFi 模块或库的 API 文档,了解 `wifi_promiscuous_set_mac` 函数的正确用法和限制。可能存在某些特定的参数或条件需要满足才能使该函数生效。

3. 检查代码逻辑:在调用 `wifi_promiscuous_set_mac` 之前,确保已经正确设置了 promiscuous 模式。根据您的代码,您已经调用了 `wifi_promiscuous_enable(0)`,这可能会影响后续的设置。尝试将该行代码删除或更改为 `wifi_promiscuous_enable(1)`。

4. 使用回调函数过滤:如果 `wifi_promiscuous_set_mac` 函数无法实现预期的过滤效果,您可以在回调函数 `promisc_cb` 中手动过滤特定的 MAC 地址。例如:

```c
void promisc_cb(uint8_t *buf, uint16_t len) {
    uint8_t *src_mac = buf + 10; // 假设源 MAC 地址在数据包的第 10 个字节
    if (memcmp(src_mac, mac, 6) == 0) {
        // 处理特定 MAC 地址的数据包
    }
}
```

5. 考虑其他方法:如果上述方法都无法解决问题,您可以尝试使用其他工具或库来实现 MAC 地址过滤。例如,使用 Wireshark 或 tcpdump 等网络抓包工具,它们提供了更丰富的过滤选项。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分