概述
在开发中,我们可能经常遇到在同一WIFI环境下发现其它设备并与其连接的需求,所以我们第一步就是要能在同一WIFI下面能发现其它的设备。
在github上有一个开源的库叫MMLanScan,其主要的功能是获取局域网其它设备的mac地址(由于苹果的限制,ios7之后无法获取)和ip地址,但是其有太多的issue,亲测发现造成此种crash的原因都是它的任务线程过久没有完全退出,然后操作又特别频繁造成的。
issue:
基于以上原因,我在PhoneNetSDK
中添加了局域网IP扫描功能,特在此分享。
- 源码地址: PhoneNetSDK
- 欢迎fork & star
实现过程
原理:
- 根据其子网掩码和本机ip计算出有多少个可用ip
- 然后分别ping这些ip,通过监听其是否有响应来判断这个ip是否处于活跃状态
- SDK通过代理的方式告知上层哪些ip处于活跃状态并返回扫描进度
利用PhoneNetsdk开发的NetPinger
中的局域网IP扫描功能截图如下:
SDK存在的弊端:
- 如果局域网内的机器防火墙禁止了ICMP协议的接收和转发则无法探测到