Подтвердить что ты не робот

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

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

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

В этом ответе говорится:

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Шаг 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"
        }
    }

Ответ 5

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

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

Помощник горячих точек

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

    enter image description here

Конфигурация точек доступа

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

    enter image description here

Ответ 6

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