zoukankan      html  css  js  c++  java
  • IOS零碎技术整理(3)-获取wifi列表

    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: "];

        for (id key in networks){

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

                                [[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

  • 相关阅读:
    go语言基础学习
    VBA汇总同目录下的所有工作簿数据到另一个工作簿,并进行统计
    彻底关闭win10后台同步数据(转自技术社区)
    在WIN10上安装ESXI-Comstomer (转自技术社区)
    squid代理允许FTP访问设置
    Powershell 脚本判断制定路径下文件是否存在(来源于网络-转载)
    Python集合(set)类型的操作 (转)
    python3.5.2中文字符乱码问题解决
    Debian 中文环境设置
    Python 列表推导实例
  • 原文地址:https://www.cnblogs.com/v-jing/p/3302887.html
Copyright © 2011-2022 走看看