IP工具类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException; /**
* 获取IP工具类
* @create 2017-03-29
*/
public class IPUtils {
private static Logger logger = LoggerFactory.getLogger(IPUtils.class); private static String LOCAL_IP_STAR_STR = "192.168."; static {
String ip = null;
String hostName = null;
try {
hostName = InetAddress.getLocalHost().getHostName();
InetAddress ipAddr[] = InetAddress.getAllByName(hostName);
for (int i = 0; i < ipAddr.length; i++) {
ip = ipAddr[i].getHostAddress();
if (ip.startsWith(LOCAL_IP_STAR_STR)) {
break;
}
}
if (ip == null) {
ip = ipAddr[0].getHostAddress();
} } catch (UnknownHostException e) {
logger.error("IpHelper error.");
e.printStackTrace();
} LOCAL_IP = ip;
HOST_NAME = hostName; } /**
* 系统的本地IP地址
*/
public static final String LOCAL_IP; /**
* 系统的本地服务器名
*/
public static final String HOST_NAME; /**
* <p>
* 获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。
* 但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实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
* </p>
*
* @param request
* @return
*/
public static String getIpAddr(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();
if (ip.equals("127.0.0.1")) {
/** 根据网卡取本机配置的IP */
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
ip = inet.getHostAddress();
} catch (UnknownHostException e) {
logger.error("IpHelper error." + e.toString());
}
}
}
/**
* 对于通过多个代理的情况, 第一个IP为客户端真实IP,多个IP按照','分割 "***.***.***.***".length() =
* 15
*/
if (ip != null && ip.length() > 15) {
if (ip.indexOf(",") > 0) {
ip = ip.substring(0, ip.indexOf(","));
}
}
return ip;
}
}
IP工具类的更多相关文章
- IP工具类-自己动手做个ip解析器
IP工具类-自己动手做个ip解析器 一.资料准备 导入依赖包:
- Java常用工具类---IP工具类、File文件工具类
package com.jarvis.base.util; import java.io.IOException;import java.io.InputStreamReader;import jav ...
- 系统获取 IP 工具类
系统获取 IP 工具类 import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterf ...
- Java 获取IP工具类、Vo类整理记录
前言 日常开发中,获取ip是常用的功能,本文记录如何在Java中获取本机外网ip.地理位置,访问用户的外网ip.地理位置,以及指定外网ip的地理位置: 代码编写 1.获取访问用户外网ip,我们从访问者 ...
- java获取真实ip工具类
场景 有的时候我们需要获取客户端的真实ip,用来实现ip白名单,和黑名单的配置! ip工具类如下 package com.meeno.framework.utils; import javax.ser ...
- IP工具类——IpAddress.java
根据IP地址获取详细的地域信息,也可通过 http://whois.pconline.com.cn/ 获取地址信息. 源码如下:(点击下载 IpAddress.java) import java.i ...
- 获取请求的ip工具类
package com.example.util; import javax.servlet.http.HttpServletRequest; /** * get remote msg * 获取访问的 ...
- C#获取客户端Ip工具类
string pcname = Dns.GetHostName(); string ip = Dns.GetHostAddresses(pcname).First().ToString(); usin ...
- Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP
Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP IP 工具类 源代码: /** * <p> * * @author XiaoPengwei ...
随机推荐
- 如何取得select结果数据集的前10条记录。postgresql
我用的是POSTGRESQL.select name from t_personal order by personal_id desc 我想取得上面结果数据的,前10条记录.SQL语句怎么改. 我记 ...
- HTML元素 - input type=hidden
定义 传输关于客户/服务器交互的状态信息. Transmits state information about client/server interaction. 注释 这种输入类型用户无法控制,但 ...
- Matplotlib常用绘图示例
一.Matplotlib介绍 Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形.通过Matplotlib,开发者可以仅需要几行代码,便可 ...
- centos7下安装docker(8.1运行容器)
从今天开始学习docker container 1.docker run 之前我们在学习制作镜像以及制作私有仓库的时候已经用到docker run -it以及docker run -d来临时运行一个容 ...
- ansible-role写法
一.role目录的创建: cd /etc/ansible/ mkdir -pv roles/{websrvs,dbsrvs}/{tasks,files,templates,meta,handlers, ...
- canvas的drawImage函数
HTML5中引入新的元素canvas,其drawImage 方法允许在 canvas 中插入其他图像( img 和 canvas 元素) .drawImage函数有三种函数原型: drawImage( ...
- DataX的使用
简介 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.HDFS.Hive.OceanBase.HBase.OTS.ODPS 等各种异构数据源之间高效 ...
- [ASP.NET]ScriptManager控件使用
目录 概述 局部刷新 错误处理 类型系统扩展 注册定制脚本 注册 Web 服务 在客户端脚本中使用认证和个性化服务 ScriptManagerProxy 类 添加 ScriptManager 控件 客 ...
- go标准库的学习-mime
参考:https://studygolang.com/pkgdoc 导入方法: import "mime" mime实现了MIME的部分规定. 什么是MIME: MIME(Mult ...
- MySQL数据备份之mysqldump使用(转)
文章转自 :https://www.cnblogs.com/jpfss/p/7867668.html mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mys ...