Flutter:在 Android 上获取本地 IP 地址

问题描述 投票:0回答:1

如何在 Flutter 中获取我的(Android)设备的本地 IP 地址? 这应该是

  • 当连接到 WIFI 时,我的路由器通过 DHCP 分配的本地 IP 地址
  • 如果连接到 VPN,则为我的 VPN 服务器分配的 VPN 网络中的本地 IP 地址(不是 VPN 服务器本身的全局 IP 地址)
  • 通过蜂窝网络连接时的全球IP
flutter dart network-programming ip-address
1个回答
7
投票

我现在是这样解决的,但是如果你有更好的解决方案,那就太好了:

import 'dart:io';

static Future<String> getLocalIpAddress() async {
    final interfaces = await NetworkInterface.list(type: InternetAddressType.IPv4, includeLinkLocal: true);

    try {
      // Try VPN connection first
      NetworkInterface vpnInterface = interfaces.firstWhere((element) => element.name == "tun0");
      return vpnInterface.addresses.first.address;
    } on StateError {
      // Try wlan connection next
      try {
        NetworkInterface interface = interfaces.firstWhere((element) => element.name == "wlan0");
        return interface.addresses.first.address;
      } catch (ex) {
        // Try any other connection next
        try {
          NetworkInterface interface = interfaces.firstWhere((element) => !(element.name == "tun0" || element.name == "wlan0"));
          return interface.addresses.first.address;
        } catch (ex) {
          return null;
        }
      }
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.