java 后台获取访问客户端ip地址

protected String getClientIpAddress(HttpServletRequest request) {
		String clientIp = request.getHeader("x-forwarded-for");
		if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
			clientIp = request.getHeader("Proxy-Client-IP");
		}
		if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
			clientIp = request.getHeader("WL-Proxy-Client-IP");
		}
		if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
			clientIp = request.getRemoteAddr();
		}
		return clientIp;
	}

已标记关键词 清除标记
下面就是我用过的办法,但是都没作用,都是获得的内网ip public static String getRealIp() throws SocketException { String localip = null;// 本地IP,如果没有配置外网IP则返回它 String netip = null;// 外网IP Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces(); InetAddress ip = null; boolean finded = false;// 是否找到外网IP while (netInterfaces.hasMoreElements() && !finded) { NetworkInterface ni = netInterfaces.nextElement(); Enumeration<InetAddress> address = ni.getInetAddresses(); while (address.hasMoreElements()) { ip = address.nextElement(); if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 外网IP netip = ip.getHostAddress(); finded = true; break; } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 内网IP localip = ip.getHostAddress(); } } } if (netip != null && !"".equals(netip)) { return netip; } else { return localip; } } public 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_X_FORWARDED_FOR"); } if(ip == null || ip.length() == 0 ||"unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } ip = request.getHeader("X-Real-IP"); if(StringUtils.isNotEmpty(ip) && !"unKowm".equalsIgnoreCase(ip)) { return ip; } // 多个路由是,取得第一个非unknown的ip final String[] arr = ip.split(","); for(final String str : arr) { if(!"unknown".equalsIgnoreCase(str)) { ip = str; break; } } return ip; }
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页