Java获取访问者真实的IP地址
个人收录的一些小工具类,供大家参考
方式一
import javax.servlet.http.HttpServletRequest;
/**
自定义访问对象工具类获取对象的IP地址等信息
@author*/
public class CusAccessObjectUtil {
/** * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,
* 可是,如果通过了多级反向代理的话,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 ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip;
}
}
方式二
/*** 获取客户端ip地址(可以穿透代理)* * @param request* @return*/public static String getRemoteAddr(HttpServletRequest request) {String ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_CLIENT_IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}return ip;}
方式三
privatestatic 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","X-Real-IP"};/**** 获取客户端ip地址(可以穿透代理)* @param request* @return*/public static 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();}
方式四
/**** 获取客户端ip地址(可以穿透代理)* @param request* @return*/public static String getClientIpAddr(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_FORWARDED"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_VIA"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("REMOTE_ADDR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }
方式五
publicstatic String getIpAddr(HttpServletRequest request) {String ip = request.getHeader("X-Real-IP");if (null != ip && !"".equals(ip.trim())&& !"unknown".equalsIgnoreCase(ip)) {return ip;}ip = request.getHeader("X-Forwarded-For");if (null != ip && !"".equals(ip.trim())&& !"unknown".equalsIgnoreCase(ip)) {// get first ip from proxy ipint index = ip.indexOf(',');if (index != -1) {return ip.substring(0, index);} else {return ip;}}return request.getRemoteAddr();
}
Java获取访问者真实的IP地址相关推荐
- JavaWeb - 获取访问者真实的 IP 地址(一)
在 JSP 里,获取客户端的 IP 地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache.Squid等反向代理软件就不能获取到客户端 ...
- 2021-08-26——获取电脑真实的IP地址,忽略虚拟机等IP地址的干扰
获取电脑真实的IP地址,忽略虚拟机等IP地址的干扰 此代码中只要读取到了WiFi或者有线地址其中之一立即return. 微信搜索"HUC思梦"关注我吧,关注有惊喜,不定时有免费资源 ...
- 网站配置了Cloudflare代理后,如何配置Nginx获取的真实客户端IP地址?
网站配置了Cloudflare代理后,如何配置Nginx获取的真实客户端IP地址? 这是一个很简单的问题,如何在后台获取真实的访问者IP地址? 网站为了避免有些不怀好意的访问者,不得不自动分析一下客户 ...
- request获取mac地址_【Go】获取用户真实的ip地址
原文链接:https://blog.thinkeridea.com/201903/go/get_client_ip.html 用户请求到达提供服务的服务器中间有很多的环节,导致服务获取用户真实的 ip ...
- Java获取本机的ip地址和Mac地址
Java获取本机的ip地址 //得到IP,InetAddress ia = InetAddress.getLocalHost();String ip=ia.toString().split(" ...
- java获取本地外网ip地址
获取本机外网ip地址 public static String getIP() {String ip = "http://pv.sohu.com/cityjson?ie=utf-8" ...
- java获取当前电脑的ip_使用Java获取当前计算机的IP地址
问题 我正在尝试开发一个系统,其中有不同的节点在不同的系统上或在同一系统上的不同端口上运行. 现在所有节点都创建一个Socket,其目标IP作为称为自举节点的特殊节点的IP.然后节点创建自己的Serv ...
- JSP 获取访问者真正的IP地址
request.getRemoteAddr(),这种方法在大部分情况下都是有效的,但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了, 如果使用了反向代理软件,用re ...
- java获取请求本机ip地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
最新文章
- Fedora 18下 升级内核后VirtualBox不能正常使用的问题
- Intel® oneAPI Toolkit编译VASP
- 多表联合查询存储过程
- python opencv imshow()显示窗口中文字符出现乱码 解决方案:将utf-8转换为gbk(未能完全解决)
- VS2013 UML 如何复制文件
- Mac OS使用技巧之十五:快捷方便的Mini Dock
- Hbase Compaction 队列数量较大分析
- Kubernetes-命名空间token(十五)
- 面向对象 solid_用简单的英语解释面向对象程序设计的SOLID原理
- 在DataGridView中显示合计,并且合计始终在最后一行
- python邮箱配置_python flask mail QQ邮箱配置
- UML学习总结(2)——StartUML 各种类图的例子
- 公安部4号令中关于电子邮服务器
- 网站流量分析的整体思路(大数据)
- WebAssembly 实践:如何写代码
- 第一行代码-第二版(郭霖著)笔记十一(Material Design)
- Div+CSS网页设计(HTML5)
- vscode中输入的中文变繁体的问题
- Ghost使用及找不到Ghostree.txt文件问题
- psv 进php,php - 使用htaccess将网站http重定向到lapsvel中的https - SO中文参考 - www.soinside.com...
热门文章
- mysql查看时区 go时区问题
- linux编译各种报错(拙见)
- mybatis-plus中使用MySQL函数
- qt Android 按键事件,QT无窗口状态下对键盘事件的监听
- 简单的 JSONParser
- [BZOJ4416][Shoi2013]阶乘字符串 状态压缩dp
- 目标检测随笔1——目标检测简要综述
- 使用码上登录实现微信扫码登录
- 计算机cpu的字母,电脑处理器后面的字母你认识几个?不认识跟我来学学(intel篇)...
- Qt 事件机制,底层实现原理