获取ip地址本机的:
@Test
public void testIp() throws Exception{
Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
while (allNetInterfaces.hasMoreElements()) {
NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
Enumeration addresses = netInterface.getInetAddresses();
while (addresses.hasMoreElements()) {
ip = (InetAddress) addresses.nextElement();
if (ip != null && ip instanceof Inet4Address) {
if(!ip.getHostAddress().equals("127.0.0.1")){
AppServerInfo appServerInfo=new AppServerInfo();
appServerInfo.setIp(ip.getHostAddress());
appServerInfo.setCurrentDatetime(new Date(System.currentTimeMillis()));
appServerInfo.setServerName(System.getProperty("user.name"));
System.out.println(Utils.getGson().toJson(appServerInfo));
}
}
}
}
}
获取客户端IP地址
public void getRealIp(HttpServletRequest request){
//可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,
//究竟哪个才是真正的用户端的真实IP呢?答案是取 X-Forwarded-For中第一个非unknown的有效IP字符串。
//如: X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100 用户真实IP为: 192.168.1.110
String ip = null;
if(ip == null || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)){
ip = request.getHeader("x-forwarded-for" );
}
if(ip == null || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)){
ip = request.getHeader("Proxy-Client-IP" );
}
if(ip == null || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)){
ip = request.getHeader("WL-Proxy-Client-IP" );
}
if(ip == null || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)){
ip = request.getRemoteAddr();
}
}