獲取ip的工具類--Java


                                                                          簡單介紹個自己曾經寫過的獲取ip的工具類

1.項目中獲取ip是為了后台可以追蹤到登錄網站的用戶的ip所在的地區,方便對產品的功能進行分析。

直接上代碼:

     

package com.hyhl.util;

import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;

public class IPUtil {

    private final static String IP_SEPARATOR = ",";

    /**
     * return 機器名
     */
    public static String getHostName() {
        try {
            InetAddress ia = InetAddress.getByName("127.0.0.1");
            return ia.getHostName();
        } catch (UnknownHostException e) {
            return null;
        }
    }

    /**
     * 判斷是否開發或測試機 (Hard Code)
     * 
     * @param hostname
     */
    public static boolean isDev() {
        String[] ips = getIps();
        if (ips == null) {
            return false;
        }
        for (String ip : ips) {
            if (ip.startsWith("10.10")) {
                return true;
            }
            if (ip.startsWith("192.168")) {
                return true;
            }
        }
        return false;
    }
    
    
    /**
     * 獲取客戶端Ip
     * 
     * @param request
     */
    public static String getIP(HttpServletRequest request) {

        String ip = request.getHeader("X-Real-IP");

        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("x-forwarded-for");
        } else {
            return ip;
        }

        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        } else {
            // 當有多級反向代理時,x-forwarded-for值為多個時取第一個ip地址
            if (ip.indexOf(IP_SEPARATOR) != -1) {
                ip = ip.substring(0, ip.indexOf(IP_SEPARATOR));
            }
            return ip;
        }

        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        } else {
            return ip;
        }

        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        } else {
            return ip;
        }

        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
            ip = "";
        }
        return ip;
    }

    /**
     * 獲取當前機器的所有IP
     */
    public static String[] getIps() {

        List<String> ips = new ArrayList<String>();
        try {
            Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
            for (NetworkInterface netint : Collections.list(nets))
                if (netint.getHardwareAddress() != null) {
                    List<InterfaceAddress> list = netint.getInterfaceAddresses();
                    for (InterfaceAddress interfaceAddress : list) {
                        String localIp = interfaceAddress.getAddress().getHostAddress();
                        if (StringUtils.isNotBlank(localIp)) {
//                            if (StringUtils.isNoneBlank(localIp)) {
                            ips.add(localIp);
                        }
                    }
                }
        } catch (SocketException e1) {
            return null;
        }
        return ips.toArray(new String[ips.size()]);
    }

}

2.在方法中調用的時候,直接String ip = IPUtil.getIP(request); 即可達到IP 。注意參數request是指 HttpServletRequest request 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM