java 获取请求ip,服务本地ip
/** * 获取请求IP * * @param request * @return */ public static String getRequestIpAddress(HttpServletRequest request) { String ipAddress = null; ipAddress = request.getHeader("X-Real_IP"); // if (StringUtils.isEmpty(ipAddress) || StringUtils.isBlank(ipAddress) // || "unknown".equalsIgnoreCase(ipAddress)) // ipAddress = request.getHeader("http_x_forwarded_for"); if (StringUtils.isEmpty(ipAddress) || StringUtils.isBlank(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) ipAddress = request.getHeader("x-forwarded-for"); if (StringUtils.isEmpty(ipAddress) || StringUtils.isBlank(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if (StringUtils.isEmpty(ipAddress) || StringUtils.isBlank(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if (StringUtils.isEmpty(ipAddress) || StringUtils.isBlank(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if (ipAddress.equals("127.0.0.1")) { // 根据网卡取本机配置的IP InetAddress inet = null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ipAddress = inet.getHostAddress(); } } // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 if (ipAddress != null && ipAddress.length() > 15) { if (ipAddress.indexOf(",") > 0) { ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); } } return ipAddress; }
上面的方法是获取请求ip。
下面的方法是获取服务本地ip。
1 /** 2 * 获取本机IP 3 * 4 * @return 5 * @throws SocketException 6 */ 7 public static String getLocalIpAddress() throws SocketException { 8 String localip = null;// 本地IP,如果没有配置外网IP则返回它 9 String netip = null;// 外网IP 10 11 Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces(); 12 InetAddress ip = null; 13 boolean isFound = false;// 是否找到外网IP 14 while (netInterfaces.hasMoreElements() && !isFound) { 15 NetworkInterface ni = netInterfaces.nextElement(); 16 Enumeration<InetAddress> address = ni.getInetAddresses(); 17 while (address.hasMoreElements()) { 18 ip = address.nextElement(); 19 if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 外网IP 20 netip = ip.getHostAddress(); 21 isFound = true; 22 break; 23 } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 内网IP 24 localip = ip.getHostAddress(); 25 } 26 } 27 } 28 29 if (netip != null && !"".equals(netip)) { 30 return netip; 31 } else { 32 return localip; 33 } 34 }