残缺极品 发表于 2015-10-1 10:46:58

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

本文转载至 http://blog.iyunv.com/wbw1985/article/details/20530281
2010年开始苹果清理了一批APP Store上的WIFI扫描软件, 缘由语焉不详.
  这些WIFI扫描软件使用了苹果的私有函数apple80211.framework
  尽管不能合法(指能通过App Store的审核)的获取WIFI列表, 不过我们还是可以获取到当前Wifi连接的信息,比如SSID.
  SSID全称Service Set IDentifier, 即Wifi网络的公开名称.
  苹果在IOS v4.1+版本上提供了公开的方法来获取该信息.
  示范代码如下:
  



view plaincopy

http://static.blog.iyunv.com/scripts/ZeroClipboard/ZeroClipboard.swf
[*]#import <SystemConfiguration/CaptiveNetwork.h>
[*]
[*]- (id)fetchSSIDInfo
[*]{
[*]    NSArray *ifs = (id)CNCopySupportedInterfaces();
[*]    NSLog(@"%s: Supported interfaces: %@", __func__, ifs);
[*]    id info = nil;
[*]    for (NSString *ifnam in ifs) {
[*]      info = (id)CNCopyCurrentNetworkInfo((CFStringRef)ifnam);
[*]      NSLog(@"%s: %@ => %@", __func__, ifnam, info);
[*]      if (info && ) {
[*]            break;
[*]      }
[*]      ;
[*]    }
[*]    ;
[*]    return ;
[*]}

对于ARC版本, 代码可简化如下:  
  



view plaincopy

http://static.blog.iyunv.com/scripts/ZeroClipboard/ZeroClipboard.swf
[*]- (id)fetchSSIDInfo {
[*]   NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
[*]   NSLog(@"Supported interfaces: %@", ifs);
[*]   id info = nil;
[*]   for (NSString *ifnam in ifs) {
[*]         info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
[*]         NSLog(@"%@ => %@", ifnam, info);
[*]         if (info && ) { break; }
[*]   }
[*]   return info;
[*]}

参考链接:  
  1. http://stackoverflow.com/questions/5198716/iphone-get-ssid-without-private-library
  2. http://answers.yahoo.com/question/index?qid=20100529040141AAKd8dO
  
  
  SSID全称Service Set IDentifier, 即Wifi网络的公开名称.在IOS 4.1以上版本提供了公开的方法来获取该信息.
  

  



view plaincopy


http://static.blog.iyunv.com/scripts/ZeroClipboard/ZeroClipboard.swf
[*]#import <SystemConfiguration/CaptiveNetwork.h>




view plaincopy


http://static.blog.iyunv.com/scripts/ZeroClipboard/ZeroClipboard.swf
[*]-(id)fetchSSIDInfo
[*]{
[*]    NSArray *ifs = (id)CNCopySupportedInterfaces();
[*]    NSLog(@"%s: Supported interfaces: %@", __func__, ifs);
[*]    id info = nil;
[*]    for (NSString *ifnam in ifs) {
[*]      info = (id)CNCopyCurrentNetworkInfo((CFStringRef)ifnam);
[*]      if (info && ) {
[*]            break;
[*]      }
[*]      ;
[*]    }
[*]    ;
[*]    return ;
[*]}
[*]
[*]- (NSString *)currentWifiSSID {
[*]    // Does not work on the simulator.
[*]    NSString *ssid = nil;
[*]    NSArray *ifs = (id)CNCopySupportedInterfaces();
[*]    NSLog(@"ifs:%@",ifs);
[*]    for (NSString *ifnam in ifs) {
[*]      NSDictionary *info = (id)CNCopyCurrentNetworkInfo((CFStringRef)ifnam);
[*]      NSLog(@"dici:%@",);
[*]      if (info[@"SSIDD"]) {
[*]            ssid = info[@"SSID"];
[*]
[*]      }
[*]    }
[*]    return ssid;
[*]}
[*]
[*]- (void)viewDidLoad
[*]{
[*]    ;
[*]
[*]    tempLabel=[initWithFrame:CGRectMake(50, 40, 200, 40)];
[*]    tempLabel.textAlignment=NSTextAlignmentCenter;
[*]    ;
[*]    NSDictionary *ifs = ;
[*]    NSString *ssid = [ lowercaseString];
[*]    tempLabel.text=ssid;
[*]
[*]}
  
  log 信息 :
  



view plaincopy


http://static.blog.iyunv.com/scripts/ZeroClipboard/ZeroClipboard.swf
[*]2013-06-05 21:39:14.357 wifiNameDemo dici:{
[*]    BSSID = "f4:ec:38:40:cc:e8";
[*]    SSID = "Nice_Apple";
[*]    SSIDDATA = <4e696365 5f417070 6c65>;
[*]}
[*]2013-06-05 21:39:14.360 wifiNameDemo Nice_Apple

ARC 版本:  
  



view plaincopy


http://static.blog.iyunv.com/scripts/ZeroClipboard/ZeroClipboard.swf
[*]- (id)fetchSSIDInfo {
[*]    NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
[*]    NSLog(@"Supported interfaces: %@", ifs);
[*]    id info = nil;
[*]    for (NSString *ifnam in ifs) {
[*]      info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
[*]      NSLog(@"%@ => %@", ifnam, info);
[*]      if (info && ) { break; }
[*]    }
[*]    return info;
[*]}

效果如下:  
http://yspe2371e4aa7697989.yunshipei.cn/dHlwZT1mdyZzaXplPTY0MCZzcmM9YUhSMGNDVXpRU1V5UmlVeVJtbHRaeTVpYkc5bkxtTnpaRzR1Ym1WMEpUSkdNakF4TXpBMk1EVXlNVFF4TVRFM05UQT0=
页: [1]
查看完整版本: iPhone,iPad如何获取WIFI名称即SSID