Flutter:AndroidでローカルIPアドレスを取得する

Aug 21 2020

Flutterで(Android)デバイスのローカルIPアドレスを取得するにはどうすればよいですか?これは

  • WIFIに接続したときにルーターからDHCP経由で割り当てられたローカルIPアドレス
  • VPNに接続されている場合、VPNサーバーによって割り当てられたVPNネットワークのローカルIPアドレス(VPNサーバー自体によって割り当てられたグローバルIPアドレスではありません)
  • 携帯電話経由で接続した場合のグローバルIP

回答

1 JulianAßmann Sep 02 2020 at 05:53

私は今のところこのようにそれを解決しました、しかしあなたがより良い解決策を持っているなら、それは誠実でしょう:

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;
        }
      }
    }
  }