色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Wi-Fi測試:自定義發送802.11幀(Beacon篇)

冬至子 ? 來源:Tao_blk1IT ? 作者:Tao_blk1IT ? 2023-10-23 11:43 ? 次閱讀

XR806是一款使用ARMv8-M的Wi-Fi BLE Combo MCU。本文使用XR806開發板以及基于FreeRTOS的XR806 SDK實現了自定義發送802.11 Beacon幀,并進行了無線抓包分析以及掃描測試來驗證幀的發送結果。

環境配置過程

環境搭建可以參考官方文檔開發環境搭建。本測試中使用的開發環境為Ubuntu 22.04。需要注意的是,在下載ARM Toolchain時,由于網站更新,文檔中鏈接已不可用,在其中找到對應的gcc-arm-none-eabi-8-2019-q3-update版本下載即可。

配置好環境后選取某個Demo或者Example進行編譯,在Ubuntu下,使用的燒錄工具為SDK中tools目錄下的phoenixMC可執行程序,示例的燒錄命令為

./phoenixMC -c /dev/ttyUSB0 -i ../out/xr_system.img

其他參數信息可以使用-h獲取。燒錄好后可以連接串口查看輸出,控制臺輸出可能會出現換行不對齊的情況,此時需要進行換行修正。在本次測試中使用的串口工具為picocom,需要將輸出的n轉為rn示例的連接串口命令為

picocom -b 115200 --imap lfcrlf /dev/ttyUSB0

在燒錄時需要讓開發板進入升級模式,如果當前程序支持upgrade命令,可以直接發送upgrade命令。若不支持,需要短接開發板上的兩個觸點或者使用Windows下的燒錄工具,在工具上勾選硬件復位燒寫模式。

測試過程

通過瀏覽XR806的SDK可以發現,在wlan.h中提供有APIint wlan_send_raw_frame(struct netif *netif, int type, uint8_t *buffer, int len);。該API可以支持發送自定義的802.11幀,只需要提供網絡接口,幀類型,數據幀和長度即可。受esp32-80211-tx啟發,在本測試中基于該API發送自定義的Beacon幀,達到同時存在多個AP的假象。在IBSS網絡架構中,AP每隔一段時間就會向外界發出一個Beacon幀用來宣告自己802.11網絡的存在。平時Wi-Fi的被動掃描也是基于Beacon幀進行。

使用API構造Beacon

進一步瀏覽SDK可以發現,SDK中提供了wlan_construct_beacon的API,這簡化了我們構造Beacon的過程。只要提供beacon的部分字段信息即可,如SA,DA,BSSID,Channel等。具體代碼如下:

#include < stdio.h >
#include < string.h >
#include "net/wlan/wlan.h"
#include "net/wlan/wlan_defs.h"
#include "net/wlan/wlan_ext_req.h"
#include "net/wlan/wlan_frame.h"
#include "common/framework/net_ctrl.h"
#include "common/framework/platform_init.h"
#include "lwip/inet.h"


#define CMD_WLAN_NETIF              wlan_netif_get(WLAN_MODE_NONE)


#define BEACON_FRAME_LEN 256
static uint8_t beacon_frame_buf[BEACON_FRAME_LEN];
typedef struct {
    uint8_t *data;
    uint32_t len;
} frame_data;

static uint8_t beacon_addr[6];
static char beacon_ssid[32];
static uint32_t beacon_len;
static frame_data beacon_frame;

char *ssids[] = {
    "1 Hello Wireless World",
    "2 from Allwinner XR806",
    "3 running on FreeRTOS",
    "4 for Jishu Community"    
};
uint8_t bssid[4][6] = {
    {0xba, 0xde, 0xaf, 0xfe, 0x00, 0x06},
    {0xba, 0xde, 0xaf, 0xfe, 0x00, 0x07},
    {0xba, 0xde, 0xaf, 0xfe, 0x00, 0x08},
    {0xba, 0xde, 0xaf, 0xfe, 0x00, 0x09},
};

#define TOTAL_LINES (sizeof(ssids) / sizeof(char *))

uint8_t line = 0;

static void beacon_frame_create(void)
{
    wlan_ap_config_t config;
    memset(&config, 0, sizeof(config));
    config.field = WLAN_AP_FIELD_SSID;
    if (wlan_ap_get_config(&config) != 0) {
        printf("get config failedn");
        return;
    }
    printf("ssid:%s,ssid_len: %dn", ssids[line], strlen(ssids[line]));
    memcpy(beacon_ssid, ssids[line], strlen(ssids[line]));
    memcpy(beacon_addr, bssid[line], IEEE80211_ADDR_LEN);
    beacon_len = wlan_construct_beacon(beacon_frame_buf, BEACON_FRAME_LEN, beacon_addr, NULL, beacon_addr,
                                       (uint8_t *)beacon_ssid, strlen(ssids[line]), 1);
    if (++line >= TOTAL_LINES)
    {
        line = 0;
    }
    beacon_frame.data = beacon_frame_buf;
    beacon_frame.len = beacon_len;
    printf("beacon_len %dn", beacon_len);
    int ret = 0;
    ret = wlan_send_raw_frame(CMD_WLAN_NETIF, IEEE80211_FC_STYPE_AUTH, beacon_frame.data, beacon_frame.len);
    printf("Send beacon frame: %dn", ret);
}


int main(void)
{
    platform_init();
    net_switch_mode(WLAN_MODE_HOSTAP);
    while(1)
    {
        OS_MSleep(100 / TOTAL_LINES);
        beacon_frame_create();
    }
    return 0;
}

代碼的基本邏輯為:首先預定義好需要發送的SSID及其對應的BSSID,然后在主函數中先初始化AP模式,然后每100ms發送一次所有的Beacon。發送Beacon前需要填充好Beacon幀的內容。

測試效果如下:

在代碼中我們使用的SSID列表為

"1 Hello Wireless World",
    "2 from Allwinner XR806",
    "3 running on FreeRTOS",
    "4 for Jishu Community"

上電后程序啟動,使用手機掃描Wi-Fi便可以查看到這些AP信息

7954df741268c7dfb6f92fe8532c8eb.jpg

其中AP-XRADIO為默認的AP名稱。

不使用API構造Beacon

我們也可以不使用相關API,而直接填充內容。為了演示,在這里將參考項目的實現遷移過來,具體代碼如下:

#include < stdio.h >
#include < string.h >
#include "net/wlan/wlan.h"
#include "net/wlan/wlan_defs.h"
#include "net/wlan/wlan_ext_req.h"
#include "net/wlan/wlan_frame.h"
#include "common/framework/net_ctrl.h"
#include "common/framework/platform_init.h"
#include "lwip/inet.h"


#define CMD_WLAN_NETIF              wlan_netif_get(WLAN_MODE_NONE)


uint8_t beacon_raw[] = {
    0x80, 0x00,                            // 0-1: Frame Control
    0x00, 0x00,                            // 2-3: Duration
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff,                // 4-9: Destination address (broadcast)
    0xba, 0xde, 0xaf, 0xfe, 0x00, 0x06,                // 10-15: Source address
    0xba, 0xde, 0xaf, 0xfe, 0x00, 0x06,                // 16-21: BSSID
    0x00, 0x00,                            // 22-23: Sequence / fragment number
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,            // 24-31: Timestamp (GETS OVERWRITTEN TO 0 BY HARDWARE)
    0x64, 0x00,                            // 32-33: Beacon interval
    0x31, 0x04,                            // 34-35: Capability info
    0x00, 0x00, /* FILL CONTENT HERE */                // 36-38: SSID parameter set, 0x00:length:content
    0x01, 0x08, 0x82, 0x84,    0x8b, 0x96, 0x0c, 0x12, 0x18, 0x24,    // 39-48: Supported rates
    0x03, 0x01, 0x01,                        // 49-51: DS Parameter set, current channel 1 (= 0x01),
    0x05, 0x04, 0x01, 0x02, 0x00, 0x00,                // 52-57: Traffic Indication Map
    
};

char *rick_ssids[] = {
    "01 Never gonna give you up",
    "02 Never gonna let you down",
    "03 Never gonna run around",
    "04 and desert you",
    "05 Never gonna make you cry",
    "06 Never gonna say goodbye",
    "07 Never gonna tell a lie",
    "08 and hurt you"
};

#define BEACON_SSID_OFFSET 38
#define SRCADDR_OFFSET 10
#define BSSID_OFFSET 16
#define SEQNUM_OFFSET 22
#define TOTAL_LINES (sizeof(rick_ssids) / sizeof(char *))

