iPhone获取所有没有私有库的SSID列表

时间:2012-03-13 12:56:06

标签: ios iphone ssid bssid

是否可以在不使用私有库的情况下获取iPhone上所有可用SSID的列表

我读了iPhone get SSID without private library,其中包含有关当前网络的详细信息。

This answer提及:

  

如果您越狱设备,可以使用Apple80211私有框架查找可用的Wi-Fi网络及其信号强度。但这也意味着您的应用会被拒绝。

Apple拥有CaptiveNetwork API,但似乎没有获得所有可用网络列表的解决方案。似乎只能使用the Apple80211 private library或连接所有这些来实现。

我错过了什么,或者没有解决方案?

6 个答案:

答案 0 :(得分:29)

如果不使用私人图书馆(Apple80211),您只能获得设备当前所连接的网络的SSID。

答案 1 :(得分:4)

从iOS 9开始,您可以使用 NEHotspotHelper 来获取SSID列表。但您必须通过发送请求从Apple获得 #install ConEmu windows_package 'ConEmu' do installer_type :custom retries 2 options " /S /D=D:\\Home\\Apps\\ConEmu" source "" action :install end 权利。

查看https://developer.apple.com/documentation/networkextension/nehotspothelper了解详情。

答案 2 :(得分:1)

首先导入以上两个系统头文件

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

答案 3 :(得分:1)

一些新API已作为iOS 9和iOS 11中网络扩展的一部分发布。虽然两者都不允许您在应用程序运行时扫描网络,但它们都允许您执行相关任务。例如。您可以使用Hotspot Helper在“设置Wi-Fi”页面运行时扫描网络,并且可以使用户更容易使用这两种方法加入网络。

这里是两个框架的比较。

热点助手

  • NEHotspotHelper(在iOS 9 WWDC 2015中引入)。
  • 需要Apple的特殊许可。
  • 需要com.apple.developer.networking.HotspotHelper权利。
  • 有关逐步操作的逐步说明,请参见this answer
  • 允许您通过“设置”应用中的“ 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

答案 4 :(得分: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"
        }
    }

答案 5 :(得分:-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;
        }
    }