flutter如何获取用户的真实IP

在Flutter应用中,如何获取访问用户的真实IP地址?我尝试了使用dart:io的HttpRequest.headers[‘x-forwarded-for’],但获取到的值有时不准确或为空。在Web端和移动端是否有通用的解决方案?需要注意哪些代理或CDN的干扰因素?

2 回复

在Flutter中,可通过dart:io获取设备IP,但无法直接获取用户公网IP。需借助第三方服务,例如:

import 'package:http/http.dart' as http;

Future<String> getPublicIP() async {
  final response = await http.get(Uri.parse('https://api.ipify.org'));
  return response.body;
}

此方法通过访问外部API返回公网IP。

更多关于flutter如何获取用户的真实IP的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中获取用户的真实IP地址需要区分两种情况:

1. 获取设备本地IP地址

使用 network_info_plus 包获取设备在网络中的本地IP:

import 'package:network_info_plus/network_info_plus.dart';

Future<String?> getLocalIP() async {
  final NetworkInfo networkInfo = NetworkInfo();
  String? ipAddress = await networkInfo.getWifiIP();
  return ipAddress;
}

2. 获取公网IP地址(需要服务器协助)

由于Flutter运行在客户端,无法直接获取公网IP,需要通过请求外部服务:

import 'http' as http;

Future<String?> getPublicIP() async {
  try {
    final response = await http.get(Uri.parse('https://api.ipify.org'));
    if (response.statusCode == 200) {
      return response.body;
    }
  } catch (e) {
    print('获取公网IP失败: $e');
  }
  return null;
}

3. 后端获取真实IP(推荐方案)

真正的用户真实IP需要在服务器端获取,Flutter客户端发送请求时,服务器可以获取:

Flutter端:

// 正常发送HTTP请求即可,服务器会自动获取客户端IP

服务器端示例(Node.js):

app.get('/get-ip', (req, res) => {
  const clientIP = req.headers['x-forwarded-for'] || 
                   req.connection.remoteAddress || 
                   req.socket.remoteAddress;
  res.json({ ip: clientIP });
});

注意事项:

  • 本地IP只在局域网内有效
  • 公网IP可能受代理、VPN等影响
  • 最准确的方式是通过后端服务获取
  • 考虑使用HTTPS确保安全性

推荐使用后端获取方案,这样能获得最准确的用户真实IP地址。

回到顶部