前言
NetworkInterface 提供了查询设备网络接口的能力,包括获取与特定网络接口相关的 IP 地址。
NetworkInterface的常用属性
addresses 与该接口关联的 IP 地址的列表,返回一个包含多个 InternetAddress 对象的列表
name 网络接口的名称,例如 eth0 或 en0
index 该网络接口的索引编号(某些操作系统使用此编号来标识网络接口)
InternetAddress的常用属性
addresses 返回 InternetAddress 的 IP 地址或主机名,作为字符串
host 返回此地址的主机名(如果有)或与该地址相关联的 IP 地址
type
返回地址的类型,可以是 IPv4 或 IPv6
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> _getLocalIpAddress() async {
try {
//获取设备上的网络信息接口
List 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": ''};
}
}