美文网首页
flutter 获取设备ipv4 和ipv6地址

flutter 获取设备ipv4 和ipv6地址

作者: YannChee | 来源:发表于2024-04-18 11:16 被阅读0次

flutter 自带的dart:io 库就可以支持获取设备的 ipv4 和ipv6地址.
flutter 获取的ipv6地址字符串跟iOS 原生获取的ipv6地址,稍微有区别:

iOS 
ipv4:  192.168.3.81
ipv6: fe80::2:7cc7:ca39:fe4d

flutter:
IPv4 address: 192.168.3.81
IPv6 address: fe80::2:7cc7:ca39:fe4d%en0 

可以看到 flutter获取的 ipv6 最后会 拼上 %en0,为了保证数据的一致性,所以需要用空替换
tempIpv6 = tempIpv6.replaceAll("%en0", "");

import 'dart:io';
import 'package:flutter/foundation.dart';

class IpV4AndIpV6Tool {
  static Future<void> getIpv4AndIpV6Addresses(
      Function(String ipv4Address, String ipv6Address)
          didClickConfirmBtnAction) async {
    String tempIpv4 = "";
    String tempIpv6 = "";
    try {
      // 获取所有网络接口信息
      List<NetworkInterface> interfaces = await NetworkInterface.list(
        includeLoopback: true, // 是否包含回环接口
        includeLinkLocal: true, // 是否包含链路本地接口(例如IPv6的自动配置地址)。
        type: InternetAddressType.any,
      );

      // 遍历所有网络接口
      for (var interface in interfaces) {
        // check if interface is en0 which is the wifi conection on the iphone
        if (interface.name != 'en0') {
          continue;
        }
        print('Interface name: ${interface.name}');
        // 遍历接口的地址
        for (var address in interface.addresses) {
          if (address.address.isNotEmpty) {
            if (address.type == InternetAddressType.IPv4) {
              tempIpv4 = address.address;
              if (kDebugMode) {
                print('IPv4 address: $tempIpv4');
              }
            } else if (address.type == InternetAddressType.IPv6) {
              tempIpv6 = address.address;
              if (tempIpv6.contains("%en0")) {
                tempIpv6 = tempIpv6.replaceAll("%en0", "");
              }

              if (kDebugMode) {
                print('IPv6 address: $tempIpv6');
              }
            }
          }
        }
      }
    } catch (e) {
      print('Failed to get IP addresses: $e');
    } finally {
      didClickConfirmBtnAction(tempIpv4, tempIpv6);
    }
  }
}

相关文章

  • DoraemonKit -App info

    获取设备名称 获取当前系统版本号 获取手机型号 获取手机屏幕大小 获取手机ipv4地址 获取手机ipv6地址 设备...

  • IOS 获取手机的ip地址

    获取Ipv4地址 获取Ipv6地址

  • IPv6地址

    前言 常用的IP协议版本有IPv4和IPv6,前面介绍了IPv4地址,本文介绍IPv6地址。IPv6是为了解决32...

  • iOS一图兼容IPV6问题

    一、IPv6协议解读 IPv6是对IPv4地址空间的扩充。 目前用iOS设备连接Wifi、3/4G网络时,设备被分...

  • Internet地址结构

    IPv4 & IPv6 表示 IP 地址有两种标准:IP版本4 (IPv4) 和 IP版本6 (IPv6)。所有有...

  • 搭建IPV6测试环境

    搭建环境前先对IPv4 和 IPv6有个大致了解: IPv4 和 IPv6的直观区别就是 IP 地址前者是 .(d...

  • iOS获取设备IP地址(ipv4/ipv6有效性判断)

    先说明一下,获取IP地址方法网上很多,大多不是很全面,获取的IP地址应该同时包含ipv4和ipv6的,同时由于iO...

  • IPv6应用:群晖自家DDNS仅解析IPv6地址以加速访问

    宽带支持ipv6后,群晖自家的DDNS会同时更新ipv4和ipv6地址,但更新的ipv4地址是NAT服务器的地址,...

  • DHCP协议

    前面介绍了IPv4地址和IPv6地址,但是一个主机是如何获取IP地址的呢?本文就介绍一个中动态获取IP地址的协议—...

  • IPV4与IPV6的区别

    IPV4与IPV6都是互联网用户的网络地址,IPV4是现行ip地址版本,但随着互联网世界的迅速扩展,各类终端设备接...

网友评论

      本文标题:flutter 获取设备ipv4 和ipv6地址

      本文链接:https://www.haomeiwen.com/subject/pfaexjtx.html