Java获取IP

public class IpUtil {

    /**
     * 取得 Request 对象
     * 
     * @return
     */
    public static HttpServletRequest getRequest() {
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    }

    /**
     * 取得客户端的IP地址
     * 
     * @return
     */
    public static String getRemoteIp() {

        HttpServletRequest request = getRequest();

        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;

        }

    }
}

转载于:https://my.oschina.net/u/992626/blog/151803

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值