Module java.base
Package java.net

Class Inet6Address

java.lang.Object
java.net.InetAddress
java.net.Inet6Address
所有已实现的接口:
Serializable

public final class Inet6Address extends InetAddress
该类表示Internet协议版本6(IPv6)地址。由 RFC 2373: IP Version 6 Addressing Architecture定义。

IP地址的文本表示

作为输入方法的IPv6地址的文本表示采用以下形式之一:
  1. 首选形式为x:x:x:x:x:x:x:x,其中'x'是地址的八个16位部分的十六进制值。这是完整形式。例如,

    • 1080:0:0:0:8:800:200C:417A

    请注意,在单个字段中写入前导零并非必需。但是,除非如下所述,每个字段中必须至少有一个数字。

  2. 由于某些分配某些样式的IPv6地址的方法,地址中包含长字符串的零位将是常见的。为了使包含零位的地址编写更容易,提供了一种特殊的语法来压缩零位。使用“::”表示多个16位零组。在地址中只能出现一次“::”。还可以使用“::”来压缩地址中的前导和/或尾随零位。例如,

    • 1080::8:800:200C:417A
  3. 在处理IPv4和IPv6节点的混合环境时,有时候另一种更方便的形式是x:x:x:x:x:x:d.d.d.d,其中'x'是地址的六个高阶16位部分的十六进制值,'d'是标准IPv4表示地址的四个低阶8位部分的十进制值,例如,

    • ::FFFF:129.144.52.38
    • ::129.144.52.38

    其中“::FFFF:d.d.d.d”和“::d.d.d.d”分别是IPv4映射的IPv6地址和IPv4兼容的IPv6地址的一般形式。请注意,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将返回完整形式,因为在与其他文本数据组合使用时是无歧义的。

特殊IPv6地址

IPv4映射地址
形式为::ffff:w.x.y.z,此IPv6地址用于表示IPv4地址。它允许本机程序使用相同的地址数据结构以及与IPv4和IPv6节点通信时使用相同的套接字。

在InetAddress和Inet6Address中,它用于内部表示;它没有功能角色。Java永远不会返回IPv4映射地址。这些类可以接受IPv4映射地址作为输入,无论是字节数组还是文本表示。但是,它将被转换为IPv4地址。

IPv6范围地址的文本表示

如上所述的IPv6地址的文本表示可以扩展以指定IPv6范围地址。这种对基本寻址架构的扩展在[draft-ietf-ipngwg-scoping-arch-04.txt]中描述。

由于链路本地和站点本地地址是非全局的,可能不同的主机具有相同的目标地址,并且可以通过同一起始系统上的不同接口到达。在这种情况下,起始系统被称为连接到相同范围的多个区域。为了消除预期目标区域,可以将区域标识符(或scope_id)附加到IPv6地址。

指定scope_id的一般格式如下:

IPv6地址%scope_id

IPv6地址是如上所述的文字IPv6地址。 scope_id指的是本地系统上的一个接口,并且可以通过两种方式指定。

  1. 作为数字标识符。这必须是一个正整数,用于标识特定接口和范围,如系统所理解的那样。通常,可以通过系统上的管理工具确定数字值。每个接口可能具有多个值,每个范围一个值。如果未指定范围,则使用的默认值为零。
  2. 作为字符串。这必须是由特定接口的NetworkInterface.getName()返回的确切字符串。当以这种方式创建Inet6Address时,数字范围ID是通过查询相关NetworkInterface在对象创建时确定的。

还要注意,可以从NetworkInterface类返回的Inet6Address实例中检索数字scope_id。这可用于查找系统上配置的当前范围ID。

