/** * 獲取請求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 }