ios平台实现局域网ip扫描

4,182 阅读1分钟

概述

在开发中,我们可能经常遇到在同一WIFI环境下发现其它设备并与其连接的需求,所以我们第一步就是要能在同一WIFI下面能发现其它的设备。

在github上有一个开源的库叫MMLanScan,其主要的功能是获取局域网其它设备的mac地址(由于苹果的限制,ios7之后无法获取)和ip地址,但是其有太多的issue,亲测发现造成此种crash的原因都是它的任务线程过久没有完全退出,然后操作又特别频繁造成的。

issue:

基于以上原因,我在PhoneNetSDK中添加了局域网IP扫描功能,特在此分享。

实现过程

原理:

  • 根据其子网掩码和本机ip计算出有多少个可用ip
  • 然后分别ping这些ip,通过监听其是否有响应来判断这个ip是否处于活跃状态
  • SDK通过代理的方式告知上层哪些ip处于活跃状态并返回扫描进度

利用PhoneNetsdk开发的NetPinger中的局域网IP扫描功能截图如下:

SDK存在的弊端:

  • 如果局域网内的机器防火墙禁止了ICMP协议的接收和转发则无法探测到