Flutter如何不依赖WiFi获取设备本地IP 适配无WiFi的Linux以太网场景
无WiFi网卡环境下设备本地IP获取方案
场景说明
开发的Linux应用运行在无WiFi网卡、仅以太网连接的环境下,需要获取设备本地IP,常规依赖WiFi组件的IP获取方案不可用。
故障现象
尝试使用package:wifi/wifi.dart和package:network_info_plus/network_info_plus.dart两款依赖包获取本地IP时,均返回如下报错:
MissingPluginException (MissingPluginException(No implementation found for method ip on channel plugins.ly.com/wifi))
实现方案
可以通过遍历系统所有网络接口、匹配内网IP段的方式获取本地IP,无需依赖WiFi网卡,代码实现如下:
// 获取本地IP String localIp = ''; // 定义常见私有内网IP段前缀 final List<String> privateNetworkMasks = ['10', '172.16', '192.168']; // 遍历所有网络接口 for (var interface in await NetworkInterface.list()) { // 遍历当前接口的所有地址 for (var addr in interface.addresses) { // 匹配内网IP段 for (final possibleMask in privateNetworkMasks) { if (addr.address.startsWith(possibleMask)) { localIp = addr.address; break; } } } }
方案优势
该方案直接调用系统底层的网络接口查询能力,适配以太网、蜂窝网络等所有非WiFi的网络环境,无需额外依赖第三方网络工具包。
内容的提问来源于stack exchange,提问作者Samichoulo
相关产品推荐
相关产品推荐

