很多朋友对于高效iOS设备公共Wi-Fi连接策略指南和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
基础信息获取
1. 获取IP用于获取ip等系列函数的头文件
#include#include#include#include#import 外网可见的IP地址
- (NSString *)whatismyipdotcom{
NSError *错误;
NSURL *ipURL=[NSURL URLWithString:@"http://www.whatismyip.com/automation/n09230945.asp"];
NSString *ip=[NSString stringWithContentsOfURL:ipURL 编码:1 error:error];
返回ip ? ip : [错误本地化描述];
}本地wifi的IP地址
+ (NSString *)本地IP地址
{
NSString *localIP=nil;
结构ifaddrs *addrs;
if (getifaddrs(addrs)==0) {
const struct ifaddrs *cursor=addrs;
while (光标!=NULL) {
if (cursor-ifa_addr-sa_family==AF_INET (cursor-ifa_flags IFF_LOOPBACK)==0)
{
NSString *name=[NSString stringWithUTF8String:cursor-ifa_name];
if ([name isEqualToString:@"en0"]) //Wi-Fi 适配器
{
localIP=[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)cursor-ifa_addr)-sin_addr)];
休息;
}
}
光标=光标-ifa_next;
}
freeifaddrs(地址);
}
返回本地IP;
}2. 获取网卡信息- (NSDictionary *)getWIFIDic
{
CFArrayRef myArray=CNCopySupportedInterfaces();
if (myArray !=nil) {
CFDictionaryRef myDict=CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
如果(myDict!=nil){
NSDictionary *dic=(NSDictionary*)CFBridgingRelease(myDict);
返回迪克;
}
}
返回零;
}
- (NSString *)获取BSSID
{
NSDictionary *dic=[self getWIFIDic];
if (dic==nil) {
返回零;
}
返回dic[@"BSSID"];
}
- (NSString *)获取SSID
{
NSDictionary *dic=[self getWIFIDic];
if (dic==nil) {
返回零;
}
返回dic[@"SSID"];
}
认证过程中的问题
1. Portal禁止弹出与WIFI自动关闭的问题正常情况下,用户使用iPhone连接Portal认证的路由器。连接成功后,iOS系统会在现有列表中随机选择指定的URL(例如:www.itools.info)来测试当前路由器是否需要Portal认证。在需要Portal认证的网络中,系统会弹出Portal页面。此时,如果关闭门户页面或直接切换到其他应用程序,WIFI网络将自动断开。
解决办法是将路由器列入白名单,让路由器释放所有Portal测试IP。以下是经过测试的域名:
www.appleiphonecell.com
captive.apple.com
www.itools.info
ibook.info
www.机场.us
www.thinkother.us
对应IP地址:
23.207.103.91
23.33.54.18
23.44.167.91
23.67.183.91
96.7.103.91
23.42.71.91
23.34.105.211
23.59.167.91
23.42.184.50
23.47.232.190
23.77.23.91
23.194.87.91
23.61.91.190
23.218.12.50
2095年2月38日
23.46.135.91
172.225.213.179
218.205.66.94
23.64.251.249
23.58.250.189
将以上IP全部添加到路由器白名单中可以解决iPhone断开WIFI的问题,但同时不会自动弹出Portal页面,只有用户打开时才会被重定向到Portal页面浏览器。
2. 已知WIFI名解决方法如果确定了公司部署的公共WIFI名称,则比较简单。无需配置上述白名单,保证WIFI不断开。具体方法是在程序启动时向iOS系统注册SSID。方法如下:
//注册SSID。注意,多次调用该方法时,最后一次有效。
- (void)registerNetworkOnlyOneSSIDValidate:(NSString *)ssid
{
[自我注册网络:@[ssid]];
}
//注册多个SSID,多次调用,最后一次有效
- (void)registerNetwork:(NSArray *)ssidStringArray
{
CFArrayRef ssidCFArray=(__bridge CFArrayRef)ssidStringArray;
if(!CNSetSupportedSSIDs(ssidCFArray)) {
返回;
}
CFArrayRef 接口=CNCopySupportedInterfaces();
for (int i=0; i CFArrayGetCount(接口); i++) {
CFStringRef 接口=CFArrayGetValueAtIndex(interfaces, i);
CNMarkPortalOnline(界面);
}
【高效iOS设备公共Wi-Fi连接策略指南】相关文章:
用户评论
终于有个好办法在外面用免费WiFi了!
有11位网友表示赞同!
苹果手机终于不用再担心公网安全的事了吧。
有10位网友表示赞同!
希望这个解决方案能稳定好用,别到时候还不如旧的方法。
有17位网友表示赞同!
这下可以用 iPhone 在旅行时上网都没问题了。
有13位网友表示赞同!
一直想找一个好的公共WiFi解决方案,希望能体验一下。
有7位网友表示赞同!
这块功能之前就一直缺失啊,终于有了!
有5位网友表示赞同!
苹果的安全性一直都做得比安卓好,这次也不例外吧。
有5位网友表示赞同!
不知道这个解决方案收费吗?要是免费就好了。
有10位网友表示赞同!
现在很多公共场所都有WiFi,但连接起来总觉得不安稳。
有16位网友表示赞同!
希望能提高网速,不然就太慢了!
有14位网友表示赞同!
终于可以不用再担心数据流量的问题!
有8位网友表示赞同!
希望这个解决方案能兼容各种公网WiFi接口。
有6位网友表示赞同!
这对于经常出差的人来说是个福音啊~
有11位网友表示赞同!
看起来苹果越来越注重用户的使用体验了
有5位网友表示赞同!
终于可以放心在咖啡店、餐厅等地使用Wi-Fi了!
有17位网友表示赞同!
不知道这个解决方案会不会和其他安全软件冲突?
有5位网友表示赞同!
期待这款新功能上线,可以用更安全的方式上网。
有20位网友表示赞同!
之前连接公共WiFi总担心信息泄露,希望这个解决方案能让大家安心!
有17位网友表示赞同!