模块  java.base
软件包  java.net

Class InetAddress

  • 实现的所有接口
    Serializable
    已知直接子类:
    Inet4AddressInet6Address

    public class InetAddress
    extends Object
    implements Serializable
    此类表示Internet协议(IP)地址。

    IP地址是IP使用的32位或128位无符号数,IP是低级协议,在其上构建UDP和TCP等协议。 IP地址结构由定义RFC 790: Assigned NumbersRFC 1918: Address Allocation for Private InternetsRFC 2365: Administratively Scoped IP MulticastRFC 2373: IP Version 6 Addressing Architecture InetAddress的实例由IP地址和可能的相应主机名组成(取决于它是使用主机名构造还是已经完成反向主机名解析)。

    地址类型

    Description of unicast and multicast address types Address Type Description unicast An identifier for a single interface. A packet sent to a unicast address is delivered to the interface identified by that address.

    The Unspecified Address -- Also called anylocal or wildcard address. It must never be assigned to any node. It indicates the absence of an address. One example of its use is as the target of bind, which allows a server to accept a client connection on any interface, in case the server host has multiple interfaces.

    The unspecified address must not be used as the destination address of an IP packet.

    The Loopback Addresses -- This is the address assigned to the loopback interface. Anything sent to this IP address loops around and becomes IP input on the local host. This address is often used when testing a client.

    multicast An identifier for a set of interfaces (typically belonging to different nodes). A packet sent to a multicast address is delivered to all interfaces identified by that address.

    IP地址范围

    链路本地地址旨在用于在单个链路上进行寻址,以用于诸如自动地址配置,邻居发现或不存在路由器的目的。

    站点本地地址旨在用于在站点内部进行寻址,而无需全局前缀。

    全球地址在互联网上是独一无二的。

    IP地址的文本表示

    IP地址的文本表示是特定于地址族的。

    IPv4地址格式请参考Inet4Address#format ; 有关IPv6地址格式,请参阅Inet6Address#format

    有一个couple of System Properties影响IPv4和IPv6地址的使用方式。

    主机名解析

    主机名到IP地址解析是通过使用本地机器配置信息和网络命名服务(如域名系统(DNS)和网络信息服务(NIS))的组合来完成的。 默认情况下,正在使用的特定命名服务是本地计算机配置的一个。 对于任何主机名,将返回其对应的IP地址。

    反向名称解析意味着对于任何IP地址,都会返回与IP地址关联的主机。

    InetAddress类提供了将主机名解析为其IP地址的方法,反之亦然。

    InetAddress缓存

    InetAddress类具有用于存储成功和不成功主机名解析的缓存。

    默认情况下,安装安全管理器时,为了防止DNS欺骗攻击,可以永久缓存正主机名解析的结果。 未安装安全管理器时,默认行为是缓存有限(依赖于实现)时间段的条目。 主机名解析失败的结果将在非常短的时间(10秒)内缓存,以提高性能。

    如果不需要默认行为,则可以将Java安全属性设置为正缓存的不同生存时间(TTL)值。 同样,系统管理员可以在需要时配置不同的负缓存TTL值。

    两个Java安全属性控制用于正面和负面主机名解析缓存的TTL值:

    networkaddress.cache.ttl
    表示从名称服务成功进行名称查找的缓存策略。 该值指定为整数,以指示缓存成功查找的秒数。 默认设置是缓存特定于实现的时间段。

    值-1表示“永远缓存”。

    networkaddress.cache.negative.ttl (默认值:10)
    表示名称服务中未成功的名称查找的缓存策略。 该值指定为整数,以指示缓存未成功查找失败的秒数。

    值为0表示“从不缓存”。 值-1表示“永远缓存”。

    从以下版本开始:
    1.0
    另请参见:
    getByAddress(byte[])getByAddress(java.lang.String, byte[])getAllByName(java.lang.String)getByName(java.lang.String)getLocalHost()Serialized Form
    • 方法详细信息

      • isMulticastAddress

        public boolean isMulticastAddress()
        用于检查InetAddress是否为IP多播地址的实用程序例程。
        结果
        boolean指示InetAddress是否是IP多播地址
        从以下版本开始:
        1.1
      • isAnyLocalAddress

        public boolean isAnyLocalAddress()
        用于检查InetAddress是否为通配符地址的实用例程。
        结果
        boolean指示Inetaddress是否为通配符地址。
        从以下版本开始:
        1.4
      • isLoopbackAddress

        public boolean isLoopbackAddress()
        用于检查InetAddress是否为环回地址的实用例程。
        结果
        boolean指示InetAddress是否为环回地址; 否则为假。
        从以下版本开始:
        1.4
      • isLinkLocalAddress

        public boolean isLinkLocalAddress()
        用于检查InetAddress是否为链接本地地址的实用程序例程。
        结果
        boolean指示InetAddress是否为链路本地地址; 如果地址不是链接本地单播地址,则返回false。
        从以下版本开始:
        1.4
      • isSiteLocalAddress

        public boolean isSiteLocalAddress()
        用于检查InetAddress是否为站点本地地址的实用程序例程。
        结果
        boolean指示InetAddress是否是站点本地地址; 如果地址不是站点本地单播地址,则返回false。
        从以下版本开始:
        1.4
      • isMCGlobal

        public boolean isMCGlobal()
        用于检查多播地址是否具有全局范围的实用例程。
        结果
        boolean指示地址是否是全局范围的多播地址,如果它不是全局范围或者不是多播地址,则为false
        从以下版本开始:
        1.4
      • isMCNodeLocal

        public boolean isMCNodeLocal()
        用于检查多播地址是否具有节点范围的实用例程。
        结果
        boolean指示地址是否是节点本地作用域的多播地址,如果它不是节点本地作用域,或者它不是多播地址,则为false
        从以下版本开始:
        1.4
      • isMCLinkLocal

        public boolean isMCLinkLocal()
        用于检查多播地址是否具有链接范围的实用例程。
        结果
        boolean指示地址是否是链路本地范围的多播地址,如果不是链路本地范围或者不是多播地址,则为false
        从以下版本开始:
        1.4
      • isMCSiteLocal

        public boolean isMCSiteLocal()
        用于检查多播地址是否具有站点范围的实用程序例程。
        结果
        a boolean指示地址是否为站点本地作用域的多播地址,如果不是站点本地作用域或不是多播地址,则为false
        从以下版本开始:
        1.4
      • isMCOrgLocal

        public boolean isMCOrgLocal()
        用于检查多播地址是否具有组织范围的实用例程。
        结果
        a boolean指示地址是否为组织本地范围的组播地址,如果不是组织本地范围或不是组播地址,则为false
        从以下版本开始:
        1.4
      • isReachable

        public boolean isReachable​(int timeout)
                            throws IOException
        测试该地址是否可达。 尽管尝试到达主机,但是防火墙和服务器配置可以阻止导致无法访问状态的请求,同时可以访问某些特定端口。 如果可以获得特权,则典型的实现将使用ICMP ECHO REQUEST,否则它将尝试在目标主机的端口7(Echo)上建立TCP连接。

        超时值(以毫秒为单位)表示尝试应采用的最长时间。 如果在获得答案之前操作超时,则认为主机无法访问。 负值将导致抛出IllegalArgumentException。

        参数
        timeout - 呼叫中止前的时间(以毫秒为单位)
        结果
        boolean指示地址是否可达。
        异常
        IOException - 如果发生网络错误
        IllegalArgumentException - 如果 timeout为负数。
        从以下版本开始:
        1.5
      • isReachable

        public boolean isReachable​(NetworkInterface netif,
                                   int ttl,
                                   int timeout)
                            throws IOException
        测试该地址是否可达。 尽管尝试到达主机,但是防火墙和服务器配置可以阻止导致无法访问状态的请求,同时可以访问某些特定端口。 如果可以获得特权,则典型的实现将使用ICMP ECHO REQUEST,否则它将尝试在目标主机的端口7(Echo)上建立TCP连接。

        network interfacettl参数允许调用者指定测试将通过哪个网络接口以及数据包应经过的最大跳数。 ttl将导致抛出IllegalArgumentException。

        超时值(以毫秒为单位)表示尝试应采用的最长时间。 如果在获得答案之前操作超时,则认为主机无法访问。 负值将导致抛出IllegalArgumentException。

        参数
        netif - 将通过其进行测试的NetworkInterface,或对于任何接口为null
        ttl - 要尝试的最大跃点数,或者默认值为0
        timeout - 呼叫中止前的时间(以毫秒为单位)
        结果
        a boolean指示地址是否可达。
        异常
        IllegalArgumentException - 如果 timeoutttl为负数。
        IOException - 如果发生网络错误
        从以下版本开始:
        1.5
      • getHostName

        public String getHostName()
        获取此IP地址的主机名。

        如果使用主机名创建此InetAddress,则将记住并返回此主机名; 否则,将执行反向名称查找,并将根据系统配置的名称查找服务返回结果。 如果需要查找名称服务,请致电getCanonicalHostName

        如果存在安全管理器,则首先使用主机名和-1作为其参数调用其checkConnect方法,以查看是否允许该操作。 如果不允许该操作,它将返回IP地址的文本表示。

        结果
        此IP地址的主机名,或者如果安全检查不允许操作,则为IP地址的文本表示形式。
        另请参见:
        getCanonicalHostName()SecurityManager.checkConnect(java.lang.String, int)
      • getCanonicalHostName

        public String getCanonicalHostName()
        获取此IP地址的完全限定域名。 尽力而为方法,这意味着我们可能无法返回FQDN,具体取决于底层系统配置。

        如果有安全管理器,则此方法首先使用主机名和-1作为其参数调用其checkConnect方法,以查看是否允许调用代码知道此IP地址的主机名,即连接到主机。 如果不允许该操作,它将返回IP地址的文本表示。

        结果
        此IP地址的完全限定域名,或者如果安全检查不允许操作,则为IP地址的文本表示。
        从以下版本开始:
        1.4
        另请参见:
        SecurityManager.checkConnect(java.lang.String, int)
      • getAddress

        public byte[] getAddress()
        返回此InetAddress对象的原始IP地址。 结果是网络字节顺序:地址的最高位字节在getAddress()[0]
        结果
        此对象的原始IP地址。
      • getHostAddress

        public String getHostAddress()
        返回文本表示中的IP地址字符串。
        结果
        字符串格式的原始IP地址。
        从以下版本开始:
        1.0.2
      • equals

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

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

        重写:
        equalsObject
        参数
        obj - 要比较的对象。
        结果
        true如果对象相同; 否则为false
        另请参见:
        getAddress()
      • toString

        public String toString()
        将此IP地址转换为String 返回的字符串格式为:hostname / literal IP address。 如果主机名未解析,则不执行反向名称服务查找。 主机名部分将由空字符串表示。
        重写:
        toString在类 Object
        结果
        此IP地址的字符串表示形式。
      • getByAddress

        public static InetAddress getByAddress​(String host,
                                               byte[] addr)
                                        throws UnknownHostException
        根据提供的主机名和IP地址创建InetAddress。 没有检查名称服务的地址有效性。

        主机名可以是计算机名,例如“ java.sun.com ”,也可以是其IP地址的文本表示形式。

        也没有对主机名进行有效性检查。

        如果addr指定IPv4地址,则将返回Inet4Address的实例; 否则,将返回Inet6Address的实例。

        IPv4地址字节数组长度必须为4个字节,IPv6字节数组长度必须为16个字节

        参数
        host - 指定的主机
        addr - 网络字节顺序中的原始IP地址
        结果
        从原始IP地址创建的InetAddress对象。
        异常
        UnknownHostException - 如果IP地址长度非法
        从以下版本开始:
        1.4
      • getByName

        public static InetAddress getByName​(String host)
                                     throws UnknownHostException
        根据主机名称确定主机的IP地址。

        主机名可以是计算机名,例如“ java.sun.com ”,也可以是其IP地址的文本表示。 如果提供了文字IP地址,则仅检查地址格式的有效性。

        对于在文字IPv6地址中指定的host ,可以接受RFC 2732中定义的格式或RFC 2373中定义的文字IPv6地址格式。 还支持IPv6范围的地址。 有关IPv6作用域地址的说明,请参见here

        如果主机是nullhost.length()等于零,则InetAddress表示环回接口地址的InetAddress 参见第2节的RFC 3330和第2.5.3节的RFC 2373

        如果有安全管理器,并且host不是nullhost.length()不等于零,则使用主机名和-1作为其参数调用安全管理器的checkConnect方法,以确定是否允许该操作。

        参数
        host - 指定的主机,或 null
        结果
        给定主机名的IP地址。
        异常
        UnknownHostException -如果无IP地址 host可以找到,或者如果一个全局IPv6地址指定了scope_id。
        SecurityException - 如果存在安全管理器且其checkConnect方法不允许该操作
      • getAllByName

        public static InetAddress[] getAllByName​(String host)
                                          throws UnknownHostException
        根据主机的名称,根据系统上配置的名称服务返回其IP地址数组。

        主机名可以是计算机名,例如“ java.sun.com ”,也可以是其IP地址的文本表示。 如果提供了文字IP地址,则仅检查地址格式的有效性。

        对于在文字IPv6地址中指定的host ,可以接受RFC 2732中定义的格式或RFC 2373中定义的文字IPv6地址格式。 还可以通过附加范围区域标识符或scope_id来限定文字IPv6地址。 scope_ids的语法和用法描述于here

        如果主机是nullhost.length()等于零,则InetAddress表示环回接口地址的InetAddress 见第2节RFC 3330和第2.5.3节第RFC 2373节。

        如果有安全管理器,并且host不是nullhost.length()不等于零,则使用主机名和-1作为其参数调用安全管理器的checkConnect方法,以确定是否允许该操作。

        参数
        host - 主机名,或 null
        结果
        给定主机名的所有IP地址的数组。
        异常
        UnknownHostException -如果无IP地址 host可以找到,或者如果一个全局IPv6地址指定了scope_id。
        SecurityException - 如果存在安全管理器且其 checkConnect方法不允许该操作。
        另请参见:
        SecurityManager.checkConnect(java.lang.String, int)
      • getLoopbackAddress

        public static InetAddress getLoopbackAddress()
        返回环回地址。

        返回的InetAddress将表示IPv4环回地址127.0.0.1或IPv6环回地址:: 1。 返回的IPv4环回地址只是127中的许多地址之一。*。*。*

        结果
        InetAddress环回实例。
        从以下版本开始:
        1.7
      • getByAddress

        public static InetAddress getByAddress​(byte[] addr)
                                        throws UnknownHostException
        给定原始IP地址返回InetAddress对象。 参数以网络字节顺序排列:地址的最高位字节在getAddress()[0]

        此方法不会阻止,即不执行反向名称服务查找。

        IPv4地址字节数组长度必须为4个字节,IPv6字节数组长度必须为16个字节

        参数
        addr - 网络字节顺序中的原始IP地址
        结果
        从原始IP地址创建的InetAddress对象。
        异常
        UnknownHostException - 如果IP地址长度非法
        从以下版本开始:
        1.4
      • getLocalHost

        public static InetAddress getLocalHost()
                                        throws UnknownHostException
        返回本地主机的地址。 这是通过从系统中检索主机的名称,然后将该名称解析为InetAddress

        注意:解析的地址可能会在很短的时间内缓存。

        如果有安全管理器,则使用本地主机名和-1作为其参数调用其checkConnect方法,以查看是否允许该操作。 如果不允许该操作,则返回表示环回地址的InetAddress。

        结果
        本地主机的地址。
        异常
        UnknownHostException - 如果无法将本地主机名解析为地址。
        另请参见:
        SecurityManager.checkConnect(java.lang.String, int)getByName(java.lang.String)