簡體   English   中英

如何找出“正確的” IP地址?

[英]How to find out “the right” IP address?

我有InetAddress.getLocalHost()。getHostAddress()問題。 它可以在大多數計算機上正常工作,但是在有更多IP地址可用的計算機上失敗(在這種情況下,“錯誤的”地址屬於VMware網絡適配器)。 我需要將該地址放入郵件中(然后在服務器上用作發送響應的地址)。

我知道我可以使用NetworkInterface.getNetworkInterfaces()來獲取所有網絡接口,但是如何以編程方式找到正確的接口,以后該服務器才可以看到? 在我的特殊情況下,客戶端和服務器都位於同一公司網絡內。

如果所有計算機都在同一網絡中,並且該網絡具有其IP范圍,則可以檢查IP是否在此范圍內。 通常,vmware網絡適配器的IP地址在192.168.0.x子網中-如果您的公司范圍不同,那么就足夠了。

也許以下課程可以幫助您解決IP

public enum IpAddressHelper
{

    X_FORWARDED_FOR("X-Forwarded-For"),
    PROXY_CLIENT_IP("Proxy-Client-IP"),
    WL_PROXY_CLIENT_IP("WL-Proxy-Client-IP"),
    HTTP_CLIENT_IP("HTTP_CLIENT_IP"),
    HTTP_X_FORWARDED_FOR("HTTP_X_FORWARDED_FOR");

    private static final Logger LOGGER = LoggerFactory.getLogger(IpAddressHelper.class);
    private static final String REMOTE_ADDR = "REMOTE_ADDR";
    private String key;

    /**
     * @param key
     */
    IpAddressHelper(String key)
    {
        this.key = key;
    }

    /**
     * @return the key
     */
    public String getKey()
    {
        return key;
    }

    public static String getClientIpAddr(HttpServletRequest request)
    {

        String ip = null;
        for (IpAddressHelper header : IpAddressHelper.values())
        {
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
            {
                ip = request.getHeader(header.getKey());
                LOGGER.info("tried:" + header);
            }
        }

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
        {
            ip = request.getRemoteAddr();
        }

        return ip;
    }

    public static String getClientIpAddr(Map<String, String> requestHeaders)
    {
        String ip = null;
        for (IpAddressHelper header : IpAddressHelper.values())
        {
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
            {
                ip = requestHeaders.get(header.getKey());
                LOGGER.info("tried:" + header);
            }
        }

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
        {
            ip = requestHeaders.get(REMOTE_ADDR);
        }

        return ip;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM