Java 获取服务器IP和本地Ip
在项目中经常会遇到需要获取服务器的IP和本地IP,而我们大部分的服务器都配置在linux上,因此我们的代码必须要实现能够获取linux下服务器及本地ip
以下为我总结的代码:
//取得服务器Ip
public static String getSerIp(){ String clientIp =“”; // 根据网卡取本机配置的IP Enumeration allNetInterfaces; //定义网络接口枚举类 try { allNetInterfaces = NetworkInterface.getNetworkInterfaces(); //获得网络接口 InetAddress ip = null; //声明一个InetAddress类型ip地址 while (allNetInterfaces.hasMoreElements()) //遍历所有的网络接口 { NetworkInterface netInterface = allNetInterfaces.nextElement(); Enumeration addresses = netInterface.getInetAddresses(); //同样再定义网络地址枚举类 while (addresses.hasMoreElements()) { ip = addresses.nextElement(); if (ip != null && (ip instanceof Inet4Address)) //InetAddress类包括Inet4Address和Inet6Address { if(!ip.getHostAddress().equals(“127.0.0.1”)){ clientIp= ip.getHostAddress(); } } } } } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } return clientIp; }
//获取客户端IP
public static String getClientIp() { HttpServletRequest request = getHttpServletRequest();
String accessIP = request.getHeader("X-Forwarded-For"); if (accessIP == null || accessIP.length() == 0 || "unknown".equalsIgnoreCase(accessIP)) { accessIP = request.getHeader("Proxy-Client-IP"); } if (accessIP == null || accessIP.length() == 0 || "unknown".equalsIgnoreCase(accessIP)) { accessIP = request.getHeader("WL-Proxy-Client-IP"); } if (accessIP == null || accessIP.length() == 0 || "unknown".equalsIgnoreCase(accessIP)) { accessIP = request.getRemoteAddr(); } if (accessIP == null || accessIP.length() == 0 || "127.0.0.1".equalsIgnoreCase(accessIP)) { try { accessIP = InetAddress.getLocalHost().getHostAddress(); } catch (Exception e) { accessIP = ""; } } return accessIP; }