iOS上的wifi扫描与连接等操作

这段代码是我在iOS 5时代写的,肯定有需要改的地方,但以此为线索,应该能减轻不少工作量。希望能帮到有需要的人哟~

WiFiScanner.h

#import <dlfcn.h>

@interface WiFiScanner : NSObject {
        void *libHandle;
        void *airportHandle;    

        int (*apple80211Open)(void *handle);
        int (*apple80211Bind)(void *handle, NSString *en);
        int (*apple80211Close)(void *handle);
        int (*apple80211Scan)(void *handle, NSArray **result, void *requirements);
        int (*apple80211Assoc)(void *handle, NSDictionary *apInfo, NSString *password);
        int (*apple80211Disassoc)(void *handle);
}
- (void)scan;
- (void)connectTo:(NSDictionary *)apInfo withPassword:(NSString *)password;
- (void)disconnect;
@end

WiFiScanner.m

#import "WiFiTest.h"

@implementation WiFiScanner

- (id)init {
        self = [super init];

        libHandle = dlopen("/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration", RTLD_LAZY); // iOS 8中留意一下/System/Library/SystemConfiguration/EAPOLController.bundle/eapolclient

        apple80211Bind = dlsym(libHandle, "Apple80211BindToInterface");
        apple80211Close = dlsym(libHandle, "Apple80211Close");
        apple80211Scan = dlsym(libHandle, "Apple80211Scan"); // 扫描
        apple80211Assoc = dlsym(libHandle, "Apple80211Associate"); // 连接,iOS 8中我粗略扫了一眼,没找到这个函数
        apple80211Disassoc = dlsym(libHandle, "Apple80211Disassociate"); // 断开,iOS 8中我粗略扫了一眼,没找到这个函数

        apple80211Open(&airportHandle);
        apple80211Bind(airportHandle, @"en0");

        return self;
}

- (void)scan {
        NSDictionary *parameters = [NSDictionary alloc] init]; // 扫描参数,不填则获取所有信息
        NSArray *scan_networks; // 存放扫描信息,每个对象均是一个NSDictionary

        apple80211Scan(airportHandle, &scan_networks, parameters); // 同步扫描
        for (id dictionary in scan_networks) {
                if (dictionary) // 判断要连接哪一个热点
                        [self connectTo:dictionary withPassword:nil];
        }

        [parameters release];
}

- (void)connectTo:(NSDictionary *)apInfo withPassword:(NSString *)password {
        apple80211Assoc(airportHandle, apInfo, password);
}

- (void)disconnect {
        apple80211Disassoc(airportHandle);
}

- (void)dealloc {
        apple80211Close(airportHandle);
        dlclose(libHandle);
        [super dealloc];
}
@end
1 个赞

好贴~~~~~~~~~~~~~

正好需要这方面的东西,多谢~等我有了新的调研也一并贴上来

支持楼主,顶起!有没有后台短信发送的代码?

这个在沙盒内的app是不是做不到?