文档章节

java获取ip为0:0:0:0:0:0:0:1的问题

银月光海
 银月光海
发布于 2014/04/17 18:19
字数 233
阅读 4063
收藏 4

0:0:0:0:0:0:0:1是ipv6的表现形式,对应ipv4来说相当于127.0.0.1,也就是本机

如果项目部署在本机win7系统,访问时是通过 localhost 来访问,

用java获取ip地址可能会出现该问题,这时获取的ip将是 0:0:0:0:0:0:0:1

 

要是机器在局域网中,访问时使用自己的ip访问,如 我的ip是 :192.168.123.156

访问url:http://192.168.123.156:8080/test

这时候请求会经过路由器转发,所以服务器获取的就是本机的局域网内ip,在java中获取的ip就是 192.168.123.156了

 

下面几个获取ip的方法:

 

public static String getIP(HttpServletRequest request) {
		String ip = request.getHeader("x-forwarded-for");
		if (!checkIP(ip)) {
			ip = request.getHeader("Proxy-Client-IP");
		}
		if (!checkIP(ip)) {
			ip = request.getHeader("WL-Proxy-Client-IP");
		}
		if (!checkIP(ip)) {
			ip = request.getRemoteAddr();
		}
		return ip;
	}
	private static boolean checkIP(String ip) {
		if (ip == null || ip.length() == 0 || "unkown".equalsIgnoreCase(ip)
				|| ip.split(".").length != 4) {
			return false;
		}
		return true;
	}



本文转载自:http://blog.csdn.net/leoz0802/article/details/6364565

银月光海

银月光海

粉丝 37
博文 365
码字总数 46223
作品 0
浦东
项目经理
私信 提问
加载中

评论(4)

jameskaron
jameskaron
银月光海
银月光海 博主

引用来自“闫小军”的评论

更完整获取地址代码:
public static String getClientIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (isBlank(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (isBlank(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (isBlank(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (isBlank(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (isBlank(ip)) {
ip = request.getRemoteAddr();
}
if (StringUtils.isNotBlank(ip) && StringUtils.indexOf(ip, ",") > 0) {
String[] ipArray = StringUtils.split(ip, ",");
ip = ipArray0;
}
return ip;
}

private static boolean isBlank(String ip) {
if (StringUtils.isBlank(ip) || "unkown".equalsIgnoreCase(ip) || ip.split("\\.").length != 4) {
return true;
}
return false;
闫小军
更完整获取地址代码:
public static String getClientIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (isBlank(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (isBlank(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (isBlank(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (isBlank(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (isBlank(ip)) {
ip = request.getRemoteAddr();
}
if (StringUtils.isNotBlank(ip) && StringUtils.indexOf(ip, ",") > 0) {
String[] ipArray = StringUtils.split(ip, ",");
ip = ipArray0;
}
return ip;
}

private static boolean isBlank(String ip) {
if (StringUtils.isBlank(ip) || "unkown".equalsIgnoreCase(ip) || ip.split("\\.").length != 4) {
return true;
}
return false;
闫小军
注意。 ip.split(".").length要改改为 ip.split("\\.").length
java web判断服务器是否是本机

1,如何获取浏览器的ip Java代码 /*** * 获取客户端ip地址(可以穿透代理) * @param request * @return */ public static String getClientIpAddr(HttpServletRequest request) { String ip = ......

引鸩怼孑
2015/11/22
135
0
每天一个linux命令(56):netstat命令

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内...

长平狐
2013/06/17
131
0
Tomcat+nginx+keepalived+memcached实现双VIP负载均衡及Session会话保持

准备好tomcat 第一台 tar vxf apache-tomcat-7.0.54.tar.gz mv apache-tomcat-7.0.54 /usr/local/tomcat tar vxf jdk-7u65-linux-x64.tar.gz mv jdk1.7.0_65/ /usr/local/java 编辑vim /etc/......

mushou
2018/07/30
0
0
死磕 java同步系列之Semaphore源码解析

问题 (1)Semaphore是什么? (2)Semaphore具有哪些特性? (3)Semaphore通常使用在什么场景中? (4)Semaphore的许可次数是否可以动态增减? (5)Semaphore如何实现限流? 简介 Semaph...

彤哥读源码
06/16
76
0
0028-如何在CDH未启用认证的情况下安装及使用Sentry

1.文档编写目的 CDH平台中的安全,认证(Kerberos/LDAP)是第一步,授权(Sentry)是第二步。如果要启用授权,必须先启用认证。但在CDH平台中给出了一种测试模式,即不启用认证而只启用Sentr...

Hadoop实操
2018/11/20
44
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部