InetAddress.isSiteLocalAddress()实际上意味着什么?

TiG*_*iGz 11 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");
}
Run Code Online (Sandbox Code Playgroud)

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

Joa*_*uer 15

该方法绝对不会被弃用,它绝对不仅仅用于IPv6.

在IPv4中,有3个网络地址范围是为站点本地地址定义的:10/8,172.16/12和192.168/16.

阅读Inet4Address.isSiteLocalAddress()表明,正是这3个网络的地址将返回true这些方法.

实际上,这会告诉您,您拥有的地址绝对不是公共地址(请注意,即使此方法返回false,地址仍可能不公开).

  • 见[here](http://books.google.co.in/books?id=NyxObrhTv5oC&lpg=PT187&dq=InetAddress.isSiteLocalAddress()&pg = PT186 #v = onepage&q&f = false).如果地址是IPv6站点本地地址,则返回true. (2认同)