wpa_cli를 통해 SCAN 및 SCAN_RESULTS 명령을 실행하고 wifi 스캔 결과를 얻는 C 코드를 작성하고 있습니다. 나는 특정 시나리오wpa_cli 구문 분석 코드 SCAN_RESULTS 출력
에서 키 관리 및 SSID 필드를 캡처 할 SCAN_RESULTS 출력을 구문 분석에 문제가내가 모든 매개 변수를 읽기 위해 사용하는 코드는
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 변수를 "OPENSSID"를 저장하기 위해 빈 변수와 ssid 변수로 사용하고 싶습니다. 위의 출력을 파일로 캡쳐하고 hexdump를 시도했을 때 "신호 레벨"과 "ssid"사이에 두 개의 연속 탭 (\ t \ t)이 있습니다. 작동하도록 sscanf 코드를 변경하는 방법에 대한 모든 포인터는 예상대로 작동하지 않습니다.
저는 그것이 정규식이 아니라고 확신합니다. Regexes는 매우 특정한 유형의 텍스트 처리 도구입니다. – user1618143