public class InetAddress extends Object implements Serializable
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. 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.
链路本地地址被设计为用于单个链路上的寻址,例如自动地址配置,邻居发现或当没有路由器存在时。
站点本地地址被设计为用于在站点内部寻址,而不需要全局前缀。
全球地址在互联网上是独一无二的。
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.
A value of -1 indicates "cache forever".
- 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.
A value of 0 indicates "never cache". A value of -1 indicates "cache forever".
getByAddress(byte[])
,
getByAddress(java.lang.String, byte[])
,
getAllByName(java.lang.String)
,
getByName(java.lang.String)
,
getLocalHost()
,
Serialized Form
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object obj)
将此对象与指定对象进行比较。
|
byte[] |
getAddress()
返回此
InetAddress 对象的原始IP地址。
|
static InetAddress[] |
getAllByName(String host)
给定主机的名称,根据系统上配置的名称服务返回其IP地址数组。
|
static InetAddress |
getByAddress(byte[] addr)
给出原始IP地址的
InetAddress 对象。
|
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地址转换为
String 。
|
public boolean isMulticastAddress()
boolean
InetAddress是否是IP多播地址
public boolean isAnyLocalAddress()
boolean
Inetaddress是否是通配符地址。
public boolean isLoopbackAddress()
boolean
InetAddress是否是一个环回地址;
否则为false。
public boolean isLinkLocalAddress()
boolean
InetAddress是否是链路本地地址;
如果地址不是链路本地单播地址,则为false。
public boolean isSiteLocalAddress()
boolean
InetAddress是否是站点本地地址;
如果地址不是站点本地单播地址,则为false。
public boolean isMCGlobal()
boolean
指示地址是否是全局范围的多播地址,如果不是全局范围,则为false,或者不是多播地址
public boolean isMCNodeLocal()
boolean
指示地址是否是节点本地作用域的多播地址,如果不是节点本地范围,则为false,否则为多播地址
public boolean isMCLinkLocal()
boolean
指示地址是否是链路本地范围的多播地址,如果不是链路本地作用域,或者不是多播地址,则为false
public boolean isMCSiteLocal()
boolean
指示地址是否是站点本地范围的多播地址,如果不是站点本地范围,则为false,或者不是多播地址
public boolean isMCOrgLocal()
boolean
指示地址是否是组织本地范围的组播地址,如果不是组织本地作用域,则不为false,或者不是组播地址
public boolean isReachable(int timeout) throws IOException
超时值(以毫秒为单位)表示尝试所需的最大时间。 如果操作在得到答案之前超时,则该主机被视为无法访问。 负值将导致抛出IllegalArgumentException异常。
timeout
- 呼叫中止之前的时间(以毫秒为单位)
boolean
指示地址是否可达。
IOException
- 如果发生网络错误
IllegalArgumentException
- 如果
timeout
为负数。
public boolean isReachable(NetworkInterface netif, int ttl, int timeout) throws IOException
network interface
和ttl
参数让呼叫者指定测试将通过哪个网络接口以及数据包应通过的最大跳数。 ttl
将导致抛出IllegalArgumentException异常。
超时值(以毫秒为单位)表示尝试所需的最大时间。 如果操作在得到答案之前超时,则该主机被视为无法访问。 负值将导致抛出IllegalArgumentException异常。
netif
- 测试完成的NetworkInterface,或任何接口为null
ttl
- 尝试最大跳数或默认值为0
timeout
- 呼叫中止之前的时间(以毫秒为单位)
boolean
指示地址是否可达。
IllegalArgumentException
- 如果
timeout
或
ttl
为负数。
IOException
- 如果发生网络错误
public String getHostName()
如果此InetAddress是使用主机名创建的,则该主机名将被记住并返回; 否则,将执行反向名称查找,并将基于系统配置的名称查找服务返回结果。 如果需要查找名称服务,请致电getCanonicalHostName
。
如果有一个安全管理器,它的checkConnect
方法首先被调用与主机名和-1
作为参数,看看是否允许操作。 如果不允许操作,它将返回IP地址的文本表示。
getCanonicalHostName()
,
SecurityManager.checkConnect(java.lang.String, int)
public String getCanonicalHostName()
如果有安全管理员,则该方法首先使用主机名称调用其checkConnect
方法,并-1
作为参数,以查看主叫代码是否被允许知道该IP地址的主机名,即连接到主机。 如果不允许操作,它将返回IP地址的文本表示。
SecurityManager.checkConnect(java.lang.String, int)
public byte[] getAddress()
InetAddress
对象的原始IP地址。
结果是网络字节顺序:地址的最高位字节在getAddress()[0]
。
public String getHostAddress()
public int hashCode()
hashCode
在
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public boolean equals(Object obj)
null
并且它代表与该对象相同的IP地址时,结果为true
。
如果getAddress
返回的字节数组的长度相同,则两个InetAddress的InetAddress
表示相同的IP地址,并且每个数组组件对于字节数组是相同的。
equals
在
Object
obj
- 对比的对象。
true
如果对象是一样的;
false
否则。
getAddress()
public String toString()
String
。
返回的字符串格式为:hostname / literal IP地址。
如果主机名未解决,则不执行反向名称服务查找。
主机名部分将用空字符串表示。
public static InetAddress getByAddress(String host, byte[] addr) throws UnknownHostException
主机名称可以是机器名称,例如“ java.sun.com
”或其IP地址的文本表示。
对主机名也不进行有效性检查。
如果addr指定IPv4地址,则返回Inet4Address的实例; 否则将返回Inet6Address的一个实例。
IPv4地址字节数组必须为4个字节长,IPv6字节数组必须长度为16个字节
host
- 指定的主机
addr
- 网络字节顺序中的原始IP地址
UnknownHostException
- 如果IP地址是非法的长度
public static InetAddress getByName(String host) throws UnknownHostException
主机名称可以是机器名称,例如“ java.sun.com
”或其IP地址的文本表示。 如果提供了文字IP地址,则只会检查地址格式的有效性。
为host
在字面的IPv6地址指定的,无论是在RFC 2732或RFC中定义的2373字面IPv6地址格式中定义的形式被接受。 还支持IPv6作用域地址。 见here对IPv6的范围地址的描述。
如果主机是null
则返回一个InetAddress
回送接口地址的InetAddress。 见RFC 3330第2节和RFC 2373第2.5.3节。
host
- 指定的主机,或
null
。
UnknownHostException
- 如果没有找到
host
IP地址,或者是否为全局IPv6地址指定了scope_id。
SecurityException
- 如果安全管理器存在,并且其checkConnect方法不允许该操作
public static InetAddress[] getAllByName(String host) throws UnknownHostException
主机名可以是机器名称,例如“ java.sun.com
”或其IP地址的文本表示。 如果提供了文字IP地址,则只会检查地址格式的有效性。
为host
在字面的IPv6地址指定的,无论是在RFC 2732或RFC中定义的2373字面IPv6地址格式中定义的形式被接受。 也可以通过附加范围区域标识符或scope_id来限定文字IPv6地址。 scope_ids的语法和用法描述为here 。
如果主机是null
则返回一个InetAddress
环回接口地址的InetAddress。 见RFC 3330第2节和RFC 2373第2.5.3节。
如果有一个安全管理员,并且host
不为空,并且host.length()
不等于零,则安全管理器的checkConnect
方法checkConnect
主机名称为调用,并以-1
作为参数来查看是否允许该操作。
host
- 主机的名称,或
null
。
UnknownHostException
- 如果没有找到
host
IP地址,或者如果为全局IPv6地址指定了scope_id。
SecurityException
- 如果安全管理器存在,并且其
checkConnect
方法不允许操作。
SecurityManager.checkConnect(java.lang.String, int)
public static InetAddress getLoopbackAddress()
返回的InetAddress将表示IPv4环回地址127.0.0.1或IPv6环回地址:: 1。 返回的IPv4环回地址只能是127,*。*。*
public static InetAddress getByAddress(byte[] addr) throws UnknownHostException
InetAddress
对象。
参数是网络字节顺序:地址的最高位字节在getAddress()[0]
。
该方法不阻止,即不执行反向名称服务查找。
IPv4地址字节数组必须为4个字节长,IPv6字节数组必须长度为16个字节
addr
- 网络字节顺序中的原始IP地址
UnknownHostException
- 如果IP地址是非法的长度
public static InetAddress getLocalHost() throws UnknownHostException
InetAddress
。
注意:解决的地址可能会缓存一段时间。
如果有一个安全管理器,它的checkConnect
方法被调用本地主机名, -1
作为参数来查看是否允许该操作。 如果不允许操作,则返回表示环回地址的InetAddress。
UnknownHostException
- 如果本地主机名无法解析成地址。
SecurityManager.checkConnect(java.lang.String, int)
,
getByName(java.lang.String)