android: определение типа безопасности сетей Wi-Fi в диапазоне (без подключения к ним)

Я могу перечислить все сети Wi-Fi в диапазоне (используя startScan + SCAN_RESULTS_AVAILABLE_ACTION + getScanResults) и получить их SSID и BSSID значений, но я не могу понять, как определить тип безопасности каждой сети.

В моем основном объекте:

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
    registerReceiver(scanReceiver, intentFilter);
    ((WifiManager)getSystemService(Context.WIFI_SERVICE)).startScan();

В моем объекте scanReceiver:

public void onReceive(Context c, Intent intent) {
    if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())){
        mainObject.scanComplete();
    }
}

И снова в моем основном объекте:

public void scanComplete()
{
    List<ScanResult> networkList = ((WifiManager)getSystemService.(Context.WIFI_SERVICE)).getScanResults();
    for (ScanResult network : networkList)
    {
        <do stuff>
    }
}

Код работает постольку, поскольку в конечном итоге вызывается scanComplete, и я могу успешно перечислить все близлежащие сети Wi-Fi и получить их SSID и BSSID, но я не могу понять, как определить их тип безопасности.

Есть ли способ сделать это?

Заранее спасибо.

22
задан Tjaart 26 September 2012 в 13:54
поделиться

2 ответа

Вам необходимо проанализировать строку возможностей ScanResult в методе scanComplete. Согласно документации для разработчиков Android :

ScanResult.capabilities описывает схемы аутентификации, управления ключами и шифрования, поддерживаемые точкой доступа.

Возможно, вы сможете использовать - или, по крайней мере, использовать в качестве примера - статические вспомогательные методы, доступные в классе AccessPointState.

25
ответ дан 29 November 2019 в 03:38
поделиться

Тип безопасности каждой сети указан в столбце «Возможности» результатов сканирования.

Итак, чтобы получить тип безопасности для вас, добавьте это к своей части кода.

public void scanComplete()
{
    List<ScanResult> networkList = ((WifiManager)getSystemService.(Context.WIFI_SERVICE)).getScanResults();
    for (ScanResult network : networkList)
    {
        String Capabilities =  network.capabilities;

        //Then you could add some code to check for a specific security type. 
        if(Capabilities.contains("WPA"))
     {
          // We know there is WPA encryption
         }
        else if(Capabilities.contains("WEP"))
         {
         // We know there is WEP encryption
         }
        else
         { 
         // Another type of security scheme, open wifi, captive portal, etc..
         }

    }
}

В любом случае, вот небольшой исходный код. Я бы полностью рекомендовал ответ Айя, поскольку он является исключительным и более полным.

1
ответ дан 29 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: