首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到“正确的”IP地址?

如何找到“正确的”IP地址?
EN

Stack Overflow用户
提问于 2013-06-18 15:14:02
回答 2查看 222关注 0票数 0

我对InetAddress.getLocalHost().getHostAddress()有个问题。它可以在大多数机器上正常工作,但在有更多IP地址可用的机器上失败(在这种情况下,“错误的”地址属于VMware网络适配器)。我需要将其放入消息中的地址(然后在服务器上用作应发送响应的地址)。

我知道我可以使用NetworkInterface.getNetworkInterfaces()来获取所有的网络接口,但是我怎样才能通过编程找到正确的接口,以便稍后对服务器可见呢?在我的特殊情况下,客户端和服务器都位于同一公司网络内。

EN

回答 2

Stack Overflow用户

发布于 2013-06-18 15:17:59

如果所有机器都在同一网络中,并且该网络有其IP范围,则可以检查IP是否在该范围内。通常,vmware网络适配器具有192.168.0.x子网中的it如果您的公司范围不同,则应该足够了。

票数 1
EN

Stack Overflow用户

发布于 2013-06-18 15:18:54

也许下面的类可以帮助您解决IP问题

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17162721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档