完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
正在研究混杂(嗅探器)模式。我必须存储多个数据包,即数组中的字符串。我的以下代码只提供了最后一个 MAC 地址,如下所示。请指导我如何解决问题或其他方法。
计数=0; os_printf("开始嗅探数据包\r\n"); switch (len) { case 128: os_printf("管理数据包 (len=128) 在通道 %d\n 上嗅探", sniffer_channel); 休息; case 60: os_printf("数据包 (len=60) 在通道 %d\n 上嗅探", sniffer_channel); 结构嗅探器_buf *嗅探器数据 = (结构嗅探器_buf*) buf; os_printf("cnt: %d\n", struct probe_request_80211 *probe_request = (struct probe_request_80211*) sniffer_data->buf; os_sprintf(buffer0, "rdaddr: %02x:%02x:%02x:%02x:%02x:%02x\r\n ", probe_request->rdaddr[0],probe_request->rdaddr[1],probe_request->rdaddr [2],probe_request->rdaddr[3],probe_request->rdaddr[4],probe_request->rdaddr[5]); os_sprintf(buffer1, "tsaddr: %02x:%02x:%02x:%02x:%02x:%02x\r\n ", probe_request->tsaddr[0],probe_request->tsaddr[1],probe_request->tsaddr [2],probe_request->tsaddr[3],probe_request->tsaddr[4],probe_request->tsaddr[5]); os_sprintf(buffer2, " bssid: %02x:%02x:%02x:%02x:%02x:%02x\r\n ", probe_request->bssid[0],probe_request->bssid[1],probe_request->bssid [2],probe_request->bssid[3], os_sprintf(buffer3, "addr4: %02x:%02x:%02x:%02x:%02x:%02x\r\n ", probe_request->addr4[0],probe_request->addr4[1],probe_request->addr4 [2],probe_request->addr4[3],probe_request->addr4[4],probe_request->addr4[5]); os_strcat(buffer0,buffer1); os_strcat(缓冲区 0,缓冲区 2); os_strcat(缓冲区 0,缓冲区 3); os_printf("最终字符串:- %s\r\n ",buffer0); 数据包[计数] =缓冲区0; 计数=计数+1; if(count<3) { os_printf("计数器模式\r\n"); } else { int i; 对于(i=0;i<计数;i++) { os_printf("多个数据包: %s\r\n ",packets[i]); } } |
|
相关推荐
1个回答
|
|
可以使用一个数组来存储多个数据包。在代码中声明一个数组并在处理数据包时将每个数据包添加到数组中。以下代码演示了如何使用数组存储多个 MAC 地址。
```C #define MAX_PACKETS 10 int count = 0; uint8_t packets[MAX_PACKETS][6]; os_printf("开始嗅探数据包rn"); switch (len) { case 128: os_printf("管理数据包 (len=128) 在通道 %d 上嗅探", sniffer_channel); break; case 60: os_printf("数据包 (len=60) 在通道 %d 上嗅探", sniffer_channel); struct sniffer_buf *sniffer_data = (struct sniffer_buf*) buf; struct probe_request_80211 *probe_req = (struct probe_request_80211*) sniffer_data->buf; if (PROBE_REQUEST == probe_req->frame_ctrl.field.type && !memcmp(probe_req->da, "xffxffxffxffxffxff", 6)) { // 获取目标 MAC 地址 memcpy(packets[count], probe_req->sa, 6); count++; if (count == MAX_PACKETS) { // 数组已满 os_printf("已存储最大数量的数据包"); } } break; default: break; } ``` 在上述代码中,我们首先定义了一个数组 `packets`,它是一个大小为 MAX_PACKETS * 6 的二维数组。每个数据包是一个长度为 6 的 MAC 地址。 然后我们使用一个计数器 `count` 来跟踪存储的数据包数量,并在处理数据包时将每个数据包添加到数组中。如果数组已满,则会输出一条消息。 请注意,上述示例代码仅演示了如何存储多个 MAC 地址。如果您想存储其他数据类型的数据包,可以在数组中使用不同的数据类型。 |
|
|
|
只有小组成员才能发言,加入小组>>
524浏览 6评论
433浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
422浏览 5评论
414浏览 4评论
387浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 00:22 , Processed in 0.743664 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号