1.   该功能实现基于MobileApple80211框架来进行开发,而目前该框架成为了私有框架,其中的API均为私有API。

如果使用这些API可能导致应用不能上app store或者ios版本升级过程中,可能对私有api不兼容,导致程序莫名的挂掉或数据获取失败

2.   终端必须越狱,且必须把程序部署到终端的/Applications目录下取得超级用户权限才能获得wifi的访问权限

代码

#import <Foundation/Foundation.h>

#import <CoreFoundation/CoreFoundation.h>

#include <dlfcn.h>

@interface SOLStumbler : NSObject {

NSMutableDictionary *networks; //Key: MAC Address (BSSID)

void *libHandle;

void *airportHandle;

int (*apple80211Open)(void *);

int (*apple80211Bind)(void *, NSString *);

int (*apple80211Close)(void *);

int (*associate)(void *, NSDictionary*, NSString*);

int (*apple80211Scan)(void *, NSArray **, void *);

}

- (NSDictionary *)networks;                                                             //returns all 802.11 scanned network(s)

- (NSDictionary *)network:(NSString *) BSSID;                   //return specific 802.11 network by BSSID (MAC Address)

- (void)scanNetworks;

- (int)numberOfNetworks;

@end

#import "SOLStumbler.h"

@implementation SOLStumbler

- (id)init

{

self = [super init];

networks = [[NSMutableDictionary alloc] init];

libHandle = dlopen("/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration", RTLD_LAZY);

char *error;

if (libHandle == NULL && (error = dlerror()) != NULL)  {

NSLog(@">>>  error %s",error);

exit(1);

}

apple80211Open = dlsym(libHandle, "Apple80211Open");

apple80211Bind = dlsym(libHandle, "Apple80211BindToInterface");

apple80211Close = dlsym(libHandle, "Apple80211Close");

apple80211Scan = dlsym(libHandle, "Apple80211Scan");

apple80211Open(&airportHandle);

apple80211Bind(airportHandle, @"en0");

return self;

}

- (NSDictionary *)network:(NSString *) BSSID

{

return [networks objectForKey:@"BSSID"];

}

- (NSDictionary *)networks

{

return networks;

}

- (void)scanNetworks

