您的位置:首页 > 编程语言 > Java开发

java 获取ip

2016-01-07 21:27 543 查看
package com.qbao.bbs.util;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

/**
* IP工具类
*
* @author shenrongrong
* @version [版本号, 2016年1月7日]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class IpUtil
{

/**
* @param request IP
* @return IP Address
*/
public static String getIpAddrByRequest(HttpServletRequest request)
{
String 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();
}
return ip;
}

/**
* @return 本机IP
* @throws SocketException
*/
public static String getRealIp() throws SocketException
{
String localip = null;// 本地IP,如果没有配置外网IP则返回它
String netip = null;// 外网IP

Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
boolean finded = false;// 是否找到外网IP
while (netInterfaces.hasMoreElements() && !finded)
{
NetworkInterface ni = netInterfaces.nextElement();
Enumeration<InetAddress> address = ni.getInetAddresses();
while (address.hasMoreElements())
{
ip = address.nextElement();
if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1)
{// 外网IP
netip = ip.getHostAddress();
finded = true;
break;
}
else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1)
{// 内网IP
localip = ip.getHostAddress();
}
}
}

if (netip != null && !"".equals(netip))
{
return netip;
}
else
{
return localip;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: