wifi连接wpa_supplicant和wpa_cli的使用实例
2017-07-25 14:22
471 查看
一启动扫描wifi热点
#include <stdio.h> #include <string.h> #include "wpa_cli.h" int main(){ printf("%s(%s:%d)......\n", __FILE__, __FUNCTION__, __LINE__); int ret = wpa_cli_start(); if(ret){ printf("wpa_cli_start fail\n"); return 0; } char szContent[4][32]; char* pCmd[1] = {szContent[0]}; // 启动热点扫描 strcpy(pCmd[0], "scan"); char buf[2048]; ret = wpa_cli_cmd_function(1, pCmd, buf); if(ret || (strncmp(buf, "FAIL", 4) == 0)){ printf("wap_cli_function scan fail\n"); return 0; } while(1); return 0; }
输出
Selected interface ‘wlan0’
OK
扫描成功;
二输出热点扫描结果
#include <stdio.h> #include <string.h> #include "wpa_cli.h" int main(){ printf("%s(%s:%d)......\n", __FILE__, __FUNCTION__, __LINE__); int ret = wpa_cli_start(); if(ret) { printf("wpa_cli_start fail\r\n"); return 0; } char szContent[4][32]; char* pCmd[1] = {szContent[0]}; // 启动热点扫描 strcpy(pCmd[0], "scan"); char buf[2048]; ret = wpa_cli_cmd_function(1, pCmd, buf); if(ret || (strncmp(buf, "FAIL", 4) == 0)){ printf("wap_cli_function scan fail\r\n"); return 0; } // 添加输出扫描热点 这里的热点是以字符串的形式保存在buf里 char* pCmd_scan_result[4]; for(int i = 0; i < 4; i++){ pCmd_scan_result[i] = szContent[i]; } strcpy(pCmd_scan_result[0], "scan_result"); ret = wpa_cli_cmd_function(1, pCmd_scan_result, buf); printf("===========\n"); printf("\n%s\n", buf); printf("===========\n"); while(1); return 0; }
三解析输出的热点字符串
是的,就是直接解析了字符串,暂时没有找到动态库中解析好的结构体。所以这里把字符串解析到自定义的结构体当中
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "wpa_cli.h" #define MAX_SSID_NUMBER 64 typedef struct{ char bssid[32]; char freq[6]; char level[6]; char flags[64]; char ssid[32]; }wifi_scan_item; typedef struct{ int count; wifi_scan_item *pitem; }wifi_info; static wifi_info g_info; int main(){ printf("%s(%s:%d)......\n", __FILE__, __FUNCTION__, __LINE__); int ret = wpa_cli_start(); if(ret) { printf("wpa_cli_start fail\r\n"); return 0; } char szContent[4][32]; char* pCmd[1] = {szContent[0]}; // 启动热点扫描 strcpy(pCmd[0], "scan"); char buf[2048]; ret = wpa_cli_cmd_function(1, pCmd, buf); if(ret || (strncmp(buf, "FAIL", 4) == 0)){ printf("wap_cli_function scan fail\r\n"); return 0; } printf("===========\n"); printf("%s\n", buf); printf("===========\n"); // 添加输出扫描热点 这里的热点是以字符串的形式保存在buf里 char* pCmd_scan_result[4]; for(int i = 0; i < 4; i++){ pCmd_scan_result[i] = szContent[i]; } strcpy(pCmd_scan_result[0], "scan_result"); ret = wpa_cli_cmd_function(1, pCmd_scan_result, buf); // 解析字符串 g_info.count = 0; g_info.pitem = (wifi_scan_item *)malloc(sizeof(wifi_scan_item) * MAX_SSID_NUMBER); wifi_scan_item* pInfo = g_info.pitem; char* ptr = strstr(buf, "bssid / frequency / signal level / flags / ssid\n"); if(!ptr){ printf("(%d)wifi_get_ssid_info fail\r\n", __LINE__); free(pInfo); return 0; } ptr += strlen("bssid / frequency / signal level / flags / ssid\n"); if(*ptr == 0){ printf("(%d)wifi_get_ssid_info ssid 0\r\n", __LINE__); free(pInfo); return 0; } int index = 0; char* ptr_n = NULL; char* ptr_t = NULL; while(1){ ptr_n = strchr(ptr, '\n'); if(!ptr_n){ printf("(%d)failed\n", __LINE__); break; } for(int i = 0; i < 4; i++){ ptr_t = strchr(ptr, '\t'); if(!ptr_t){ break; } *ptr_t = 0; switch(i){ case 0: strcpy(pInfo[index].bssid, ptr); break; case 1: strcpy(pInfo[index].freq, ptr); break; case 2: strcpy(pInfo[index].level, ptr); break; case 3: strcpy(pInfo[index].flags, ptr); break; } ptr = ptr_t + 1; } *ptr_n = 0; strcpy(pInfo[index].ssid, ptr); ptr = ptr_n + 1; index++; } for(int i=0; i<index; i++){ printf("[%02d]%s, %s, %s, %45s, %20s\n", i, pInfo[i].bssid, pInfo[i].freq, pInfo[i].level, pInfo[i].flags, pInfo[i].ssid); } while(1); return 0; }
四连接当前wifi以及连接结果
五连接状态变化
已断开/已连接/正在连接/验证失败相关文章推荐
- 转载:Linux下使用wpa_supplicant连接WPA加密方式的WIFI
- RHEL等Linux系统使用wpa_supplicant以WPA-PSK/WPA2-PSK连接WIFI
- Android 下使用wpa_cli 连接 wifi
- Linux下使用wpa_supplicant连接WPA加密方式的WIFI
- 【转】Android 下使用wpa_cli 连接 wifi
- 配置wpa_supplicant调试wifi linux下命令行连接wifi
- wpa_cli和wpa_supplicant使用,配置无线AP名和密码,静态ip地址
- wpa_cli和wpa_supplicant使用,配置无线AP名和密码,静态ip地址
- Wpa_supplicant与wpa_cli实现wifi调试的无线配置
- 基于wpa_supplicant库的WIFI连接功能实现--wpa_cli命令代码改写
- [RK3288][Android6.0] WiFi之通过wpa_cli分析WPAS的连接过程
- wpa_cli 连接 wifi
- wpa_supplicant使用笔记-wpa_cli iwconfig
- wpa_cli 连接 wifi
- 有关wifi配置工具wpa_cli以及wpa_supplicant简单分析
- 使用wpa_cli工具连接无线网络
- 运用wpa_cli连接wifi
- wpa_cli和wpa_supplicant使用,配…
- linux中C下管理wifi无线连接wpa_supplicant的处理方式
- ubuntu 10.04 usb wifi 使用wpa_supplicant无法连网问题