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;

        }

    }
}
相關文章
相關標籤/搜索