ios扫描公共区域内的全部wifi信息
来源:互联网 发布:linux samba下载安装 编辑:程序博客网 时间:2024/05/22 05:09
转自:http://wangjun.easymorse.com/?p=1264
#import <CoreFoundation/CoreFoundation.h> #import <Foundation/NSTimer.h> #import <Foundation/Foundation.h> #include <dlfcn.h> #include <ifaddrs.h> #include <arpa/inet.h> @interface MSNetworksManager : NSObject { NSMutableDictionary *networks; NSArray *types; int autoScanInterval; bool scanning; bool autoScanning; void *libHandle; void *airportHandle; int (*open)(void *); int (*bind)(void *, NSString *); int (*close)(void *); int (*associate)(void *, NSDictionary*, NSString*); int (*scan)(void *, NSArray **, void *); //int (*open)(void *); //int (*bind)(void *, NSString *); //int (*close)(void *); //int (*scan)(void *, NSArray **, void *); //int (*associate)(void*, NSDictionary *, NSString *); int (*getpower)(void *, char *); int (*setpower)(void*, char*); } + (MSNetworksManager *)sharedNetworksManager; + (NSNumber *)numberFromBSSID:(NSString *) bssid; - (NSMutableDictionary *)networks; - (NSDictionary *)networks:(int) type; - (NSDictionary *)network:(NSString *) aNetwork; - (id)init; - (void)dealloc; - (int)numberOfNetworks; - (int)numberOfNetworks:(int) type; - (int)autoScanInterval; - (void)scan; - (void)removeNetwork:(NSString *)aNetwork; - (void)removeAllNetworks; - (void)removeAllNetworks:(int) type; - (void)autoScan:(bool)scan; - (bool)autoScan; - (void)scanSelector:(id)param; - (void)setAutoScanInterval:(int) scanInterval; - (int)associateNetwork: (NSDictionary *)bss: (NSString *)password; - (int)getPower: (char *)power; - (int)setPower: (char *)power; - (NSString *) localIPAddress;@end .m文件:#import "MSNetworksManager.h" static MSNetworksManager *NetworksManager;@implementation MSNetworksManager + (MSNetworksManager *)sharedNetworksManager { if (!NetworksManager) NetworksManager = [[MSNetworksManager alloc] init]; return NetworksManager; }+ (NSNumber *)numberFromBSSID:(NSString *) bssid { int x = 0; uint64_t longmac; int MAC_LEN = 6; short unsigned int *bs_in = malloc(sizeof(short unsigned int) * MAC_LEN); if (sscanf([bssid cStringUsingEncoding: [NSString defaultCStringEncoding]],"%hX:%hX:%hX:%hX:%hX:%hX",&bs_in[0], &bs_in[1], &bs_in[2], &bs_in[3], &bs_in[4], &bs_in[5]) == MAC_LEN) { for (x = 0; x < MAC_LEN; x++) longmac |= (uint64_t) bs_in[x] << ((MAC_LEN – x – 1) * 8); } else { NSLog(@"WARN: invalid mac address! %@",self); } free(bs_in); return [NSNumber numberWithUnsignedLongLong:longmac]; }- (NSDictionary *)networks { // TODO: Implement joining of network types return networks; } - (NSDictionary *)networks:(int) type { // TODO: Implement selecting of network types if(type != 0) NSLog(@"WARN: Non 80211 networks are not supported. %@",self); return networks; }- (NSDictionary *)network:(NSString *) aNetwork { return [networks objectForKey: aNetwork]; }- (id)init { self = [super init]; NetworksManager = self; networks = [[NSMutableDictionary alloc] init]; types = [NSArray arrayWithObjects:@"80211", @"Bluetooth", @"GSM", nil]; [types retain]; autoScanInterval = 5; //seconds // For iPhone 2.0 // libHandle = dlopen("/System/Library/PrivateFrameworks/Apple80211.framework/Apple80211", RTLD_LAZY); // For iPhone 3.0 libHandle = dlopen("/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager", RTLD_LAZY); open = dlsym(libHandle, "Apple80211Open"); bind = dlsym(libHandle, "Apple80211BindToInterface"); close = dlsym(libHandle, "Apple80211Close"); scan = dlsym(libHandle, "Apple80211Scan"); associate = dlsym(libHandle, "Apple80211Associate"); getpower = dlsym(libHandle, "Apple80211GetPower"); setpower = dlsym(libHandle, "Apple80211SetPower"); open(&airportHandle); bind(airportHandle, @"en0"); return self; }- (void)dealloc { close(&airportHandle); [super dealloc]; }- (int)numberOfNetworks { return [networks count]; } - (int)numberOfNetworks:(int) type { // TODO: Implement selecting of network types if(type != 0) NSLog(@"WARN: Non 80211 networks are not supported. %@",self); return [networks count]; }- (int)autoScanInterval { return autoScanInterval; }- (void)scan { // NSLog(@"Scanning…"); scanning = true; [[NSNotificationCenter defaultCenter] postNotificationName:@"startedScanning" object:self]; NSArray *scan_networks; NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; [parameters setObject:@"YES" forKey:@"SCAN_MERGE"]; scan(airportHandle, &scan_networks, parameters); int i; //bool changed; [networks removeAllObjects]; for (i = 0; i < [scan_networks count]; i++) { [networks setObject:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"] forKey:[[scan_networks objectAtIndex: i] objectForKey:@"RSSI"]]; } NSLog(@"Scan Finished…"); }- (void)removeNetwork:(NSString *)aNetwork { [networks removeObjectForKey:aNetwork]; }- (void)removeAllNetworks { [networks removeAllObjects]; }- (void)removeAllNetworks:(int) type { if(type != 0) NSLog(@"WARN: Non 80211 networks are not supported. %@",self); [networks removeAllObjects]; }- (void)autoScan:(bool) bScan { autoScanning = bScan; if(bScan) { [self scan]; [NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO]; } NSLog(@"WARN: Automatic scanning not fully supported yet. %@",self); }- (bool)autoScan { return autoScanning; }- (void)scanSelector:(id)param { if(autoScanning) { [self scan]; [NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO]; } }- (void)setAutoScanInterval:(int) scanInterval { autoScanInterval = scanInterval; }- (int)associateNetwork:(NSDictionary *)bss: (NSString *)password { if(bss!=nil) { NSLog(@"associateNetwork"); int ret = associate(airportHandle, bss, password); return ret; }else return -1; }- (int)getPower: (char *)power { return getpower(airportHandle, power); }- (int)setPower: (char *)power { return setpower(airportHandle, power); }- (NSString *) localIPAddress { NSString *address = @"error"; struct ifaddrs *interfaces = NULL; struct ifaddrs *temp_addr = NULL; int success = 0; // retrieve the current interfaces – returns 0 on success success = getifaddrs(&interfaces); if (success == 0) { // Loop through linked list of interfaces temp_addr = interfaces; while(temp_addr != NULL) { if(temp_addr->ifa_addr->sa_family == AF_INET) { // Check if interface is en0 which is the wifi connection on the iPhone if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) { // Get NSString from C String address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; } } temp_addr = temp_addr->ifa_next; } } // Free memory freeifaddrs(interfaces); return address; }@end 添加到项目中即可。
在ios扫描公共区域内wifi信息中,写了实现wifi扫描的一种方法,但是那种方法扫描出来的wifi信息不全,下面是扫描全部wifi信息的实现方法:
- ios扫描公共区域内的全部wifi信息
- ios扫描公共区域内的全部wifi信息
- ios扫描公共区域内wifi信息
- ios扫描公共区域内wifi信息
- 在ios扫描公共区域内wifi信息中,写了实现wifi扫描的一种方法,但是那种方法扫描出来的wifi信息不全,下面是扫描全部wifi信息的实现方法:
- 公共场所扫描全部wifi信息的实现方法
- ios公共区域中搜索wifi信号信息总结
- ios公共区域中搜索wifi信号信息总结
- iOS获取WiFi的信息
- ios扫描wifi热点
- IOS 扫描wifi
- IOS客户端公共WIFI解决方案
- iOS 之公共wifi解决方案
- IOS客户端公共WIFI解决方案
- iOS客户端公共WIFI解决方案
- iOS 获取已连接的wifi信息
- iOS 获取已连接的wifi信息
- iOS WIFI 信息 获取
- int.TryParse(判断字符串是否为数字组成)
- 外销电动车的乘骑感觉分享记录
- 我最讨厌两种人
- 关于i++与++i的一点感悟
- 与PHP开发相关的网站资源
- ios扫描公共区域内的全部wifi信息
- build.prop优化项目
- socket
- 广播驱动体系(BDA) 系列讲座:一
- HTML5-FieldSet
- Web安全性问题的层次关系
- 自定义TextView实现跑马灯效果
- PHP去掉指定的html标签 .
- 关闭A页面 刷新 B页面