iPhone получит список всех SSIDs без частной библиотеки

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

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

ответ отмечает:

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

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

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

6 ответов


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


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

проверить https://developer.apple.com/documentation/networkextension/nehotspothelper Для больше информации.


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

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

ниже функция / метод возвращает 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";
}

Шаг 1: добавить рамки SystemConfiguration.рамки
Шаг 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"
        }
    }

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

вот сравнение двух структур.

точка доступа Помощник!--9-->
  • 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. вы даете ему список SSIDs / паролей, которые должны быть подключены во время работы вашего приложения. Он представит диалоговое окно с запросом пользователя, если они хотят подключиться к сети.

    enter image description here


#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;
        }
    }