在java程序中获取浏览者真实的公网ip地址,程序健壮性极好,代码如下:
publicvoiddownLoad(HttpServletRequestrequest){Stringip=null;//处理代理情况ip=request.getHeader("x-forwarded-for");if(StringUtils.isBlank(ip)||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("Proxy-Client-IP");}if(StringUtils.isBlank(ip)||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("WL-Proxy-Client-IP");}if(StringUtils.isBlank(ip)||"unknown".equalsIgnoreCase(ip)){ip=request.getRemoteAddr();if(ip.equals("127.0.0.1")){InetAddressinet=null;//根据网卡取本机配置的IPtry{inet=InetAddress.getLocalHost();//idea-PC/192.168.212.144}catch(UnknownHostExceptione){e.printStackTrace();}ip=inet.getHostAddress();//192.168.212.144}}//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割,多级代理的时候会得到多个以,分割的ip,//这时候第一个是真实的客户端ipif(ip!=null&&ip.length()>15){//"***.***.***.***".length()if(ip.indexOf(",")>0){ip=ip.substring(0,ip.indexOf(","));}}System.out.println(ip);}