request.getRemoteAddr获取的不是互联网地址
时间: 2024-05-19 07:16:08 浏览: 102
对于使用代理服务器的用户,request.getRemoteAddr获取的可能是代理服务器的IP地址,而不是用户的互联网地址。这是因为代理服务器会替代用户发送请求,因此服务器只能获取代理服务器的IP地址。如果需要获取用户的真实IP地址,可以尝试使用其他方法,例如在请求头中添加X-Forwarded-For字段来传递真实IP地址。
相关问题
Java代码怎么判断请求环境是互联网,办公网,业务网
在Java中,可以通过获取请求的IP地址来判断请求环境是互联网、办公网还是业务网。一般来说,互联网的IP地址是公网IP地址,办公网和业务网的IP地址是私有IP地址。
你可以使用Java的InetAddress类获取请求的IP地址,然后根据IP地址的类型来判断请求的环境。具体的判断方法如下:
1. 获取请求的IP地址:
```java
HttpServletRequest request = ...; // 获取HttpServletRequest对象
String ipAddress = request.getHeader("X-Forwarded-For"); // 获取请求的IP地址
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
}
```
2. 判断IP地址类型:
```java
private boolean isPublicIP(String ipAddress) {
if (ipAddress == null) {
return false;
}
if (ipAddress.startsWith("10.") || ipAddress.startsWith("192.168.") || ipAddress.startsWith("172.16.")) {
// 私有IP地址,属于办公网或者业务网
return false;
}
String[] parts = ipAddress.split("\\.");
if (parts.length != 4) {
return false;
}
if (parts[0].equals("127")) {
// 本地回环地址
return false;
}
int first = Integer.parseInt(parts[0]);
if (first < 1 || first > 223 || first == 169 && Integer.parseInt(parts[1]) == 254) {
// A类、B类、C类、D类保留地址,属于互联网
return true;
}
if (first == 224 || first == 225 || first == 226 || first == 227 || first == 228 || first == 229 || first == 230 || first == 231 || first == 232 || first == 233 || first == 234 || first == 235 || first == 236 || first == 237 || first == 238 || first == 239) {
// D类地址,属于互联网
return true;
}
if (first == 240 || first == 241 || first == 242 || first == 243 || first == 244 || first == 245 || first == 246 || first == 247 || first == 248 || first == 249 || first == 250 || first == 251 || first == 252 || first == 253 || first == 254 || first == 255) {
// E类地址,属于互联网
return true;
}
return false;
}
```
通过以上的代码,你可以判断请求的环境是互联网、办公网还是业务网。
阅读全文