web-dev-qa-db-fra.com

iPhone obtenir une liste de tous les SSID sans bibliothèque privée

Est-il possible d'obtenir une liste de tous les SSID disponibles sur l'iPhone sans utiliser de bibliothèque privée?

J'ai lu l'iPhone obtient le SSID sans bibliothèque privée qui consiste à obtenir des détails sur le réseau actuel .

Cette réponse mentionne:

Si vous jailbreaker votre appareil, vous pouvez utiliser le cadre privé Apple80211 pour rechercher les réseaux Wi-Fi disponibles et la force de leur signal. Mais cela signifie également que votre application sera rejetée.

Apple a CaptiveNetwork API mais il ne semble pas y avoir de solution pour obtenir une liste de tous les réseaux disponibles. Il semble que cela ne soit possible qu'en utilisant la bibliothèque privée Apple80211 , ou en se connectant à tous.

Suis-je en train de manquer quelque chose ou n'y a-t-il pas de solution?

33
grubernd

Sans utilisation de bibliothèque privée (Apple80211), vous ne pouvez obtenir que le SSID du réseau auquel votre appareil est actuellement connecté.

29
Rok Jarc

Depuis iOS 9, vous pouvez utiliser NEHotspotHelper pour obtenir une liste des SSID. Mais vous devez obtenir le com.Apple.developer.networking.HotspotHelper droit de Apple en envoyant une demande.

Vérifiez https://developer.Apple.com/documentation/networkextension/nehotspothelper pour plus d'informations.

4
KenLiang

Certaines nouvelles API ont été publiées dans le cadre de l'extension réseau dans iOS 9 et iOS 11. Bien qu'aucune ne vous permette de rechercher des réseaux pendant que votre application est en cours d'exécution, elles vous permettent toutes deux d'effectuer des tâches connexes. Par exemple. vous pouvez rechercher des réseaux pendant que la page Paramètres Wi-Fi est en cours d'exécution à l'aide de Hotspot Helper, et vous pouvez faciliter la connexion d'un utilisateur à un réseau à l'aide de l'une ou l'autre de ces options.

Voici une comparaison des deux cadres.

Aide Hotspot

  • NEHotspotHelper (introduit dans iOS 9, WWDC 2015 ).
  • Nécessite une autorisation spéciale d'Apple.
  • Nécessite le com.Apple.developer.networking.HotspotHelper droit.
  • Pour obtenir des instructions pas à pas pour que cela fonctionne, voir cette réponse .
  • Vous permet de participer à la découverte/authentification sur un réseau Wi-Fi via l'écran Wi-Fi de l'application Paramètres. Vous vous inscrivez pour être averti lorsque les réseaux sont en cours d'analyse (par exemple lorsque l'utilisateur lance le Wi-Fi dans l'application Paramètres), et vous pouvez pré-remplir automatiquement le mot de passe et afficher une annotation près du nom du réseau. L'utilisateur doit toujours taper sur le nom du réseau pour se connecter, mais il ne demandera pas de mot de passe si vous l'avez pré-rempli.

    enter image description here

Configuration du hotspot

  • NEHotspotConfigurationManager (introduit dans iOS 11, WWDC 2017 ).
  • Ne nécessite pas d'autorisation spéciale d'Apple.
  • Nécessite le com.Apple.developer.networking.HotspotConfiguration droit.
  • Vous permet d'établir une connexion à un réseau Wi-Fi. Vous lui donnez une liste de SSID/mots de passe auxquels vous devez vous connecter pendant que votre application est en cours d'exécution . Il présentera une boîte de dialogue demandant à l'utilisateur s'il souhaite se connecter au réseau.

    enter image description here

1
Senseful

Tout d'abord, importez au-dessus de deux fichiers d'en-tête système

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

ci-dessous Fonction/Méthode Retour 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
Sarvesh Singh

Étape 1: ajouter le framework SystemConfiguration.framework
Étape 2: importer le fichier d'en-tête suivant

import SystemConfiguration
import SystemConfiguration.CaptiveNetwork

Étape 3: Utilisez maintenant le code:

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"
        }
    }
0
Sarvesh Singh