Java获取IP
Java获取IP
// 获取访问者的IP public static String getIpAddress(HttpServletRequest request) { String ip = null; // X-Forwarded-For:Squid 服务代理 String ipAddresses = request.getHeader("X-Forwarded-For"); if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { // Proxy-Client-IP:apache 服务代理 ipAddresses = request.getHeader("Proxy-Client-IP"); } if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { // WL-Proxy-Client-IP:weblogic 服务代理 ipAddresses = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { // HTTP_CLIENT_IP:有些代理服务器 ipAddresses = request.getHeader("HTTP_CLIENT_IP"); } if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { // X-Real-IP:nginx服务代理 ipAddresses = request.getHeader("X-Real-IP"); } // 有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP if (ipAddresses != null && ipAddresses.length() != 0) { ip = ipAddresses.split(",")[0]; } // 还是不能获取到,最后再通过request.getRemoteAddr();获取 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { ip = request.getRemoteAddr(); } return ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip; } // 获取自己本机电脑的所有IP public static List<String> getMyAddress() { List<String> rs = new ArrayList<String>(); try { Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();//获取本地所有网络接口 while (en.hasMoreElements()) {//遍历枚举中的每一个元素 NetworkInterface ni= (NetworkInterface) en.nextElement(); Enumeration<InetAddress> enumInetAddr = ni.getInetAddresses(); while (enumInetAddr.hasMoreElements()) { InetAddress inetAddress = (InetAddress) enumInetAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) { // sb.append("name:" + inetAddress.getHostName().toString() + "\n"); rs.add(inetAddress.getHostAddress().toString()); } } } } catch (SocketException e) {} return rs; }