我正在尝试开发一个Java Web应用程序(Servlet),我需要获取客户端的IP地址.
请不要将此视为重复问题,因为我尝试了stackoverflow中可用的所有可能答案.
以下是我的代码到目前为止:
1)
String ipAddress = request.getRemoteAddr();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我获得了"默认网关地址"(147.120.1.5).不是我的机器IP地址(174.120.100.17).
2)
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我获得了"默认网关地址"(147.120.1.5).不是我的机器IP地址(174.120.100.17).
3)
InetAddress IP=InetAddress.getLocalHost();
System.out.println(IP.getHostAddress());
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到了服务器IP地址(147.120.20.1).
我在147.120.100.17中的IP地址.现在我不知道如何获取真正的客户端IP地址.请回答.
非常感谢你.
gih*_*han 48
试试这个,
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
Run Code Online (Sandbox Code Playgroud)
参考:http://www.mkyong.com/java/how-to-get-client-ip-address-in-java/
小智 6
Try this one. for all condition
private static final String[] HEADERS_TO_TRY = {
"X-Forwarded-For",
"Proxy-Client-IP",
"WL-Proxy-Client-IP",
"HTTP_X_FORWARDED_FOR",
"HTTP_X_FORWARDED",
"HTTP_X_CLUSTER_CLIENT_IP",
"HTTP_CLIENT_IP",
"HTTP_FORWARDED_FOR",
"HTTP_FORWARDED",
"HTTP_VIA",
"REMOTE_ADDR"};
private String getClientIpAddress(HttpServletRequest request) {
for (String header : HEADERS_TO_TRY) {
String ip = request.getHeader(header);
if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
return ip;
}
}
return request.getRemoteAddr();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64541 次 |
| 最近记录: |