34

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

現在のネットワークの詳細を取得するためのプライベートライブラリなしでiPhonegetSSIDを読みました。

この回答は次のように述べています。

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

AppleにはCaptiveNetworkAPIがありますが、利用可能なすべてのネットワークのリストを取得するための解決策はないようです。Apple80211プライベートライブラリを使用するか、それらすべてに接続することによってのみ、これを行うことができるようです。

私は何かが足りないのですか、それとも解決策がありませんか?

4

6 に答える 6

30

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

于 2012-03-13T13:30:35.320 に答える
4

iOS 9以降、NEHotspotHelperを使用してSSIDのリストを取得できます。ただしcom.apple.developer.networking.HotspotHelper、リクエストを送信してAppleから資格を取得する必要があります。

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

于 2017-08-21T09:32:12.353 に答える
3

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

これが2つのフレームワークの比較です。

ホットスポットヘルパー

  • NEHotspotHelper(iOS 9、WWDC 2015で導入されました)。
  • Appleからの特別な許可が必要です。
  • com.apple.developer.networking.HotspotHelper資格が必要です。
  • これを機能させるためのステップバイステップの手順については、この回答を参照してください。
  • 設定アプリのWi-Fi画面を介してWi-Fiネットワークの検出/認証に参加できます。ネットワークがスキャンされたとき(たとえば、ユーザーが設定アプリでWi-Fiを起動したとき)に通知を受け取るように登録すると、パスワードを自動的に事前入力し、ネットワーク名の近くに注釈を表示できます。ユーザーは接続するためにネットワーク名をタップする必要がありますが、事前に入力した場合はパスワードの入力を求められません。

    ここに画像の説明を入力してください

ホットスポットの構成

  • NEHotspotConfigurationManager(iOS 11、WWDC 2017で導入されました)。
  • Appleからの特別な許可は必要ありません。
  • com.apple.developer.networking.HotspotConfiguration資格が必要です。
  • Wi-Fiネットワークへの接続を開始できます。アプリの実行中に接続する必要があるSSID/パスワードのリストを指定します。ネットワークに接続するかどうかをユーザーに尋ねるダイアログが表示されます。

    ここに画像の説明を入力してください

于 2018-09-24T06:04:01.233 に答える
0

ステップ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"
        }
    }
于 2016-05-31T11:30:08.180 に答える
0

まず最初に、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";
}
于 2017-03-08T09:04:21.040 に答える
-1
#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;
        }
    }
于 2017-08-01T05:36:13.257 に答える