浅谈关于如何检测iOS14本地网络权限的一些思路
浅谈关于如何检测iOS14本地⽹络权限的⼀些思路
前戏
wwdc翻译过来凑字数的
什么是本地⽹络?
这⾥的本地⽹络其实就是我们常说的局域⽹,是将设备接⼊路由器以后形成的⽹络,设备可以通过这张⽹络互相通信,如我们的设备发现、设备绑定、局域⽹优先等功能都是使⽤的本地⽹络。
从 iOS 13 开始,应⽤想要获得当前连接到的 Wi-Fi 名称,那就必须要获得定位权限。因为通过识别 Wi-Fi 名称,应⽤就能轻松地在你和周围的⼈之间建⽴⼤数据⽹络。但是不给定位权限不代表应⽤就没有办法跟踪你了,因为应⽤可以通过本地⽹络⾥的设备进⾏跟踪。
为什么需要向⽤户申请权限?
和iOS 13获取WiFi名称需要通过定位权限类似,苹果加强了对⽤户隐私安全权限,这⾥也是类似的问题。在过去的 iOS 版本中,应⽤可以随意扫描本地⽹络中的设备,因此应⽤就可以很轻松地得到本地⽹络⾥所有设备的名称和 MAC 地址。MAC 地址是⼀种确认⽹络设备位置的地址,每个⽹卡都有⼀个唯⼀
有关天气的谚语的 MAC 地址,加上 MAC 地址也具有唯⼀性,设备⼚商会按照⼀定的规律分配 MAC,所以不同的局域⽹都是独⼀⽆⼆可以识别的。⽐⽅说,你从线下渠道买了个新相机,拍完照⽚利⽤相机⾃带的 Wi-Fi 将照⽚导⼊到⼿机上。这时候带有某个推⼴模块的应⽤对局域⽹发起了⼀次扫描,识别到了⼀个新的设备,推⼴模块会将相机的 MAC 地址上传了云端,进⾏简单的识别对⽐以后,很容易知道这个 MAC 地址属于相机。这样带有推⼴模块的应⽤都会在画像⾥给你加上「相机⽤户」这样的标签,当你下次打开带有同⼀个推⼴模块的购物应⽤时,你就会看到推荐了⼀堆和相机有关的东西。
那些应⽤需要使⽤本地⽹络?
利⽤本地⽹络进⾏设备发现
利⽤本地⽹络进⾏数据传输
⽹络调试⼯具
影响范围
婴童品牌
吉林景点主要影响⽆法使⽤Socket或者Bonjour做⼀些局域⽹的发现,数据传输。
对局域⽹应⽤如:智能家居类,局域⽹游戏,⽹络测试⼯具等等。本⼈测试了下其实也没有那么⼤,因为发现这个开关,App 下次启动后可能不会⽣效,暂时未定位原因。
张爱玲经典语段怎么解决?
很⽆奈!
⼤部分应⽤使⽤局域⼀般使⽤Socket或者Bonjour做⼀些局域的发现,数据传输。说在调⽤的时候会出现code:65 desc:no route to host。这是其实就是所谓的⽆本地⽹络权限。但是我在测试时发现有时候即使是关掉本地⽹络权限的开关,也能正常的使⽤UDP、TCP。简直不敢信!难道iOS 14也会想iOS 13⼀开始出来⼀样各种坑满天飞?
这⾥的思路是
通过接⼝获取本机的IP地址
使⽤(SimplePing)来ping⼿机的IP
整个流程的⼤概耗时在0.13-0.2秒之间,⼤部分在0.17秒左右。可能耗时还能接受。但是不知道某些路由器是否可以设置禁⽌ping。如果有那就炸裂了。下⾯上简单的代码
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSDictionary *router = [LDSRouterInfo getRouterInfo];
pinger = [[SimplePing alloc] initWithHostName:router[@"ip"]];
pinger.delegate = self;
[self->pinger start];
}
- (void)simplePing:(SimplePing *)pinger didStartWithAddress:(NSData *)address {
if (timer) {
return;
}
比较好的专科学校timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
[pinger sendPingWithData:nil];
});
dispatch_resume(timer);
}
- (void)simplePing:(SimplePing *)pinger didSendPacket:(NSData *)packet sequenceNumber:(uint16_t)sequenceNumber {
NSLog(@"可以使⽤局域⽹");
}
六一儿童节贺词- (void)simplePing:(SimplePing *)pinger didFailToSendPacket:(NSData *)packet sequenceNumber:(u
int16_t)sequenceNumber error:(NSError *)error {
if (de == 65) {//no route to host
NSLog(@"不可以使⽤局域⽹");
}
}
友情提⽰
调上⾯接⼝可以触发⾸次启动本地⽹络权限的系统弹窗
不知道某些路由器是否可以设置禁⽌ping
整理流程在iPhone 6sp耗时130-200毫秒之间。平均值在160毫秒左右
上⾯代码未正式上线,本⼈也在测试中,请酌情使⽤。
到此这篇关于浅谈关于如何检测iOS14本地⽹络权限的⼀些思路的⽂章就介绍到这了,更多相关检测iOS14本地⽹络权限内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。