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地址。

