java - InetAddress.isSiteLocalAddress() 到底是什么意思?

标签 java network-programming inet

这里是一些代码,用于确定应该在多宿主机器上工作的本地主机名:

 /**
 * Work out the first local host name by iterating the network interfaces
 * 
 * @return
 * @throws SocketException
 */
private String findFirstLocalHostName() throws SocketException {

    Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces();
    while (ifaces.hasMoreElements()) {
        NetworkInterface iface = ifaces.nextElement();
        Enumeration<InetAddress> addresses = iface.getInetAddresses();
        while (addresses.hasMoreElements()) {
            InetAddress add = addresses.nextElement();
            if (!add.isLoopbackAddress() && add.isSiteLocalAddress()) {
                return add.getHostName();
            }
        }
    }
    throw new RuntimeException("Failed to determine local hostname");
}

对 isSiteLocalAddress 的调用是否引入了错误?我找不到有关此方法的任何有用信息,但我感觉它仅与 IP v 6 相关并且已被弃用。

最佳答案

方法是definitely not deprecated而且它绝对不仅仅用于 IPv6。

在 IPv4 中有 3 network address ranges that are defined for site-local addresses : 10/8, 172.16/12 和 192.168/16.

阅读 Inet4Address.isSiteLocalAddress() 表明来自这 3 个网络的地址将在这些方法上返回 true

IPv6 有类似的概念,这里这些地址称为unique local addresses .

这有效地告诉您您拥有的地址是否绝对不是公共(public)地址(请注意,即使此方法返回 false,该地址可能仍然不是公共(public)地址)。

关于java - InetAddress.isSiteLocalAddress() 到底是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5619345/

相关文章:

linux bash inet_ntoa inet_aton

java - 使用 JPA 映射多对多关系与属性

java - map 按值集合的大小排序

go - 如何通过http实现google的protocol buffers

c++ - 在 OMNeT++ 中使用多重继承时是否存在任何已知问题?

PostgreSQL IP 地址 : Search the right result by inet data?

java - 自定义 ControlsFX 通知

java - 获取 TextArea 边框和内部文本之间的像素

network-programming - Netty OIO 客户端-服务器在 java.net.SocketOutputStream.write(byte[]) 中仍然被阻塞

php - 发送和接收的数据大小不一样