int main(void)
{
    platform_init();
    net_switch_mode(WLAN_MODE_HOSTAP);
    uint8_t line = 0;
    // Keep track of beacon sequence numbers on a per-songline-basis
    uint16_t seqnum[TOTAL_LINES] = { 0 };

    int ret = 0;
    while (1) 
    {
        OS_MSleep(100 / TOTAL_LINES);

        // Insert line of Rick Astley's "Never Gonna Give You Up" into beacon packet
        printf("%i %i %srn", strlen(rick_ssids[line]), TOTAL_LINES, rick_ssids[line]);

        uint8_t beacon_rick[200];
        memcpy(beacon_rick, beacon_raw, BEACON_SSID_OFFSET - 1);
        beacon_rick[BEACON_SSID_OFFSET - 1] = strlen(rick_ssids[line]);
        memcpy(&beacon_rick[BEACON_SSID_OFFSET], rick_ssids[line], strlen(rick_ssids[line]));
        memcpy(&beacon_rick[BEACON_SSID_OFFSET + strlen(rick_ssids[line])], &beacon_raw[BEACON_SSID_OFFSET], sizeof(beacon_raw) - BEACON_SSID_OFFSET);

        // Last byte of source address / BSSID will be line number - emulate multiple APs broadcasting one song line each
        beacon_rick[SRCADDR_OFFSET + 5] = line;
        beacon_rick[BSSID_OFFSET + 5] = line;

        // Update sequence number
        beacon_rick[SEQNUM_OFFSET] = (seqnum[line] & 0x0f) < < 4;
        beacon_rick[SEQNUM_OFFSET + 1] = (seqnum[line] & 0xff0) > > 4;
        seqnum[line]++;
        if (seqnum[line] > 0xfff)
            seqnum[line] = 0;

        // esp_wifi_80211_tx(WIFI_IF_AP, beacon_rick, sizeof(beacon_raw) + strlen(rick_ssids[line]), false);
        ret = wlan_send_raw_frame(CMD_WLAN_NETIF, IEEE80211_FC_STYPE_AUTH, beacon_rick, sizeof(beacon_raw) + strlen(rick_ssids[line]));
        printf("Send beacon: %dn", ret);
        if (++line >= TOTAL_LINES)
            line = 0;
    }
    
    return 0;
}

測試效果如下:
使用Netspot工具獲取無線AP列表

image.png

可以看到我們定義的SSID列表(Never gonna give you up:)),同時和默認的AP名稱AP-XRADIO。

對XR806的Beacon進行無線抓包分析,如圖所示

image.png

可以看出XR806所支持的速率和其他特性。

總結

本次測試發送了自定義的Beacon幀,實際上XR806還支持發送其他類型的幀,后續可以進一步探索。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62140
  • Wi-Fi技術
    +關注

    關注

    0

    文章

    58

    瀏覽量

    8372
  • ARMv8
    +關注

    關注

    1

    文章

    35

    瀏覽量

    14158
  • Beacon技術
    +關注

    關注

    0

    文章

    6

    瀏覽量

    6250
  • xr806
    +關注

    關注

    0

    文章

    14

    瀏覽量

    1321
