web-dev-qa-db-ja.com

iPhoneはプライベートライブラリなしですべてのSSIDのリストを取得します

プライベートライブラリを使用せずに、iPhoneで利用可能なすべてのSSIDのlistを取得することは可能ですか?

私は iPhoneがプライベートライブラリなしでSSIDを取得する を読みますcurrentネットワークに関する詳細を取得することについてです。

この回答 言及:

デバイスを脱獄する場合は、 Apple80211 プライベートフレームワークを使用して、利用可能なWi-Fiネットワークとその信号強度を調べることができます。ただし、これはアプリが拒否されることも意味します。

Appleは CaptiveNetwork API を持っていますが、利用可能なすべてのネットワークのリストを取得するソリューションはないようです。 Apple80211プライベートライブラリ を使用するか、それらすべてに接続することでのみ可能と思われます。

何か不足していますか、それとも解決策はありませんか?

33
grubernd

プライベートライブラリ(Apple80211)デバイスが現在接続しているネットワークのSSIDのみを取得できます。

29
Rok Jarc

IOS 9以降、NEHotspotHelperを使用してSSIDのリストを取得できます。しかし、あなたはcom.Apple.developer.networking.HotspotHelper Apple=からの要求を送信することによる資格。

詳細は https://developer.Apple.com/documentation/networkextension/nehotspothelper を確認してください。

4
KenLiang

IOS 9およびiOS 11のネットワーク拡張機能の一部としていくつかの新しいAPIがリリースされました。どちらも、アプリの実行中にネットワークをスキャンすることはできませんが、どちらも関連するタスクを実行できます。例えば。 Hotspot Helperを使用して、設定Wi-Fiページの実行中にネットワークをスキャンできます。また、これらのいずれかを使用して、ユーザーがネットワークに簡単に参加できるようにすることができます。

2つのフレームワークの比較を次に示します。

ホットスポットヘルパー

  • 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

1
Senseful

まず、2つのシステムヘッダーファイルの上にインポートします。

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

ステップ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"
        }
    }
0
Sarvesh Singh