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」の間に 2 つの連続したタブ (\t\t) が存在することがわかりました。sscanf コードを変更して機能させる方法についての指針