最近项目中需要扫描环境周围中的wifi信息,查了一些资料,扫描wifi信息的api是苹果公司的私有api,使用这些api可能导致应用不能上app store或者ios版本升级过程中,可能对私有api不兼容。

关于扫描wifi信息的参考资料:http://code.google.com/p/uwecaugmentedrealityproject/和http://code.google.com/p/iphone-wireless/

下面是我在3gs ios 4.0上测试的结果:

2010-12-26 12:32:58.819 iphone.wifiii[538:307] Scanning WiFi Channels…
2010-12-26 12:32:59.695 iphone.wifiii[538:307] ===–======
( { AGE = 0; "AP_MODE" = 2; "BEACON_INT" = 10; BSSID = "0:21:29:9d:79:d6"; CAPABILITIES = 1041; CHANNEL = 6; "CHANNEL_FLAGS" = 8; IE = <30140100 000fac04 0100000f ac040100 000fac02 0000>; NOISE = 0; RATES =         ( 1, 2, 5, 11, 18, 24, 36, 54, 6, 9, 12, 48 ); "RSN_IE" =         { "IE_KEY_RSN_AUTHSELS" =             ( 2 ); "IE_KEY_RSN_MCIPHER" = 4; "IE_KEY_RSN_UCIPHERS" =             ( 4 ); "IE_KEY_RSN_VERSION" = 1; }; RSSI = "-91"; SSID = <6c696e6b 737973>; "SSID_STR" = linksys; }, { AGE = 0; "AP_MODE" = 2; "BEACON_INT" = 10; BSSID = "0:23:cd:2f:90:fa"; CAPABILITIES = 1073; CHANNEL = 6; "CHANNEL_FLAGS" = 8; NOISE = 0; RATES =         ( 1, 2, 5, 11, 6, 12, 24, 36, 9, 18, 48, 54 ); RSSI = "-88"; SSID = <62656964 6f756172 74>; "SSID_STR" = beidouart; WEP = 1; }, { AGE = 0; "AP_MODE" = 2; "BEACON_INT" = 10; BSSID = "1c:bd:b9:d0:8b:f"; CAPABILITIES = 1041; CHANNEL = 1; "CHANNEL_FLAGS" = 8; IE = <dd180050 f2010100 0050f202 01000050 f2020100 0050f202 0c00>; NOISE = 0; RATES =         ( 1, 2, 5, 11, 18, 24, 36, 54, 6, 9, 12, 48 ); RSSI = "-88"; SSID = <4368696e 614e6574 2d526d66 5a>; "SSID_STR" = "ChinaNet-RmfZ"; "WPA_IE" =         { "IE_KEY_WPA_AUTHSELS" =             ( 2 ); "IE_KEY_WPA_MCIPHER" = 2; "IE_KEY_WPA_UCIPHERS" =             ( 2 ); "IE_KEY_WPA_VERSION" = 1; }; }, { AGE = 0; "AP_MODE" = 2; "BEACON_INT" = 10; BSSID = "94:c:6d:66:8:84"; CAPABILITIES = 1073; CHANNEL = 7; "CHANNEL_FLAGS" = 8; IE = <30140100 000fac04 0100000f ac040100 000fac02 0100dd16 0050f201 01000050 f2040100 0050f204 01000050 f202>; NOISE = 0; RATES =         ( 1, 2, 5, 11, 6, 12, 24, 36, 9, 18, 48, 54 ); "RSN_IE" =         { "IE_KEY_RSN_AUTHSELS" =             ( 2 ); "IE_KEY_RSN_CAPS" =             { "GTKSA_REPLAY_COUNTERS" = 1; "NO_PAIRWISE" = 0; "PRE_AUTH" = 1; "PTKSA_REPLAY_COUNTERS" = 1; }; "IE_KEY_RSN_MCIPHER" = 4; "IE_KEY_RSN_UCIPHERS" =             ( 4 ); "IE_KEY_RSN_VERSION" = 1; }; RSSI = "-73"; SSID = <4850542d 54502d4c 494e4b5f 36363038 3834>; "SSID_STR" = "HPT-TP-LINK_660884"; "WPA_IE" =         { "IE_KEY_WPA_AUTHSELS" =             ( 2 ); "IE_KEY_WPA_MCIPHER" = 4; "IE_KEY_WPA_UCIPHERS" =             ( 4 ); "IE_KEY_WPA_VERSION" = 1; }; }, { AGE = 0; "AP_MODE" = 2; "BEACON_INT" = 10; BSSID = "0:22:b0:b:a4:8f"; CAPABILITIES = 1041; CHANNEL = 11; "CHANNEL_FLAGS" = 8; IE = <dd180050 f2010100 0050f202 01000050 f2020100 0050f202 0000>; NOISE = 0; RATES =         ( 1, 2, 5, 11, 18, 24, 36, 54, 6, 9, 12, 48 ); RSSI = "-73"; SSID = <4368696e 614e6574 2d565350 57454233>; "SSID_STR" = "ChinaNet-VSPWEB3"; "WPA_IE" =         { "IE_KEY_WPA_AUTHSELS" =             ( 2 ); "IE_KEY_WPA_MCIPHER" = 2; "IE_KEY_WPA_UCIPHERS" =             ( 2 ); "IE_KEY_WPA_VERSION" = 1; }; }, { AGE = 0; "AP_MODE" = 2; "BEACON_INT" = 10; BSSID = "8:10:74:62:7f:4"; CAPABILITIES = 1041; CHANNEL = 3; "CHANNEL_FLAGS" = 8; NOISE = 0; RATES =         ( 1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54 ); RSSI = "-63"; SSID = <56535020 57454220 33>; "SSID_STR" = "VSP WEB 3"; WEP = 1; }, { AGE = 0; "AP_MODE" = 2; "BEACON_INT" = 10; BSSID = "0:24:1:d0:23:f2"; CAPABILITIES = 1073; CHANNEL = 1; "CHANNEL_FLAGS" = 8; NOISE = 0; RATES =         ( 1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54 ); RSSI = "-60"; SSID = <56535020 57454220 32>; "SSID_STR" = "VSP WEB 2"; WEP = 1; }, { AGE = 0; "AP_MODE" = 2; "BEACON_INT" = 10; BSSID = "0:19:e0:ae:2b:80"; CAPABILITIES = 1073; CHANNEL = 6; "CHANNEL_FLAGS" = 8; NOISE = 0; RATES =         ( 1, 2, 5, 11, 6, 12, 24, 36, 9, 18, 48, 54 ); RSSI = "-57"; SSID = <56535020 574542>; "SSID_STR" = "VSP WEB"; WEP = 1; }
)
2010-12-26 12:32:59.724 iphone.wifiii[538:307] Scanning WiFi Channels Finished.
2010-12-26 12:32:59.729 iphone.wifiii[538:307] —–wifi description———-
Networks State:
VSP WEB 3 (MAC: 8:10:74:62:7f:4), RSSI: -63, Channel: 3
VSP WEB 2 (MAC: 0:24:1:d0:23:f2), RSSI: -60, Channel: 1
ChinaNet-RmfZ (MAC: 1c:bd:b9:d0:8b:f), RSSI: -88, Channel: 1
beidouart (MAC: 0:23:cd:2f:90:fa), RSSI: -88, Channel: 6
ChinaNet-VSPWEB3 (MAC: 0:22:b0:b:a4:8f), RSSI: -73, Channel: 11
linksys (MAC: 0:21:29:9d:79:d6), RSSI: -91, Channel: 6
HPT-TP-LINK_660884 (MAC: 94:c:6d:66:8:84), RSSI: -73, Channel: 7
VSP WEB (MAC: 0:19:e0:ae:2b:80), RSSI: -57, Channel: 6
2010-12-26 12:32:59.735 iphone.wifiii[538:307] —-wifi size ——
8
2010-12-26 12:32:59.739 iphone.wifiii[538:307] ====

正好和我当时的环境的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/WiFiManager.bundle/WiFiManager", RTLD_LAZY); char *error; if (libHandle == NULL && (error = dlerror()) != NULL)  { NSLog(@"%c",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(@"===–======\n%@",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

类的调用:

NSLog(@"——–");
SOLStumbler *networksManager = [[SOLStumbler alloc] init];
[networksManager scanNetworks];
NSLog(@"—–wifi description———-\n%@",[networksManager description]);
NSLog(@"—-wifi size ——\n%d",[networksManager numberOfNetworks]);
NSLog(@"====");

源代码:http://easymorse-iphone.googlecode.com/svn/trunk/iphone.wifiii/

转载于:https://www.cnblogs.com/ligun123/archive/2013/03/05/2944189.html

iphone中扫描wifi热点相关推荐

  1. Android中扫描wifi热点

    1.首先新建了布局模板XML文件vifi.xml,代码很简单,如下: <?xml version="1.0" encoding="utf-8"?> ...

  2. 安卓网络连接全解:包括网络连接状态的监听、网络数据使用状态的监听、获取当前网络连接情况、启动wifi、获取当前连接wifi的网络情况、扫描wifi热点

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓网络连接情况全解:包括网络连接状态的监听.网络数据使用状态的监听.获取当前网络连接情况.启动wifi.获取当前连接wifi的网络情况.扫描wifi ...

  3. 怎么在Win7系统中开启Wifi热点

    怎么在Win7系统中开启Wifi热点 步骤 1.在开始菜单中点击"运行"或者是按下键盘的"win+R"组合键,然后输入"cmd"回车. 2. ...

  4. 在Windows中开启Wifi热点共享,无需第三方工具

    这个百度经验还是不错的:https://jingyan.baidu.com/article/cb5d6105ebab87005d2fe06a.html 根据这个链接,可以配置.

  5. Wifi模块—源码分析Wifi热点扫描2(Android P)

    一 前言 这次接着讲Wifi工程流程中的Wifi热点扫描过程部分的获取扫描结果的过程,也是Wifi扫描过程的延续,可以先看前面Wifi扫描的分析过程. Wifi模块-源码分析Wifi热点扫描(Andr ...

  6. Wifi模块—源码分析Wifi热点扫描(Android P)

    一 前言 这次接着讲Wifi工程流程中的Wifi热点查找过程,也是Wifi启动的过程延续,Wifi启动过程中会更新Wifi的状态,框架层也有相应广播发出,应用层接收到广播后开始进行热点的扫描.可以先看 ...

  7. 【转】Win10系统创建WiFi热点的两种方法

    现在电脑和wifi已经成为很多人生活中不可缺少的一部分,上网过程只有连接WiFi才可以上网.使用windows10系统开启WiFi热点都是提示没有找到支持的无线网卡.不管你是驱动更新,重装,还是怎么操 ...

  8. ESP32入门基础之ESP32作为 WIFI Station去连接wifi热点

    文章目录 1 工程简介 1.1 在menuconfig配置WiFi账号.密码 1.2 在程序中配置WiFi账号.密码 1 工程简介 参考工程为乐鑫官方例程: 实验目标: ESP32作为WiFi sta ...

  9. 禁用笔记本WiFi热点网络连接问题

    有时我们会通过启动笔记本WiFi热点,以便移动设备使用笔记本网络连接到Internet. 在启动笔记本WiFi热点后,一不小心禁用了网络连接中的WiFi热点连接.很悲催的事情就发生了,你会发现那个网络 ...

  10. linux 360wifi ap热点,rk3288 ap6335 linux下的wifi 热点功能使用

    使用3288硬件平台,尝试分别在ubuntu和linux系统中实现ap6335的wifi 热点功能,能够ok: 以下为一些记录. 1.ubuntu中的实现,参考这个帖子实现的: 如何启用 FIREFL ...

最新文章

  1. FileOutPutStream in 创新实训 自然语言交流系统
  2. 最好用浏览器_魔镜魔镜,请你告诉我谁是Mac上最好用的浏览器?--全网最好用的12个功能让你玩转Safari...
  3. 深入理解DIP、IoC、DI以及IoC容器
  4. 浅谈代码的执行效率(2):编译器的威力 [摘自赵劼老师的博客]
  5. java什么是子类_java什么是子类?
  6. Android 功耗(14)----Android功耗 问题debug处理
  7. 关于举办2017年暑期全国高校教师 “Python编程及应用”培训班通知
  8. Youki的装机日记~
  9. 19.MongoDB值distinct性能验证
  10. URAL - 1153 Supercomputer 大数开方
  11. 如何在C#中生成与PHP一样的MD5 Hash Code
  12. 正交设计 python算法_正交设计 - SegmentFault 思否
  13. c语言分段函数x2-sinx,大学高等数学: 第二章第五讲三种分段函数求导法, 再也不担心了...
  14. 已有一个已排好序的数组,要求输入一个数后,按原来顺序的规律将它插入数组中。
  15. 电信网通证实台湾地震影响内地访问国际网站(12月27日)
  16. 火狐html显示黑点
  17. tomcat7绿色版服务配置
  18. VIP网易邮箱,163VIP邮箱,新浪vip等邮箱的对比分析
  19. 软件测试简历个人技能和项目经验怎么写?(附项目资料)
  20. 扫地机器人隔板_定制墙上一字隔板客厅书货架置物架好不好?实话说如何啊 | 智能扫地机器人评测...

热门文章

  1. 电商App如何让用户直接打开商品详情页
  2. UITextFiled和UITextView限制字数和输入特殊字符的总结
  3. linux下目录与文件的权限及特殊权限
  4. 使django与数据库保持长连接
  5. c++ poco 使用mysql中文乱码问题
  6. 将重复数据删除技术应用于数据复制过程 分享修改删除
  7. 对于开发 0 bug 代码的思考——Design by Contract 契约设计
  8. JavaBean、bean 、POJO、PO、DTO、VO、BO 、EJB、EntityBean
  9. Docker镜像的创建、存出、载入
  10. 宝塔控制面板配置Nginx 安全证书