自从:
1.4
外部规范
参见:
  • Method Details

    • getByAddress

      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 - 必须与此地址关联的接口。
      返回:
      从原始IP地址创建的Inet6Address对象。
      抛出:
      UnknownHostException - 如果IP地址长度非法,或者如果接口未为给定地址类型分配数字scope_id。
      自从:
      1.5
    • getByAddress

      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。
      返回:
      从原始IP地址创建的Inet6Address对象。
      抛出:
      UnknownHostException - 如果IP地址长度非法。
      自从:
      1.5
    • isMulticastAddress

      public boolean isMulticastAddress()
      检查InetAddress是否为IP多播地址的实用程序例程。地址开头的11111111标识地址为多播地址。
      覆盖:
      isMulticastAddress 在类 InetAddress
      返回:
      一个指示InetAddress是否为IP多播地址的boolean
    • isAnyLocalAddress

      public boolean isAnyLocalAddress()
      检查InetAddress是否为通配符地址的实用程序例程。
      覆盖:
      isAnyLocalAddress 在类中的覆盖 InetAddress
      返回:
      一个boolean,指示InetAddress是否为通配符地址。
    • isLoopbackAddress

      public boolean isLoopbackAddress()
      检查InetAddress是否为回环地址的实用程序例程。
      覆盖:
      isLoopbackAddress 在类中的覆盖 InetAddress
      返回:
      一个boolean,指示InetAddress是否为回环地址;否则为false。
    • isLinkLocalAddress

      public boolean isLinkLocalAddress()
      检查InetAddress是否为链路本地地址的实用程序例程。
      覆盖:
      isLinkLocalAddress 在类中的覆盖 InetAddress
      返回:
      一个boolean,指示InetAddress是否为链路本地地址;如果地址不是链路本地单播地址,则为false。
    • isSiteLocalAddress

      public boolean isSiteLocalAddress()
      检查InetAddress是否为站点本地地址的实用程序例程。
      覆盖:
      isSiteLocalAddress 在类中的覆盖 InetAddress
      返回:
      一个boolean,指示InetAddress是否为站点本地地址;如果地址不是站点本地单播地址,则为false。
    • isMCGlobal

      public boolean isMCGlobal()
      检查多播地址是否具有全局范围的实用程序例程。
      覆盖:
      isMCGlobal 在类中的覆盖 InetAddress
      返回:
      一个boolean,指示地址是否为全局范围的多播地址,如果不是全局范围或不是多播地址,则为false。
    • isMCNodeLocal

      public boolean isMCNodeLocal()
      检查多播地址是否具有节点范围的实用程序例程。
      覆盖:
      isMCNodeLocal 在类中的覆盖 InetAddress
      返回:
      一个boolean,指示地址是否为节点本地范围的多播地址,如果不是节点本地范围或不是多播地址,则为false。
    • isMCLinkLocal

      public boolean isMCLinkLocal()
      检查多播地址是否具有链路范围的实用程序例程。
      覆盖:
      isMCLinkLocal 在类中的覆盖 InetAddress
      返回:
      一个boolean,指示地址是否为链路本地范围的多播地址,如果不是链路本地范围或不是多播地址,则为false。
    • isMCSiteLocal

      public boolean isMCSiteLocal()
      检查多播地址是否具有站点范围的实用程序例程。
      覆盖:
      isMCSiteLocal 在类中的覆盖 InetAddress
      返回:
      一个boolean,指示地址是否为站点本地范围的多播地址,如果不是站点本地范围或不是多播地址,则为false。
    • isMCOrgLocal

      public boolean isMCOrgLocal()
      检查多播地址是否具有组织范围的实用程序例程。
      覆盖:
      isMCOrgLocal 在类中的覆盖 InetAddress
      返回:
      一个boolean,指示地址是否为组织本地范围的多播地址,如果不是组织本地范围或不是多播地址,则为false。
    • getAddress

      public byte[] getAddress()
      返回此InetAddress对象的原始IP地址。结果以网络字节顺序表示:地址的最高位字节在getAddress()[0]中。
      覆盖:
      getAddress 在类中的覆盖 InetAddress
      返回:
      此对象的原始IP地址。
    • getScopeId

      public int getScopeId()
      返回此实例关联的数值scopeId。如果未设置scoped_id,则返回值为零。
      返回:
      scopeId,如果未设置则为零。
      自:
      1.5
    • getScopedInterface

      public NetworkInterface getScopedInterface()
      返回此实例创建时使用的scoped接口。
      返回:
      scoped接口,如果未设置则为null。
      自:
      1.5
    • getHostAddress

      public String getHostAddress()
      以文本表示形式返回IP地址字符串。如果实例创建时指定了作用域标识符,则作用域id将附加到IP地址之后,以"%"(百分比)字符为前缀。这可以是数值值或字符串,取决于用于创建实例的是哪种。
      覆盖:
      getHostAddress 在类中的覆盖 InetAddress
      返回:
      以字符串格式返回原始IP地址。
    • hashCode

      public int hashCode()
      返回此IP地址的哈希码。
      覆盖:
      hashCode 在类中的覆盖 InetAddress
      返回:
      此IP地址的哈希码值。
      参见:
    • equals

      public boolean equals(Object obj)
      将此对象与指定对象进行比较。结果为true仅当参数不为null且表示与此对象相同的IP地址时。

      如果InetAddress的两个实例的getAddress返回的字节数组长度相同,并且每个数组组件对于字节数组都相同,则它们表示相同的IP地址。

      覆盖:
      equals 在类中的覆盖 InetAddress
      参数:
      obj - 要比较的对象。
      返回:
      如果对象相同,则为true;否则为false
      参见:
    • isIPv4CompatibleAddress

      public boolean isIPv4CompatibleAddress()
      检查InetAddress是否为IPv4兼容IPv6地址的实用程序例程。
      返回:
      一个boolean,指示InetAddress是否为IPv4兼容IPv6地址;如果地址为IPv4地址,则为false。