iPhone получит список всех SSID без приватной библиотеки - PullRequest
32 голосов
/ 13 марта 2012

Возможно ли получить список всех доступных SSID на iPhone без использования личной библиотеки?

Я прочитал iPhone получает SSID без личной библиотеки , что касается получения информации о текущей сети.

В этом ответе упоминается:

Если вы сделаете джейлбрейк своего устройства, вы можете использовать частную платформу Apple80211 для поиска доступных сетей Wi-Fi и уровня их сигнала. Но это также означает, что ваше приложение будет отклонено.

Apple имеет CaptiveNetwork API , но, похоже, не существует решения для получения списка всех доступных сетей. Кажется, это возможно сделать только с помощью частной библиотеки Apple80211 или подключением ко всем из них.

Я что-то упустил или нет решения?

Ответы [ 6 ]

29 голосов
/ 13 марта 2012

Без использования личной библиотеки (Apple80211) вы можете получить только SSID сети, к которой в данный момент подключено ваше устройство.

4 голосов
/ 21 августа 2017

Начиная с iOS 9, вы можете использовать NEHotspotHelper , чтобы получить список SSID. Но вы должны получить разрешение com.apple.developer.networking.HotspotHelper от Apple, отправив запрос.

Проверьте https://developer.apple.com/documentation/networkextension/nehotspothelper для получения дополнительной информации.

1 голос
/ 24 сентября 2018

Некоторые новые API были выпущены как часть Расширения сети в iOS 9 и iOS 11. Хотя ни один из них не позволяет сканировать сети во время работы приложения, оба они позволяют выполнять связанные задачи.Например, вы можете сканировать сети, пока страница «Настройки Wi-Fi» работает с помощью Hotspot Helper, и вы можете упростить для пользователя присоединение к сети с помощью любого из них.

Вот сравнение двух платформ.

Помощник Hotspot

  • NEHotspotHelper (представлен в iOS 9, WWDC 2015 ).
  • Требуется специальное разрешение от Apple.
  • Требуется разрешение com.apple.developer.networking.HotspotHelper.
  • Пошаговые инструкции для получения этой работы см. В этом ответе .
  • Позволяет участвовать в обнаружении / аутентификации в сети Wi-Fi через экран Wi-Fi в приложении «Настройки». Вы регистрируетесь, чтобы получать уведомления о сканировании сетей (например, когда пользователь запускает Wi-Fi).в приложении «Настройки»), и вы можете автоматически предварительно заполнить пароль и отобразить аннотацию рядом с именем сети.Пользователю все еще нужно нажать на имя сети, чтобы подключиться, но он не будет запрашивать пароль, если вы предварительно заполнили его.

    enter image description here

Конфигурация Hotspot

  • NEHotspotConfigurationManager (введено в iOS 11, WWDC 2017 ).
  • Не требует специального разрешения от Apple.
  • Требуется разрешение com.apple.developer.networking.HotspotConfiguration.
  • Позволяет инициировать подключение к сети Wi-Fi. Вы предоставляете ему список SSID / паролей.это должно быть подключено во время работы вашего приложения.Появится диалоговое окно с вопросом, хотят ли они подключиться к сети.

    enter image description here

1 голос
/ 08 марта 2017

Первым делом импортируем выше двух системных заголовочных файлов

import SystemConfiguration/SystemConfiguration.h
import SystemConfiguration/CaptiveNetwork.h

ниже Функция / Метод Return SSIDName

-(NSString *)getNetworkId{
    NSString *string = CFBridgingRelease(CNCopySupportedInterfaces());
    NSArray *interfacesArray = CFBridgingRelease(CFBridgingRetain(string));
        if(interfacesArray.count > 0){
            NSString *networkName = [interfacesArray objectAtIndex:0];
            CFStringRef yourFriendlyCFString = (__bridge CFStringRef)networkName;
            NSDictionary *unsafeInterfaceData = CFBridgingRelease(CNCopyCurrentNetworkInfo(yourFriendlyCFString));
            NSString *ssidName = unsafeInterfaceData[@"SSID"];
            return ssidName;
        }
    return @"No network Found";
}
0 голосов
/ 01 августа 2017
#import SystemConfiguration#
##import SystemConfiguration.CaptiveNetwork##

 //create variable
  var SSIDNameArray = NSMutableArray()
  var nameArray : NSArray = [];
 // Here function to return all SSIDName
    func getUsedSSID()->NSArray{
        let interfaces = CNCopySupportedInterfaces()
        if interfaces != nil {
            let interfacesArray = CFBridgingRetain(interfaces) as! NSArray
            if interfacesArray.count > 0 {
                for interfaceName in interfacesArray {
                    let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName as! CFString)! as NSDictionary
                    let SSIDName = unsafeInterfaceData["SSID"] as! String
                    self.SSIDNameArray .add(SSIDName)
                }
                nameArray = self.SSIDNameArray .copy() as! NSArray
                return nameArray;
            }else{
                 return nameArray;
            }
        }else{
            return nameArray;
        }
    }
0 голосов
/ 31 мая 2016

Шаг 1: добавить каркас SystemConfiguration.framework
Шаг 2: импортировать следующий заголовочный файл

import SystemConfiguration
import SystemConfiguration.CaptiveNetwork

Шаг 3: Теперь используйте код:

func getUsedSSID()->String {

       let interfaces = CNCopySupportedInterfaces()

        if interfaces != nil {

            let interfacesArray = CFBridgingRetain(interfaces) as! NSArray

            if interfacesArray.count > 0 {

                let interfaceName = interfacesArray[0] as! String
                let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName)! as Dictionary
                let SSIDName = unsafeInterfaceData["SSID"] as! String
                print(SSIDName)/* here print recentally used wifi name*/
                return SSIDName
            }else{
                return "0"
            }
        }else{
            return "0"
        }
    }
...