Flutter获取手机的IP地址

前言

NetworkInterface 提供了查询设备网络接口的能力,包括获取与特定网络接口相关的 IP 地址。

NetworkInterface的常用属性

|-----------|---------------------------------------------------|
| addresses | 与该接口关联的 IP 地址的列表,返回一个包含多个 InternetAddress 对象的列表 |
| name | 网络接口的名称,例如 eth0en0 |
| index | 该网络接口的索引编号(某些操作系统使用此编号来标识网络接口) |

InternetAddress的常用属性

|-----------|----------------------------------------|
| addresses | 返回 InternetAddress 的 IP 地址或主机名,作为字符串 |
| host | 返回此地址的主机名(如果有)或与该地址相关联的 IP 地址 |
| type | 返回地址的类型,可以是 IPv4IPv6 |

NetworkInterface的常用方法

NetworkInterface.list({bool includeLoopback = false, bool includeLinkLocal = false, InternetAddressType? type})

  • 该方法用于获取设备的所有网络接口,并返回一个包含所有网络接口的列表。
  • includeLoopback: 是否包含本地回环接口,例如 127.0.0.1
  • includeLinkLocal: 是否包含链路本地地址(例如在局域网内自配置的 IP 地址)。
  • type: 可以指定要获取的 IP 类型,如 IPv4 或 IPv6。

Flutter获取手机的IP地址示例代码

//获取所有的地址
 Future<Map<String, dynamic>> _getLocalIpAddress() async {
   try {
     //获取设备上的网络信息接口
     List<NetworkInterface> interfaces = await NetworkInterface.list();
     
     bool isPrivate = false;
     String address = '';
     for (var i = 0; i < interfaces.length; i++) {
       NetworkInterface interface2 = interfaces[i];
       for (var j = 0; j < interface2.addresses.length; j++) {
         InternetAddress internetAddress = interface2.addresses[j];
         String ipAddress = interface2.addresses[j].address;
         //判断Address是否是私有地址
         if (internetAddress.type == InternetAddressType.IPv4 &&
             isPrivateIPAddress(ipAddress)) {
           isPrivate = true;
           address = ipAddress;
           break;
         }
       }
       if (isPrivate) {
         break;
       }
     }
     return {"isPrivate": isPrivate, "address": address};
   } catch (e) {
     print('Failed to get local IP address: $e');
     return {"isPrivate": false, "address": ''};
   }
 }
相关推荐
ZZZCY20031 小时前
华为ENSP--IP编址及静态路由配置
网络·华为
EasyCVR1 小时前
私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
大数据·网络·音视频·h.265
hgdlip2 小时前
主IP地址与从IP地址:深入解析与应用探讨
网络·网络协议·tcp/ip
珹洺2 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode
今天我刷leetcode了吗2 小时前
docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker
tcp/ip·docker·电脑
科技象限2 小时前
电脑禁用U盘的四种简单方法(电脑怎么阻止u盘使用)
大数据·网络·电脑
东方隐侠安全团队-千里2 小时前
网安瞭望台第3期:俄黑客 TAG - 110组织与密码攻击手段分享
网络·chrome·web安全·网络安全
云计算DevOps-韩老师2 小时前
【网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操解析2
网络·云计算
Summer不秃3 小时前
Flutter之使用mqtt进行连接和信息传输的使用案例
前端·flutter
旭日猎鹰3 小时前
Flutter踩坑记录(二)-- GestureDetector+Expanded点击无效果
前端·javascript·flutter