Pregunta

Es posible obtener una lista de todos los Ssid disponibles en el iPhone sin necesidad de utilizar una biblioteca privada?

He leído iPhone obtener SSID sin biblioteca privada que se trata de obtener los detalles acerca de la actual red.

Esta respuesta menciona a:

Si usted jailbreak a su dispositivo, puede utilizar la Apple80211 privada marco para buscar las redes Wi-Fi disponibles y su fuerza de la señal.Pero eso también significa que su aplicación ha sido rechazada.

Apple tiene el CaptiveNetwork API pero no parece ser una solución para obtener una lista de todas las redes disponibles.Parece que sólo es posible hacerlo con el uso de el Apple80211 biblioteca privada, o conectar a todos ellos.

Me estoy perdiendo algo, o no hay solución?

¿Fue útil?

Solución

Sin el uso de la biblioteca privada (Apple80211) Solo puede obtener el SSID de la red, su dispositivo está conectado actualmente a.

Otros consejos

Desde iOS 9, puede utilizar NEHotspotHelper para obtener una lista de Ssid.Pero usted tiene que conseguir el com.apple.developer.networking.HotspotHelper el derecho de Apple mediante el envío de una solicitud.

Verificación https://developer.apple.com/documentation/networkextension/nehotspothelper para obtener más información.

Se han lanzado algunas nuevas API como parte de la extensión de la red en IOS 9 y iOS 11. Si bien tampoco le permite escanear las redes mientras se ejecuta su aplicación, ambos le permiten realizar tareas relacionadas. P.ej. Puede escanear las redes mientras la página Wi-Fi de configuración se ejecuta utilizando HOTSPOT HELPER, y puede facilitar que un usuario se uniera a una red usando cualquiera de estos.

Aquí hay una comparación de los dos marcos.

Helper Helper

  • NEHotspotHelper (introducido en iOS 9, wwdc 2015 ).
  • requiere permiso especial de Apple.
  • requiere el derecho com.apple.developer.networking.HotspotHelper.
  • Para obtener instrucciones paso a paso para obtener este trabajo, consulte esta respuesta .
  • le permite participar en el descubrimiento / autenticación en una red Wi-Fi a través de la pantalla Wi-Fi en la aplicación de configuración. Usted se registra para ser notificado cuando se escanean las redes ( Por ejemplo, cuando el usuario inicia Wi-Fi en la aplicación Configuración), y puede completar automáticamente la contraseña y mostrar una anotación cerca del nombre de la red. El usuario aún necesita aprovechar el nombre de la red para conectarse, pero no solicitará una contraseña si la llenó previamente.

     ingrese la descripción de la imagen aquí

Configuración del punto de acceso

  • NEHotspotConfigurationManager (introducido en iOS 11, WWDC 2017 ).
  • no requiere permiso especial de Apple.
  • requiere el derecho com.apple.developer.networking.HotspotConfiguration.
  • le permite iniciar una conexión a una red Wi-Fi. le da una lista de SSID / contraseñas que deben conectarse a mientras su aplicación se está ejecutando. Presentará un cuadro de diálogo que le pide al usuario si desean conectarse a la red.

     ingrese la descripción de la imagen aquí

Primero de todas las importaciones anteriores a los dos archivos de encabezado del sistema

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

ABAJO FUNCIÓN / MÉTODO DE RETURSO 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";
}

Paso 1: Agregue el marco SystemConfiguration.FrameWork
Paso 2: Importación siguiente archivo de encabezado

import SystemConfiguration
import SystemConfiguration.CaptiveNetwork

Paso 3: Ahora usa el código:

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

#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;
        }
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top