一.问题说明
wpa_cli scan扫描周围热点后,通过wpa_cli -i wlan0 scan_result查询扫描到的热点,发现中文显示是\xe9\xa3等无法识别字符
wpa_cli scan
Selected interface 'wlan0'
OK
wpa_cli -i wlan0 scan_result
bssid / frequency / signal level / flags / ssid
34:71:46:f2:a2:5d 2412 -56 [WPA2-PSK-CCMP][ESS] \xe9\xa3\x9e\xe6\xbe\x9c_Wi-Fi5
80:ea:07:1a:90:50 2462 -57 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_9050
二.问题分析
可能是scan_result扫描结果后,打印时做了转换,需要分析wpa_supplicant工具的源代码解决
三.代码流程说明
scan_result 获取过程:(wpa_cli.c)
wpa_request
wpa_cli_commands.wpa_cli_cmd_scan_results
static int wpa_cli_cmd_scan_results(struct wpa_ctrl *ctrl, int argc,char *argv[])
wpa_ctrl_command(ctrl, "SCAN_RESULTS");
_wpa_ctrl_command(ctrl, cmd, 1);
ret = wpa_ctrl_request(ctrl, cmd, os_strlen(cmd), buf, &len,
wpa_cli_msg_cb);
send(ctrl->s, _cmd, _cmd_len, 0) //通过local socket 发送给wpa_supplicant进程
wpa_supplicant 处理
else if (os_strcmp(buf, "SCAN_RESULTS") == 0) {
reply_len = wpa_supplicant_ctrl_iface_scan_results(
wpa_s, reply, reply_size);
wpa_supplicant_ctrl_iface_scan_results
ret = os_snprintf(pos, end - pos, "***bssid / frequency / signal level / "
"flags / ssid***\n");
dl_list_for_each(bss, &wpa_s->bss_id, struct wpa_bss, list_id) {
ret = wpa_supplicant_ctrl_iface_scan_result(wpa_s, bss, pos,
end - pos)
最终修改点
//ret = os_snprintf(pos, end - pos, "\t%s",
// wpa_ssid_txt(bss->ssid, bss->ssid_len));
修改为
ret = os_snprintf(pos, end - pos, "\t%s",(char*)bss->ssid);
四.更新wpa_cli与wpa_supplicant工具后测试正常