Dart获取本地IP与外网IP(真实IP)

1,300 阅读1分钟

如果是内网地址,可以使用NetworkInterface;如果想获取公网ip,可行方法之一是通过http请求ip查询网站,然后解析请求结果得到

import 'dart:io';
import 'dart:convert';
//改获取内网的方法仅支持ios 
main(List<String> args) async {
  // 内网ip
  for (var interface in await NetworkInterface.list()) {
    for (var addr in interface.addresses) {
      print('${addr.address}');
    }
  }

  // 外网ip
  var ipRegexp = RegExp(
      r'((?:(?:25[0-5]|2[0-4]\d|(?:1\d{2}|[1-9]?\d))\.){3}(?:25[0-5]|2[0-4]\d|(?:1\d{2}|[1-9]?\d)))');
  var url = 'http://www.ip.cn/';
  var client = HttpClient();
  var request = await client.getUrl(Uri.parse(url));
  var reponse = await request.close();
  reponse.transform(utf8.decoder).forEach((line) {
    ipRegexp.allMatches(line).forEach((match) {
      print(match.group(0));
    });
  });

Flutter的NetworkInterface好像只支持ios,只能使用插件了获取内网ip:pub.flutter-io.cn/packages/ge…