java.lang.Object java.net.InetAddress java.net.Inet6Address
public final class Inet6Address
此类表示互联网协议第 6 版 (IPv6) 地址。此类由 RFC 2373:IP Version 6 Addressing Architecture 定义。
首选形式为 x:x:x:x:x:x:x:x,其中这些 'x' 是八个 16 位地址段的十六进制值。这是完整形式。例如,
1080:0:0:0:8:800:200C:417A
注意,在个别字段中不必写出前导零。但是,在每个字段中至少必须存在一个数字,以下描述的情况除外。
由于某些分配确定的 IPv6 地址样式的方法,地址经常包含零位的长字符串。为了更方便地写入包含零位的地址,可以使用特殊语法压缩这些零位。使用 "::"指示多个零的 16 位组。"::"只能在地址中出现一次。"::" 还可用于压缩地址中的前导和/或尾部零。例如,
1080::8:800:200C:417A
处理 IPv4 和 IPv6 节点的混合环境时,有一种有时更为方便的替换形式是 x:x:x:x:x:x:d.d.d.d ,其中 'x' 为六个高位 16 位地址段的十六进制值,'d' 为四个低位 8 位标准 IPv4 表示形式地址段的十进制值,例如,
::FFFF:129.144.52.38 ::129.144.52.38
其中,"::FFFF:d.d.d.d" 和 "::d.d.d.d" 分别为映射 IPv4 的 IPv6 地址 (IPv4-mapped IPv6 address) 和与 IPv4 兼容的 IPv6 地址 (IPv4-compatible IPv6 address) 的一般形式。注意,IPv4 部分必须为 "d.d.d.d" 形式。以下形式是无效的:
::FFFF:d.d.d ::FFFF:d.d ::d.d.d ::d.d
以下形式:
::FFFF:d
有效,不过它是与 IPv4 兼容的 IPv6 地址的非传统表示形式:
::255.255.0.d
在 "::d" 对应于一般 IPv6 地址 "0:0:0:0:0:0:0:d" 时。
对于以输出值形式返回文本表示形式作的方法,使用完整形式。Inet6Address 将返回完整形式,因为在与其他文本数据组合时它是明确的。
映射 IPv4 的地址 其形式为 ::ffff:w.x.y.z,此 IPv6 地址用于表示 IPv4 地址。与 IPv4 和 IPv6 节点通信时,它允许本机程序使用相同的地址数据结构和相同的套接字。 在 InetAddress 和 Inet6Address 中,它用于内部表示形式;没有任何功能职责。Java 永远不返回映射 IPv4 的地址。这些类可以使用映射 IPv4 的地址,作为 byte 数组和文本表示形式的输入。但是,它将被转换为 IPv4 地址。
可以扩展上述 IPv6 地址的文本表示形式来指定 IPv6 范围的地址。在 [draft-ietf-ipngwg-scoping-arch-04.txt] 中描述了这种对基本地址体系结构的扩展。
因为链接本地和站点本地地址都是非全球的,所以不同的主机可能具有相同的目标地址并且可能通过相同始发系统上的不同接口到达。在此情况下,视为将始发系统连接到同一范围的多个时区。为了确定哪一个才是真正意义上的目标时区,可以将时区标识符(或 scope_id)添加到 IPv6 地址上。
指定 scope_id 的一般格式如下所示:
IPv6-address% scope_id
IPv6 地址就是上述字面值 IPv6 地址。scope_id 指的是本地系统上的接口,它可以使用两种方式指定。
NetworkInterface.getName()
所返回的确切字符串。如果以此方式创建 Inet6Address,则数字 scope-id 在创建该对象时通过查询相关 NetworkInterface 来确定。另外注意,可以从 NetworkInterface 类返回的 Inet6Address 实例获取数字 scope_id。这一点可用于找出在系统上配置的当前范围 id。
方法摘要 | |
---|---|
boolean |
equals(Object obj) 将此对象与指定对象比较。 |
byte[] |
getAddress() 返回此 InetAddress 对象的原始 IP 地址。 |
static Inet6Address |
getByAddress(String host, byte[] addr, int scope_id) 完全按照 InetAddress.getByAddress(String,byte[]) 的方式创建 Inet6Address,唯一的不同是将 IPv6 scope_id 设置为给定的数字值。 |
static Inet6Address |
getByAddress(String host, byte[] addr, NetworkInterface nif) 完全按照 InetAddress.getByAddress(String,byte[]) 的方式创建 Inet6Address,唯一的不同是将 IPv6 scope_id 设置为与在 addr 中指定地址类型的给定接口相对应的值。 |
String |
getHostAddress() 返回 IP 地址字符串(以文本表现形式)。 |
NetworkInterface |
getScopedInterface() 如果此实例是使用范围接口创建的,则返回范围接口。 |
int |
getScopeId() 如果此实例与接口关联,则返回数字 scoped_id。 |
int |
hashCode() 返回此 IP 地址的哈希码。 |
boolean |
isAnyLocalAddress() 检查 InetAddress 是否是通配符地址的实用例行程序。 |
boolean |
isIPv4CompatibleAddress() 检查 InetAddress 是否是与 IPv4 兼容的 IPv6 地址的实用例行程序。 |
boolean |
isLinkLocalAddress() 检查 InetAddress 是否是链接本地地址的实用例行程序。 |
boolean |
isLoopbackAddress() 检查 InetAddress 是否是回送地址中的实用例行程序。 |
boolean |
isMCGlobal() 检查多播地址是否具有全球范围的实用例行程序。 |
boolean |
isMCLinkLocal() 检查多播地址是否具有链接范围的实用例行程序。 |
boolean |
isMCNodeLocal() 检查多播地址是否具有节点范围的实用例行程序。 |
boolean |
isMCOrgLocal() 检查多播地址是否具有组织范围的实用例行程序。 |
boolean |
isMCSiteLocal() 检查多播地址是否具有站点范围的实用例行程序。 |
boolean |
isMulticastAddress() 检查 InetAddress 是否 IP 多播地址的实用例行程序。 |
boolean |
isSiteLocalAddress() 检查 InetAddress 是否是站点本地地址的实用例行程序。 |
从类 java.net.InetAddress 继承的方法 |
---|
getAllByName, getByAddress, getByAddress, getByName, getCanonicalHostName, getHostName, getLocalHost, isReachable, isReachable, toString |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
方法详细信息 |
---|
public static Inet6Address getByAddress(String host, byte[] addr, NetworkInterface nif) throws UnknownHostException
InetAddress.getByAddress(String,byte[])
的方式创建 Inet6Address,唯一的不同是将 IPv6 scope_id 设置为与在
addr
中指定地址类型的给定接口相对应的值。如果给定接口不具有为给定地址类型(例如,链接本地或站点本地)分配的数字 scope_id,则调用将失败并抛出 UnknownHostException。有关 IPv6 范围地址的描述,请参见
这里。
host
- 指定主机
addr
- 网络字节顺序的原始 IP 地址
nif
- 必须与此地址关联的接口。
UnknownHostException
- 如果 IP 地址的长度非法或者接口不具有为给定地址类型分配的数字 scope_id。
public static Inet6Address getByAddress(String host, byte[] addr, int scope_id) throws UnknownHostException
InetAddress.getByAddress(String,byte[])
的方式创建 Inet6Address,唯一的不同是将 IPv6 scope_id 设置为给定的数字值。不会检查 scope_id 以确定其是否与系统上的任何接口相对应。有关 IPv6 范围地址的描述,请参见
这里。
host
- 指定主机
addr
- 网络字节顺序的原始 IP 地址
scope_id
- 地址的数字 scope_id。
UnknownHostException
- 如果 IP 地址的长度非法。
public boolean isMulticastAddress()
InetAddress
中的
isMulticastAddress
boolean
值
public boolean isAnyLocalAddress()
InetAddress
中的
isAnyLocalAddress
boolean
值
public boolean isLoopbackAddress()
InetAddress
中的
isLoopbackAddress
boolean
值;否则返回 false。
public boolean isLinkLocalAddress()
InetAddress
中的
isLinkLocalAddress
boolean
值;如果地址不是链接本地单播地址,则返回 false。
public boolean isSiteLocalAddress()
InetAddress
中的
isSiteLocalAddress
boolean
值;如果地址不是站点本地单播地址,则返回 false。
public boolean isMCGlobal()
InetAddress
中的
isMCGlobal
boolean
值;如果它不是全球范围或多播地址,则返回 false
public boolean isMCNodeLocal()
InetAddress
中的
isMCNodeLocal
boolean
值;如果它不是节点本地范围或多播地址,则返回 false
public boolean isMCLinkLocal()
InetAddress
中的
isMCLinkLocal
boolean
值;如果它不是链接本地范围或多播地址,则返回 false
public boolean isMCSiteLocal()
InetAddress
中的
isMCSiteLocal
boolean
值;如果它不是站点本地范围或多播地址,则返回 false
public boolean isMCOrgLocal()
InetAddress
中的
isMCOrgLocal
boolean
值;如果它不是组织本地范围或多播地址,则返回 false
public byte[] getAddress()
InetAddress
对象的原始 IP 地址。结果按网络字节顺序:地址的高位字节位于
getAddress()[0]
中。
InetAddress
中的
getAddress
public int getScopeId()
public NetworkInterface getScopedInterface()
public String getHostAddress()
InetAddress
中的
getHostAddress
public int hashCode()
InetAddress
中的
hashCode
Object.equals(java.lang.Object)
,
Hashtable
public boolean equals(Object obj)
null
,并且它表示与此对象相同的 IP 地址时,结果才为
true
。
如果 getAddress
对两个 InetAddress
返回的 byte 数组长度相同并且 byte 数组的每个数组元素也都相同,则这两个 InetAddress
的实例表示相同的 IP 地址。
InetAddress
中的
equals
obj
- 要与之比较的对象。
true
;否则,返回
false
。
InetAddress.getAddress()
public boolean isIPv4CompatibleAddress()
boolean
值;如果地址为 IPv4 地址,则返回 false。