博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 获取IP地址
阅读量:6608 次
发布时间:2019-06-24

本文共 1834 字,大约阅读时间需要 6 分钟。

package util;

import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.servlet.http.HttpServletRequest;
public class CusAccessObjectUtil {
/**
* 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,
* 参考文章: http://developer.51cto.com/art/201111/305181.htm
*
* 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
* 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
*
* 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130,
* 192.168.1.100
*
* 用户真实IP为: 192.168.1.110
*
* @param request
* @return
*/
public static String getIpAddress(HttpServletRequest request) {
String ipAddress = request.getHeader("x-forwarded-for");
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();
if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
//根据网卡取本机配置的IP
InetAddress inet=null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress= inet.getHostAddress();
}
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
if(ipAddress.indexOf(",")>0){
ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
}
}
return ipAddress;
}
public static String getLocalIP() throws UnknownHostException {
String localIP = "";
InetAddress addr = (InetAddress) InetAddress.getLocalHost();
localIP = addr.getHostAddress().toString();
return localIP;
}
}

转载于:https://www.cnblogs.com/nomengfei/p/10754746.html

你可能感兴趣的文章
C# 实现屏幕键盘 (ScreenKeyboard)
查看>>
P1197 [JSOI2008]星球大战
查看>>
如何用js得到当前页面的url信息方法(JS获取当前网址信息)
查看>>
EBS 中常用的配置文件及说明
查看>>
Cover Points
查看>>
OpenCV for Python 学习笔记 二
查看>>
[转]Centos6.5安装配置keepalived
查看>>
能不能,不再只是竞赛?
查看>>
Base64编码的字符串与图片的转换 C#
查看>>
浅谈JS-cookie,你是香甜可口的小点心吗?
查看>>
SpringBoot注解
查看>>
JS输出处理---H_scrit.php
查看>>
线程的挂起,唤醒和终止
查看>>
WCF 第五章 行为 实现事务(操作行为)
查看>>
我的Android进阶之旅------>Android之Animations动画详解
查看>>
802.11 af 要点
查看>>
openwrt 分区
查看>>
BuildFilePath 及打开文件对话框
查看>>
Leetcode 561. Array Partition I(easy)
查看>>
session多服务器共享的方案梳理
查看>>