public class InetAddress
extends Object
implements Serializable
java.lang.Object | |
↳ | java.net.InetAddress |
Known Direct Subclasses |
这个类表示一个Internet协议(IP)地址。
IP地址可以是IP所使用的32位或128位无符号数字,也可以是构建UDP和TCP等协议的较低级别的协议。 IP地址结构由定义RFC 790: Assigned Numbers , RFC 1918: Address Allocation for Private Internets , RFC 2365: Administratively Scoped IP Multicast ,并RFC 2373: IP Version 6 Addressing Architecture 。 InetAddress的一个实例由一个IP地址和可能的相应主机名组成(取决于它是用主机名构造还是已经完成反向主机名解析)。
unicast An identifier for a single interface. A packet sent to a unicast address is delivered to the interface identified by that address. 未指定地址 - 也称为匿名地址或通配符地址。 绝不能将它分配给任何节点。 它表示没有地址。 其使用的一个例子是作为绑定的目标,它允许服务器在任何接口上接受客户端连接,以防服务器主机有多个接口。
未指定的地址不能用作IP数据包的目标地址。
环回地址 - 这是分配给环回接口的地址。 发送到此IP地址的任何内容都会循环并成为本地主机上的IP输入。 测试客户端时经常使用此地址。
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.
链路本地地址被设计为用于在单个链路上进行寻址,以用于诸如自动地址配置,邻居发现或当没有路由器存在时。
站点本地地址被设计用于在站点内寻址而不需要全局前缀。
全球地址在互联网上是唯一的。
IPv4地址格式请参考Inet4Address#format ; IPv6地址格式请参考Inet6Address#format 。
有一个 couple of System Properties影响如何使用IPv4和IPv6地址。
反向名称解析意味着对于任何IP地址,都会返回与该IP地址关联的主机。
InetAddress类提供了将主机名解析为其IP地址的方法,反之亦然。
默认情况下,安装安全管理器时,为防止DNS欺骗攻击,正面主机名解析的结果将永久缓存。 如果未安装安全管理器,则缺省行为是缓存有限(实施相关)时间段的条目。 不成功的主机名解析的结果被缓存了很短的时间(10秒)以提高性能。
如果不需要默认行为,则可以将Java安全属性设置为正向缓存的不同生存时间(TTL)值。 同样,系统管理员可以在需要时配置不同的负缓存TTL值。
两个Java安全属性控制用于正面和负面主机名解析缓存的TTL值:
- networkaddress.cache.ttl
- Indicates the caching policy for successful name lookups from the name service. The value is specified as as integer to indicate the number of seconds to cache the successful lookup. The default setting is to cache for an implementation specific period of time.
值为-1表示“永远缓存”。
- networkaddress.cache.negative.ttl (default: 10)
- Indicates the caching policy for un-successful name lookups from the name service. The value is specified as as integer to indicate the number of seconds to cache the failure for un-successful lookups.
值为0表示“永不缓存”。 值为-1表示“永远缓存”。
也可以看看:
Public methods |
|
---|---|
boolean |
equals(Object obj) 将此对象与指定的对象进行比较。 |
byte[] |
getAddress() 返回此 |
static InetAddress[] |
getAllByName(String host) 根据主机的名称,根据系统上配置的名称服务返回其IP地址的数组。 |
static InetAddress |
getByAddress(byte[] addr) 返回给定原始IP地址的 |
static InetAddress |
getByAddress(String host, byte[] addr) 根据提供的主机名和IP地址创建一个InetAddress。 |
static InetAddress |
getByName(String host) 根据主机名称确定主机的IP地址。 |
String |
getCanonicalHostName() 获取此IP地址的完全限定的域名。 |
String |
getHostAddress() 以文本显示形式返回IP地址字符串。 |
String |
getHostName() 获取此IP地址的主机名。 |
static InetAddress |
getLocalHost() 返回本地主机的地址。 |
static InetAddress |
getLoopbackAddress() 返回回送地址。 |
int |
hashCode() 返回此IP地址的哈希码。 |
boolean |
isAnyLocalAddress() 用于检查通配符地址中的InetAddress的实用程序。 |
boolean |
isLinkLocalAddress() 用于检查InetAddress是否为链接本地地址的实用程序。 |
boolean |
isLoopbackAddress() 检查InetAddress是否为环回地址的实用程序。 |
boolean |
isMCGlobal() 检查多播地址是否具有全局范围的实用程序。 |
boolean |
isMCLinkLocal() 检查多播地址是否具有链接范围的实用程序。 |
boolean |
isMCNodeLocal() 检查组播地址是否具有节点范围的实用程序。 |
boolean |
isMCOrgLocal() 检查组播地址是否具有组织范围的实用程序。 |
boolean |
isMCSiteLocal() 检查组播地址是否具有站点范围的实用程序。 |
boolean |
isMulticastAddress() 检查InetAddress是否为IP多播地址的实用程序。 |
boolean |
isReachable(int timeout) 测试该地址是否可达。 |
boolean |
isReachable(NetworkInterface netif, int ttl, int timeout) 测试该地址是否可达。 |
boolean |
isSiteLocalAddress() 检查InetAddress是否为站点本地地址的实用程序。 |
String |
toString() 将此IP地址转换为 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
boolean equals (Object obj)
将此对象与指定的对象进行比较。 当且仅当参数不是null
且它表示与此对象相同的IP地址时,结果为true
。
的两个实例 InetAddress
表示相同的IP地址,如果返回的字节数组的长度 getAddress
对于两个是相同的,并且每个阵列组件的是用于字节数组相同的。
Parameters | |
---|---|
obj |
Object : the object to compare against. |
Returns | |
---|---|
boolean |
true if the objects are the same; false otherwise. |
也可以看看:
byte[] getAddress ()
返回此InetAddress
对象的原始IP地址。 结果是网络字节顺序:地址的最高位字节在getAddress()[0]
。
Returns | |
---|---|
byte[] |
the raw IP address of this object. |
InetAddress[] getAllByName (String host)
根据主机的名称,根据系统上配置的名称服务返回其IP地址的数组。
主机名称可以是机器名称,例如“ java.sun.com
”,也可以是其IP地址的文本表示。 如果提供文字IP地址,则只检查地址格式的有效性。
对于文字IPv6地址中指定的host
,接受RFC 2732中定义的格式或RFC 2373中定义的文字IPv6地址格式。 一个文字IPv6地址也可以通过追加一个范围区域标识符或scope_id来限定。 scope_ids的语法和用法如here所述。
如果主机是null,则返回代表回送接口地址的InetAddress 。 见RFC 3330第2节和RFC 2373第2.5.3节。
如果存在安全管理器并且 host
不为空且 host.length()
不等于零,则使用主机名和 -1
作为其参数来调用安全管理器的 checkConnect
方法,以查看是否允许执行该操作。
Parameters | |
---|---|
host |
String : the name of the host, or null . |
Returns | |
---|---|
InetAddress[] |
an array of all the IP addresses for a given host name. |
Throws | |
---|---|
UnknownHostException |
if no IP address for the host could be found, or if a scope_id was specified for a global IPv6 address. |
SecurityException |
if a security manager exists and its checkConnect method doesn't allow the operation. |
也可以看看:
InetAddress getByAddress (byte[] addr)
给定原始IP地址返回一个InetAddress
对象。 参数采用网络字节顺序:地址的最高位字节为getAddress()[0]
。
此方法不会阻止,即不执行反向名称服务查找。
IPv4地址字节数组必须是4个字节长,IPv6字节数组必须是16个字节长
Parameters | |
---|---|
addr |
byte : the raw IP address in network byte order |
Returns | |
---|---|
InetAddress |
an InetAddress object created from the raw IP address. |
Throws | |
---|---|
UnknownHostException |
if IP address is of illegal length |
InetAddress getByAddress (String host, byte[] addr)
根据提供的主机名和IP地址创建一个InetAddress。 没有名称服务检查地址的有效性。
主机名可以是机器名称,例如“ java.sun.com
”,也可以是其IP地址的文本表示。
主机名也不做有效性检查。
如果addr指定了IPv4地址,则将返回Inet4Address的实例; 否则,将返回Inet6Address的一个实例。
IPv4地址字节数组必须是4个字节长,IPv6字节数组必须是16个字节长
Parameters | |
---|---|
host |
String : the specified host |
addr |
byte : the raw IP address in network byte order |
Returns | |
---|---|
InetAddress |
an InetAddress object created from the raw IP address. |
Throws | |
---|---|
UnknownHostException |
if IP address is of illegal length |
InetAddress getByName (String host)
根据主机名称确定主机的IP地址。
主机名称可以是机器名称,例如“ java.sun.com
”,也可以是其IP地址的文本表示。 如果提供文字IP地址,则只检查地址格式的有效性。
对于在文字IPv6地址中指定的host
RFC 2732中定义的格式或RFC 2373中定义的文字IPv6地址格式。 IPv6范围的地址也被支持。 有关IPv6作用域地址的描述,请参阅here 。
如果主机是null,则返回代表回送接口地址的InetAddress 。 见RFC 3330第2节和RFC 2373第2.5.3节。
Parameters | |
---|---|
host |
String : the specified host, or null . |
Returns | |
---|---|
InetAddress |
an IP address for the given host name. |
Throws | |
---|---|
UnknownHostException |
if no IP address for the host could be found, or if a scope_id was specified for a global IPv6 address. |
SecurityException |
if a security manager exists and its checkConnect method doesn't allow the operation |
String getCanonicalHostName ()
获取此IP地址的完全限定的域名。 尽力而为的方法,这意味着我们可能无法返回FQDN,具体取决于底层的系统配置。
如果有安全管理器,则此方法首先使用主机名和-1
作为参数调用其checkConnect
方法,以查看是否允许调用代码知道此IP地址的主机名,即连接到主机。 如果操作不被允许,它将返回IP地址的文本表示。
Returns | |
---|---|
String |
the fully qualified domain name for this IP address, or if the operation is not allowed by the security check, the textual representation of the IP address. |
也可以看看:
String getHostAddress ()
以文本显示形式返回IP地址字符串。
Returns | |
---|---|
String |
the raw IP address in a string format. |
String getHostName ()
获取此IP地址的主机名。
如果此InetAddress是使用主机名创建的,则会记住此主机名并将其返回; 否则,将执行反向名称查找,并根据系统配置的名称查找服务返回结果。 如果需要查询名称服务,请致电getCanonicalHostName
。
如果有安全管理器,则首先使用主机名和-1
作为其参数来调用其checkConnect
方法,以查看操作是否被允许。 如果操作不被允许,它将返回IP地址的文本表示。
Returns | |
---|---|
String |
the host name for this IP address, or if the operation is not allowed by the security check, the textual representation of the IP address. |
InetAddress getLocalHost ()
返回本地主机的地址。 这是通过从系统中检索主机的名称,然后将该名称解析为InetAddress
。
注意:解析后的地址可能会在短时间内被缓存。
如果有安全管理器,则使用本地主机名称和-1
作为其参数来调用其checkConnect
方法,以查看是否允许执行该操作。 如果操作不被允许,则返回代表回送地址的InetAddress。
Returns | |
---|---|
InetAddress |
the address of the local host. |
Throws | |
---|---|
UnknownHostException |
if the local host name could not be resolved into an address. |
InetAddress getLoopbackAddress ()
返回回送地址。
返回的InetAddress将表示IPv4环回地址127.0.0.1或IPv6环回地址:: 1。 返回的IPv4回送地址只是127。*。*。*格式中的许多
Returns | |
---|---|
InetAddress |
the InetAddress loopback instance. |
int hashCode ()
返回此IP地址的哈希码。
Returns | |
---|---|
int |
a hash code value for this IP address. |
boolean isAnyLocalAddress ()
用于检查通配符地址中的InetAddress的实用程序。
Returns | |
---|---|
boolean |
a boolean indicating if the Inetaddress is a wildcard address. |
boolean isLinkLocalAddress ()
用于检查InetAddress是否为链接本地地址的实用程序。
Returns | |
---|---|
boolean |
a boolean indicating if the InetAddress is a link local address; or false if address is not a link local unicast address. |
boolean isLoopbackAddress ()
检查InetAddress是否为环回地址的实用程序。
Returns | |
---|---|
boolean |
a boolean indicating if the InetAddress is a loopback address; or false otherwise. |
boolean isMCGlobal ()
检查多播地址是否具有全局范围的实用程序。
Returns | |
---|---|
boolean |
a boolean indicating if the address has is a multicast address of global scope, false if it is not of global scope or it is not a multicast address |
boolean isMCLinkLocal ()
检查多播地址是否具有链接范围的实用程序。
Returns | |
---|---|
boolean |
a boolean indicating if the address has is a multicast address of link-local scope, false if it is not of link-local scope or it is not a multicast address |
boolean isMCNodeLocal ()
检查组播地址是否具有节点范围的实用程序。
Returns | |
---|---|
boolean |
a boolean indicating if the address has is a multicast address of node-local scope, false if it is not of node-local scope or it is not a multicast address |
boolean isMCOrgLocal ()
检查组播地址是否具有组织范围的实用程序。
Returns | |
---|---|
boolean |
a boolean indicating if the address has is a multicast address of organization-local scope, false if it is not of organization-local scope or it is not a multicast address |
boolean isMCSiteLocal ()
检查组播地址是否具有站点范围的实用程序。
Returns | |
---|---|
boolean |
a boolean indicating if the address has is a multicast address of site-local scope, false if it is not of site-local scope or it is not a multicast address |
boolean isMulticastAddress ()
检查InetAddress是否为IP多播地址的实用程序。
Returns | |
---|---|
boolean |
a boolean indicating if the InetAddress is an IP multicast address |
boolean isReachable (int timeout)
测试该地址是否可达。 尝试通过实现尝试访问主机,尽力而为,但防火墙和服务器配置可能会阻止导致无法访问状态的请求,同时可能访问某些特定的端口。 如果可以获得特权,典型的实现将使用ICMP ECHO REQUEST,否则它将尝试在目标主机的端口7(Echo)上建立TCP连接。
超时值(以毫秒为单位)表示尝试应采取的最大时间量。 如果操作在获得答案之前超时,主机将被视为无法访问。 负值将导致抛出IllegalArgumentException。
Parameters | |
---|---|
timeout |
int : the time, in milliseconds, before the call aborts |
Returns | |
---|---|
boolean |
a boolean indicating if the address is reachable. |
Throws | |
---|---|
IOException |
if a network error occurs |
IllegalArgumentException |
if timeout is negative. |
boolean isReachable (NetworkInterface netif, int ttl, int timeout)
测试该地址是否可达。 尝试通过实现尝试访问主机,尽力而为,但防火墙和服务器配置可能会阻止导致无法访问状态的请求,同时可能访问某些特定的端口。 如果可以获得特权,典型的实现将使用ICMP ECHO REQUEST,否则它将尝试在目标主机的端口7(Echo)上建立TCP连接。
参数network interface
和ttl
让调用者指定测试将经过的网络接口以及数据包应经过的最大跳数。 ttl
将导致抛出IllegalArgumentException。
超时值(以毫秒为单位)表示尝试应采取的最大时间量。 如果操作在获得答案之前超时,主机将被视为无法访问。 负值将导致抛出IllegalArgumentException。
Parameters | |
---|---|
netif |
NetworkInterface : the NetworkInterface through which the test will be done, or null for any interface |
ttl |
int : the maximum numbers of hops to try or 0 for the default |
timeout |
int : the time, in milliseconds, before the call aborts |
Returns | |
---|---|
boolean |
a boolean indicating if the address is reachable. |
Throws | |
---|---|
IllegalArgumentException |
if either timeout or ttl are negative. |
IOException |
if a network error occurs |
boolean isSiteLocalAddress ()
检查InetAddress是否为站点本地地址的实用程序。
Returns | |
---|---|
boolean |
a boolean indicating if the InetAddress is a site local address; or false if address is not a site local unicast address. |
String toString ()
将此IP地址转换为String
。 返回的字符串格式为:主机名/文字IP地址。 如果主机名未解析,则不执行反向名称服务查找。 主机名部分将由空字符串表示。
Returns | |
---|---|
String |
a string representation of this IP address. |