收藏 人收藏

    評論

    相關推薦

    802.11be是什么 802.11be與Wi-Fi6的對比分析

    Wi-Fi 6(802.11ax)之后提出的新的WLAN標準,也是坊間傳聞甚廣的Wi-Fi 7。其實,Wi-Fi聯盟到目前還沒有把802.11
    的頭像 發表于 12-02 13:55 ?1.5w次閱讀

    基于德州儀器的Wi-Fi 6 和 802.11be 多通道測試方案

    ),是繼 Wi-Fi 6(802.11ax)之后提出的新的 WLAN 標準,也是坊間傳聞甚廣的 Wi-Fi 7。其實,Wi-Fi 聯盟到目前還沒有把
    的頭像 發表于 03-01 11:14 ?3936次閱讀

    全志XR806芯片Wi-Fi測試自定義發送802.11Beacon

    XR806是一款使用ARMv8-M的Wi-Fi BLE Combo MCU。本文使用XR806開發板以及基于FreeRTOS的XR806 SDK實現了自定義發送802.11
    發表于 01-26 14:01

    全志XR806芯片Wi-Fi測試自定義發送802.11Beacon

    XR806是一款使用ARMv8-M的Wi-Fi BLE Combo MCU。本文使用XR806開發板以及基于FreeRTOS的XR806 SDK實現了自定義發送802.11
    發表于 01-26 14:01

    wi-fi認證基本知識

    ;  802.11n標準草案2.0版產品經過業內可互操作性認證、擁有最新安全保護及針對傳統Wi-Fi產品的向后兼容性測試,將大大簡化消費者的購買流程。<br/>  Gartner市場
    發表于 10-10 13:22

    推出的802.11ac Wi-Fi聯盟的認證程序

    Wi-Fi聯盟宣布其Wi-Fi認證的交流認證計劃,其目的是保證的802.11ac功能的設備的互操作性,無論他們的硬件供應商或客戶類型。新的802.11ac
    發表于 06-27 10:01

    Wi-Fi CERTIFIED?交流會的Wi-Fi?技術的性能提升到新的高度

    %的受訪者表示,在他們的家比電視中斷,更具破壞性的Wi-Fi停運。Wi-Fi認證的AC產品帶來額外的容量,性能和魯棒性來支持今天和明天的應用連接,在家里,在公共場所,在企業網絡中的一致好評。技術定義
    發表于 06-27 10:25

    Wi-Fi 認證--華夏準測

    及應用,使經Wi-Fi認證的產品和服務行程一個不斷發展的全球市場,影響且幫助定義技術,標準,服務和應用等各方面的策略性發展要求測試項目Wi-Fi 8
    發表于 03-10 17:52

    什么是Wi-Fi

    什么是Wi-Fi What is Wi-Fi?􀂄 Short for wireless fidelity and is meantto be used generically
    發表于 06-17 16:02 ?45次下載

    幾種Wi-Fi技術標準與應用對比

    本為為你介紹Wi-Fi技術標準,如802.11n、802.11g、802.11b、802.11a、藍牙、WiMax等
    發表于 01-18 11:02 ?8238次閱讀

    支持802.11ax Wi-Fi技術的Wi-Fi 6出臺,主要用于設備與Wi-Fi網絡的連接

    據外媒報道,Wi-Fi聯盟日前宣布,推出了支持802.11ax Wi-Fi技術的Wi-Fi 6。
    發表于 10-11 16:46 ?2390次閱讀

    什么是Wi-Fi6你期待Wi-Fi6嗎Wi-Fi 6的說明

    即將于2019下半年發布的WI-Fi 6,將使無線網絡比以往更快、更可靠、更節能,但這究竟意味著什么呢?Wi-Fi 6是Wi-Fi聯盟為802.11ax命名的新名字,旨在使
    的頭像 發表于 04-20 10:53 ?9919次閱讀

    Wi-Fi HaLow 和傳統 Wi-Fi 的區別是什么

    Wi-Fi 就像我們互聯世界的氧氣。它是當今使用最廣泛的無線網絡協議,承載了所有互聯網一半以上的流量?!?b class='flag-5'>Wi-Fi”是一個包羅萬象的術語,用于描述不斷發展的 802.11 協議家族,這些協議已經發展
    發表于 06-18 17:35 ?1062次閱讀

    Wi-Fi標準簡介:Wi-Fi 6和Wi-Fi 7

    Wi-Fi 6 是 IEEE 802.11ax 的公開名稱。Wi-Fi 6 于 2021 年初獲得全面批準,得益于 802.11 協議二十多年的累積改進,
    的頭像 發表于 03-24 09:20 ?4054次閱讀

    Wi-Fi HaLow和傳統Wi-Fi的區別

    802.11b/g/n標準,到現在的Wi-Fi 6(802.11ax)標準。除了這些常見的Wi-Fi標準外,還有一種相對較新的Wi-Fi
    的頭像 發表于 02-02 15:28 ?1254次閱讀
    主站蜘蛛池模板: 日日色在线影院| 空姐内射出白浆10p| 国产精品久免费的黄网站| 白人大战34厘米黑人BD| 99久久99久久精品国产片果冻| 2019香蕉在线观看直播视频| 中国老女人xxhd69| 在线观看精品视频看看播放| 印度最猛性ⅹxxxxx| 中国女人内谢69xxxxxx直播| 永久免费的无码中文字幕| 真实的强视频免费网站| 中文字幕网站在线观看| 91九色网址| FREEHDXXXX学生妹| WWW国产亚洲精品久久| 吃奶吸咪咪动态图| 高H高肉强J短篇NP| 国产精华av午夜在线观看| 国产精品视频一区二区猎奇| 国产香蕉尹人视频在线| 动漫护士被乳羞羞漫| 国产不卡无码高清视频| 国产精品成人影院在线观看| 国产欧美日韩国产高清| 韩日美无码精品无码| 久久国产香蕉视频| 美女直播喷水| 日韩精品久久日日躁夜夜躁影视| 偷偷鲁青春草原视频分类| 亚洲三级黄色片| 538在线播放| 大乳牛奶女在线观看| 国产午夜在线观看视频播放| 久久精品亚洲牛牛影视| 内射气质御姐视频在线播放| 三级黄色在线免费观看| 亚洲国产日韩a精品乱码| 99久久精品免费精品国产 | 最近中文字幕MV免费看| 帝王被大臣们调教高肉|