我正在编写一个通过 wpa_cli 执行 SCAN 和 SCAN_RESULTS 命令并获取 wifi 扫描结果的 C 代码。我在解析 SCAN_RESULTS 输出以捕获某些场景下的密钥管理和 SSID 字段时遇到问题
我用来读取所有参数的代码是
sscanf(buf, "%s \t %s \t %s \t %s \t %[^\n]s", bssid, freq, siglevel, keymgmt, ssid);
wpa_cli SCAN_RESULTS 命令的输出将是
bssid / frequency / signal level / flags / ssid
00:00:00:00:00:00 2462 -49 [WPA2-PSK-CCMP][ESS] MYSSID
11:11:11:11:11:11 2437 -64 [WPA2-PSK-CCMP][ESS] ANOTHERSSID
字段由制表符(\ t)分隔的地方,上面的输出我的代码工作正常。但是当我的扫描结果有一些开放的网络时,我的代码就会中断,我不知道如何更改代码以满足我的要求
开放网络的 wpa_cli SCAN_RESULTS 命令的输出
bssid / frequency / signal level / flags / ssid
00:00:00:00:00:00 2462 -49 [WPA2-PSK-CCMP][ESS] MYSSID
22:22:22:22:22:22 2437 -72 OPENSSID
通过上面的输出,我的代码报告了持有“OPENSSID”的 keymgmt 变量,而 ssid 变量为空。但我想让 keymgmt 变量为空,ssid 来保存“OPENSSID”。当我尝试将上述输出捕获到文件并尝试使用 hexdump 时,我可以看到“信号级别”和“ssid”之间存在两个连续的选项卡(\t\t)。有关如何更改 sscanf 代码以使其工作的任何指示