InetAddress.isSiteLocalAddress()实际上是什么意思?
下面是一些代码,以确定应该在多宿主箱工作本地主机名:InetAddress.isSiteLocalAddress()实际上是什么意思?
/**
* 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
。
实际上,这会告诉您您的地址是否绝对不是公共地址(请注意,即使此方法返回false
,地址可能仍未公开)。
see [here](http://books.google.co.in/books?id=NyxObrhTv5oC&lpg=PT187&dq=InetAddress.isSiteLocalAddress()&pg = PT186#v = onepage&q&f = false)。如果地址是IPv6站点本地地址,则返回true。 – 2011-04-11 09:43:14
@John:是的,我知道在IPv6中也有类似的含义,但我不知道它的具体含义。但是由于这个问题暗示它只是IPv6,我想澄清这一点。 (顺便说一下,我无法阅读你链接的页面)。 – 2011-04-11 09:46:01
望着实现...
对于Inet4Address
,它会检查,看它是否在RFC1918“不可路由”的一个地址:10.0.0.0/8,172.16.0.0/12,192.168.0.0/ 16。
对于Inet6Address
,它会检查前两个字节,看它是否是真正的“站点本地”地址。
据我所知isSiteLocalAddress方法不被弃用。
isSiteLocalAddress - 说明
指示InetAddress是否是站点本地地址;如果地址不是本地本地单播地址,则为false。
InetAddress甚至有两个直接的子类;
最好的办法是阅读的JavaDoc。
您使用的是哪个版本的JDK?
'Site local'是专用IP空间的不推荐名称。 (一些细微的,但基本上是正确的。)请参见RFC 1918
我只是碰到了我认为是一个类似的问题就来了:试图确定IPv6的,我应该使用什么LAN comuncation:
-
恕我直言,
Inet6Address.isSiteLocalAddress()
是无用的。考虑到0xFEC0
前缀已被RFC 3879描述为@tigz所提及的。我还没有看到任何设备(机器人,赢,OSX)居然有0xFEC0
(有限测试)//from java.net.Inet6Address (1.8.0_45) boolean isSiteLocalAddress() { return ((ipaddress[0] & 0xff) == 0xfe && (ipaddress[1] & 0xc0) == 0xc0); }
0xFE80
地址虽然不应该被用于交通(从我的理解和阅读(www.cisco.com ))为我的单个路由器(ping6,curl,http)的局域网通信起作用。来自Comcast的My Global Unicast(这是公共IP的另一个名称)
2601::/20
为我的LAN通信工作。所以我会说这是使用的正确地址。
前缀表:www.iana.org
为清楚起见,我不是这个意思,该方法已被否决......的“本地站点”,在IPv6和每http地址只是概念://www.ietf .org/rfc/rfc3879.txt – TiGz 2011-04-11 10:23:36