//WIFI名确定解决方法
来源:互联网 发布:dota2新人选手知乎 编辑:程序博客网 时间:2024/04/30 14:04
- (void)viewDidLoad {
[super viewDidLoad];
self.wifeText.lineBreakMode = NSLineBreakByWordWrapping ;
self.wifeText.numberOfLines = 0;
self.wifeText.text = [self getIPAddress:YES];
[self fetchSSIDInfo];
NSString *string = [NSString stringWithFormat:@"%@,%@",[self getIPAddress:YES],[self fetchSSIDInfo]];
self.wifeText.text = string;
[self countDown];
}
- (NSString *)getIPAddress:(BOOL)preferIPv4
{
NSArray *searchArray = preferIPv4 ?
@[ IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :
@[ IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;
NSDictionary *addresses = [self getIPAddresses];
NSLog(@"addresses: %@", addresses);
__block NSString *address;
[searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)
{
address = addresses[key];
//筛选出IP地址格式
if([self isValidatIP:address]) *stop = YES;
} ];
return address ? address : @"0.0.0.0";
}
- (BOOL)isValidatIP:(NSString *)ipAddress {
if (ipAddress.length == 0) {
return NO;
}
NSString *urlRegEx = @"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options:0 error:&error];
if (regex != nil) {
NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options:0 range:NSMakeRange(0, [ipAddress length])];
if (firstMatch) {
NSRange resultRange = [firstMatch rangeAtIndex:0];
NSString *result=[ipAddress substringWithRange:resultRange];
//输出结果
NSLog(@"%@",result);
return YES;
}
}
return NO;
}
- (NSDictionary *)getIPAddresses
{
NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];
// retrieve the current interfaces - returns 0 on success
struct ifaddrs *interfaces;
if(!getifaddrs(&interfaces)) {
// Loop through linked list of interfaces
struct ifaddrs *interface;
for(interface=interfaces; interface; interface=interface->ifa_next) {
if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {
continue; // deeply nested code harder to read
}
const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;
char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];
if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {
NSString *name = [NSString stringWithUTF8String:interface->ifa_name];
NSString *type;
if(addr->sin_family == AF_INET) {
if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {
type = IP_ADDR_IPv4;
}
} else {
const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;
if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {
type = IP_ADDR_IPv6;
}
}
if(type) {
NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];
addresses[key] = [NSString stringWithUTF8String:addrBuf];
}
}
}
// Free memory
freeifaddrs(interfaces);
}
return [addresses count] ? addresses : nil;
}
- (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 && [info count]) { break; }
}
return info;
}
//WIFI名确定解决方法
- (void)registerNetwork:(NSString *)ssid
{
NSString *values[] = {ssid};
CFArrayRef arrayRef = CFArrayCreate(kCFAllocatorDefault,(void *)values,
(CFIndex)1, &kCFTypeArrayCallBacks);
if( CNSetSupportedSSIDs(arrayRef)) {
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
CNMarkPortalOnline((__bridge CFStringRef)(ifs[0]));
NSLog(@"%@", ifs);
}
}
// 验证码倒计时
- (void)countDown
{
// WS(weakself);
__weak __typeof(&*self)weakself = self;
// GCD 计时器
__block int timeout = 60;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
dispatch_source_set_event_handler(_timer, ^{
if(timeout <= 0)
{ //倒计时结束,关闭
dispatch_source_cancel(_timer);
dispatch_async(dispatch_get_main_queue(), ^{
});
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{
self.wifeText.text = [self getIPAddress:YES];
[self fetchSSIDInfo];
NSString *string = [NSString stringWithFormat:@"%@,%@",[self getIPAddress:YES],[self fetchSSIDInfo]];
self.wifeText.text = string;
timeout--;
});
}
});
dispatch_resume(_timer);
}
0 0
- //WIFI名确定解决方法
- 确定wifi网卡是否支持hostap
- wifi不能共享解决方法
- Android: 设置wifi设备名
- android修改wifi设备名
- android 修改wifi设备名
- iOS 获取wifi ssid 名
- 获取接入的wifi名
- ubuntu wifi hard blocked解决方法
- iOS获取当前连接wifi名
- 获取本机连接的wifi名
- 确定路名、标志性建筑和商场名的经度纬度
- Windows下确定使用某端口的程序名
- 你确定要成为一名程序猿嘛
- ubuntu 11.04 wifi速度慢解决方法
- ubuntu 11.04 wifi速度慢解决方法
- Ubuntu 11.04 WIFI+PPPOE 解决方法【转】
- wifi无法获取ip地址的解决方法
- 简单聊聊Handler机制
- Linux tcpdump命令详解
- What is M3U8
- SQL语句基础教程。
- js 控制鼠标右键不可使用
- //WIFI名确定解决方法
- 开源大数据引擎:Greenplum 数据库架构分析
- 新浪乐居 人人投 我的选择
- Android安全开发之Provider组件安全
- RPC与REST的区别
- 事件处理机制之TouchListener 与 OnTouchEvent & 多点触碰
- broadleaf在admin中新增一个菜单
- 全局变量的使用方法
- mysql中length函数和char_length的区别