ios - segura - iPhone obtener una lista de todos los SSID sin biblioteca privada
pulsador wps para iphone (6)
¿Es posible obtener una lista de todos los SSID disponibles en el iPhone sin utilizar una biblioteca privada?
Leí el iPhone obtener SSID sin una biblioteca privada, que trata de obtener detalles sobre la red actual .
Esta respuesta menciona:
Si desbloquea su dispositivo, puede usar el marco privado Apple80211 para buscar las redes de Wi-Fi disponibles y su potencia de señal. Pero eso también significa que tu aplicación será rechazada.
Apple tiene la API de CaptiveNetwork pero no parece haber una solución para obtener una lista de todas las redes disponibles. Parece que solo es posible hacerlo utilizando Apple80211 o conectándolos a todos.
¿Me estoy perdiendo algo, o no hay solución?
Algunas API nuevas se han lanzado como parte de la Extensión de red en iOS 9 y iOS 11. Aunque ninguna de ellas le permite buscar redes mientras su aplicación se está ejecutando, ambas le permiten realizar tareas relacionadas. Por ejemplo, puede buscar redes mientras la página de configuración de Wi-Fi se está ejecutando usando Hotspot Helper, y puede hacer que sea más fácil para un usuario unirse a una red usando cualquiera de estos.
Aquí hay una comparación de los dos marcos.
Hotspot 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 que esto funcione, consulte esta respuesta .
Le permite participar en el descubrimiento / autenticación a una red Wi-Fi a través de la pantalla de Wi-Fi en la aplicación Configuración. Se registra para recibir una notificación cuando se escanean las redes (por ejemplo, cuando el usuario inicia Wi-Fi en la aplicación Configuración), y puede completar previamente la contraseña y mostrar una anotación cerca del nombre de la red. El usuario aún debe tocar el nombre de la red para conectarse, pero no le pedirá una contraseña si la ha completado previamente.
Configuración de 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 a las que debe conectarse mientras se ejecuta su aplicación. Se presentará un cuadro de diálogo que le pregunta al usuario si desea conectarse a la red.
Desde iOS 9, puedes usar NEHotspotHelper para obtener una lista de SSID. Pero debe obtener el derecho com.apple.developer.networking.HotspotHelper
de Apple mediante el envío de una solicitud.
Consulte https://developer.apple.com/documentation/networkextension/nehotspothelper para obtener más información.
Primero de todos importar por encima de dos archivos de encabezado del sistema
import SystemConfiguration/SystemConfiguration.h
import SystemConfiguration/CaptiveNetwork.h
debajo de Función / Método Devolver 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: agregar el marco SystemConfiguration.framework
Paso 2: importar 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"
}
}
Sin el uso de la biblioteca privada ( Apple80211
), solo puede obtener el SSID de la red a la que está conectado actualmente su dispositivo.
#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;
}
}