{

NSLog(@"Scanning WiFi Channels...");

NSDictionary *parameters = [[NSDictionary alloc] init];

NSArray *scan_networks; //is a CFArrayRef of CFDictionaryRef(s) containing key/value data on each discovered network

apple80211Scan(airportHandle, &scan_networks, parameters);

NSLog(@"===-scan_networks-======%@",scan_networks);

for (int i = 0; i < [scan_networks count]; i++) {

[networks setObject:[scan_networks objectAtIndex: i] forKey:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"]];

}

NSLog(@"Scanning WiFi Channels Finished.");

}

- (int)numberOfNetworks

{

return [networks count];

}

- ( NSString * ) description {

NSMutableString *result = [[NSMutableString alloc] initWithString:@"Networks State: \n"];

for (id key in networks){

[result appendString:[NSString stringWithFormat:@"%@ (MAC: %@), RSSI: %@, Channel: %@ \n",

[[networks objectForKey: key] objectForKey:@"SSID_STR"], //Station Name

key, //Station BBSID (MAC Address)

[[networks objectForKey: key] objectForKey:@"RSSI"], //Signal Strength

[[networks objectForKey: key] objectForKey:@"CHANNEL"]  //Operating Channel

]];

}

return [NSString stringWithString:result];

}

- (void) dealloc {

apple80211Close(airportHandle);

[super dealloc];

}

@end

IOS零碎技术整理(3)-获取wifi列表的更多相关文章

  1. IOS零碎技术整理(1)-后台运行

    这两天做关于离线通知的功能,总结了一点关于这方面的注意点:按Home键回到桌面后程序很快被挂起,系统将关闭程序的Socket监听,此时程序将不能继续执行网络请求等操作. 两种方式可以使程序继续存活一段 ...

  2. IOS零碎技术整理(2)-隐藏系统Tabbar

    原理就是将tabbar移出显示区 -(void)hideSystemTabBar:(UITabBar*) tabbarcontroller { [UIView beginAnimations:nil ...

  3. android 获取wifi列表,如果你忽略了这个细节,可能你的软件会崩溃

    一:业务描述 最近公司有一个小需求,用户点击wifi扫描按钮(注意:是用户主动点击wifi扫描按钮),app去扫描附近的wifi,显示在listView中,仅此而已,app都不用去连接某个wifi,看 ...

  4. android开发-获取wifi列表

    近期博主在学frangment框架,因此想着想着就想通过listfragment完毕对wifi列表的获取. 好! 如今就不说废话了. 一.wifi的基础知识 在Android的官方文档中定义了例如以下 ...

  5. iOS - 音乐播放器之怎么获取音乐列表

    方法一: 这个方法是通过获取到沙盒路径,来得到音乐的路径(使用这个方法需要把音乐放进沙盒) NSFileManager *manager = [NSFileManager defaultManager ...

  6. iPhone,iPad如何获取WIFI名称即SSID

    本文转载至 http://blog.csdn.net/wbw1985/article/details/20530281  2010年开始苹果清理了一批APP Store上的WIFI扫描软件, 缘由语焉 ...

  7. iOS 12中获取WiFi的SSID

    开始搞智能家居,wifi获取不到了?? 小插曲 旧方法失效,19-12-15更新,ios13开始需要请求定位信息 SSID全称Service Set IDentifier, 即Wifi网络的公开名称. ...

  8. iOS开发中获取WiFi相关信息

    iOS 开发中难免会遇到很多与网络方面的判断,这里做个汇总,大多可能是与WiFi相关的. 1.Ping域名.Ping某IP 有 时候可能会遇到ping 某个域名或者ip通不通,再做下一步操作.这里的p ...

  9. iOS - 什么!iOS13 又获取不到WiFi了

    iOS 12 适配WiFi 增加隐私权限 https://www.cnblogs.com/baitongtong/p/10179519.html ios13又新增定位权限 别的不说,理解请看上篇文章 ...

随机推荐

  1. C# 生成条形码图片,效果不错

    //首先引用 条码库BarcodeLib.dll using System; using System.Collections.Generic; using System.Linq; using Sy ...

  2. 对上次“对字符串进行简单的字符数字统计 探索java中的List功能 ”程序,面向对象的改进

    之前的随笔中的程序在思考后发现,运用了太多的static 函数,没有将面向对象的思想融入,于是做出了一下修改: import java.util.ArrayList; import java.util ...

  3. Ansible-Tower快速入门-5.导入许可【翻译】

    导入许可 Tower需要一个有效的许可才可以正常运行,当你输入你的相关信息得以下载tower时,你应该有接收到一封包含许可的email邮件,你也可以直接从ansible获取许可. 如果你不能获取许可或 ...

  4. CentOS7 监控进程网络流量工具安装

    服务器在做测试的时候,需要监控网络流量,用来了解在不同人数的时候服务器的网络使用量. 我们使用服务器环境是centos7,centos下通常使用iftop,或者nethogs来进行网络流量监控.这2个 ...

  5. OpenGL管线(用经典管线代说着色器内部)

    图形管线(graphics pipeline)向来以复杂为特点,这归结为图形任务的复杂性和挑战性.OpenGL作为图形硬件标准,是最通用的图形管线版本.本文用自顶向下的思路来简单总结OpenGL图形管 ...

  6. js对象详解

    js自定义对象 一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在J ...

  7. HTML 列表详解

    1.有序列表    有序列表是编号列表,用于对网页中的某些内容进行编号排列,以便使读者清晰地了解每行的顺序.在HTML中插入有序列表是通过<ol>和<li>标签来实现的.首标签 ...

  8. MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的解决办法和原因

    这两天下载了MySQL5.7.11进行安装,发现到了初次使用输入密码的时候,不管怎样都进不去,即使按照网上说的在mysqld 下面添加skip-grant-tables也是不行,后来研究了两天,终于找 ...

  9. csv 文件用Excel打开乱码

    最近在做一个上传的功能,记录下自己的感受. 刚开始我用的是excel上传:但是发现客户服务器有用64位的,使用的时候程序会报错: 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” ...

  10. 较老版本的AFNetworking使用心得

    较老版本的 AFNetworking 下载链接 ( http://pan.baidu.com/s/14Cxga ) 将压缩包中的文件夹拖入xcode工程项目中并引入如下的框架 简单的 JOSN 解析例 ...