获取客户端 IP,死活都是内网或者 127.0.0.1..

2016-09-13 15:19:08 +08:00
 wafm

代码是没啥问题的..返回的都是内网的或者是 127.0.0.1

                           public static String getSpbillCreateIp(HttpServletRequest request) {
	if (request == null) {
		return null;
	}
	String ipString = request.getHeader("x-forwarded-for");
	if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
		ipString = request.getHeader("Proxy-Client-IP");
	}
	if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
		ipString = request.getHeader("WL-Proxy-Client-IP");
	}
	if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
		ipString = request.getRemoteAddr();
		if(ipString.equals("127.0.0.1")) {
			InetAddress inet=null;
			
			try {
				inet = InetAddress.getLocalHost();
			} catch (UnknownHostException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			ipString = inet.getHostAddress();
		}
	}

	// 多个路由时,取第一个非 unknown 的 ip
	final String[] arr = ipString.split(",");
	for (final String str : arr) {
		if (!"unknown".equalsIgnoreCase(str)) {
			ipString = ipString+" + " +str;

// break; } } // String ipString = request.getRemoteAddr(); return ipString; }

4907 次点击
所在节点    Java
8 条回复
akira
2016-09-13 16:11:58 +08:00
在本机有放前端反代?
wafm
2016-09-13 16:20:28 +08:00
@akira 没有哦
geeglo
2016-09-13 16:56:45 +08:00
你怎么测试的?
zhuangzhuang1988
2016-09-13 17:07:21 +08:00
dump 一下 header..
j8sec
2016-09-13 19:15:57 +08:00
你还不如用 js+webrtc 来获取呢
jackmasa
2016-09-13 19:52:12 +08:00
不要在本地跑这段代码。。。放服务器试试
SoloCompany
2016-09-13 22:49:05 +08:00
1. 那就不会直接把 header 全部 dump 出来看一眼么
2. 这样干很危险啊,也就是说默认允许伪造 ip 了
fatpa
2016-09-14 13:00:58 +08:00
nginx 配置问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/305958

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX