Java Java类
此类表示 IPv6 地址并扩展 InetAddress 类。此类方法提供了表示和解释 IPv6 地址的便利。
此类的方法接受以下格式的输入:
- x:x:x:x:x:x:x:x –这是 IPv6 地址的一般形式,其中每个 x 都可以替换为地址的 16 位十六进制值。请注意,使用此格式时,必须有一个值代替每个“x”。例如,
4B0C:0:0:0:880C:99A8:4B0:4411
- 当地址包含多组 8 位为 '0' 时,可以使用特殊格式来压缩地址。在这种情况下,用 '::' 代替 0 以使地址更短。例如,前面例子中的地址可以写成——
4B0C::880C:99A8:4B0:4411
- x:x:x:x:x:x:dddd –当必须处理混合寻址(IPv6 + IPv4)时,使用第三种格式。在这种情况下,前 12 个字节用于 IPv6 寻址,其余 4 个字节用于 IPv4 寻址。例如,
F334::40CB:152.16.24.142
- ::FFFF:dddd –这种类型的寻址称为IPv4 映射寻址。它用于帮助部署 IPv6 寻址。它允许使用相同的结构和套接字通过 IPv6 和 IPv4 连接的网络进行通信。前 80 位用 '::' 表示的 0 填充。接下来的 32 位都是“1”,剩下的 32 位代表 IPv4 地址。例如,
::FFFF:152.16.24.123
方法 :
- getByAddress(String host, byte[] addr, int scope_id) :这用于通过将 IPv6 范围 ID 设置为给定值来创建 Inet6Address 对象。返回的对象类似于由 InetAddress.getByAddress(String, byte[]) 创建的对象,并带有有关范围 ID 的附加信息。
Syntax :public static Inet6Address getByAddress(String host, byte[] addr, int scope_id) throws UnknownHostException Parameters : host : host addr : raw ip address in network order scope_id : scope id of the address Throws : UnknownHostException : if IP address is of illegal length
- getByAddress(String host, byte[] addr, NetworkInterface nif):可以使用重载方法getByAddress() 来指定要与地址一起使用的网络接口。在这种情况下,与网络接口对应的作用域id被用作作用域id。
Syntax :public static Inet6Address getByAddress(String host, byte[] addr, NetworkInterface nif) throws UnknownHostException Parameters : host : host addr : raw ip address in network order nif : network interface to be associated with this address Throws : UnknownHostException : if IP address is of illegal length
- getScopeId() :返回与此地址关联的范围 ID,如果未设置,则返回 0。
Syntax : public int getScopeId()
- getScopedInterface() :返回与此地址关联的网络接口,如果未设置,则返回 null。
Syntax : public NetworkInterface getScopedInterface()
- getAddress() :以数组形式返回此 InetAddress 对象的原始 IP 地址。字节在数组中出现的顺序与 IP 地址中的相同,即 getAddress[0] 将包含最高顺序字节。
Syntax : public byte[] getAddress()
- getHostAddress() :以文本形式返回 IP 地址。
Syntax :public String getHostAddress()
- isAnyLocalAddress() :如果此地址表示本地地址,则返回 true。
Syntax :public boolean isAnyLocalAddress()
- isLinkLocalAddress() :如果此地址是链接本地地址,则返回 true。
Syntax :public boolean isLinkLocalAddress()
- isLoopbackAddress() :如果此地址是环回地址,则返回 true。
Syntax :public boolean isLoopbackAddress()
- isMCGlobal() :如果此多播地址具有全局范围,则返回 true。
Syntax :public boolean isMCGloabal()
- isMCLinkLocal() :如果此多播地址具有链接范围,则返回 true。
Syntax :public boolean isMCLinkLocal()
- isMCNodeLocal() :如果此多播地址具有节点范围,则返回 true。
Syntax :public boolean isMCNodeLocal()
- isMCOrgLocal() :如果此多播地址具有组织范围,则返回 true。
Syntax :public boolean isMCOrgLoacal()
- isMCSiteLocal() :如果此多播地址具有站点范围,则返回 true。
Syntax :public boolean isMCSiteLocal()
- isMulticastAddress() :如果此地址是 IP 多播地址,则返回 true。多播地址的前 4 位为 1110。
Syntax :public boolean isMulticastAddress()
- isSiteLocalAddress():如果此地址是站点本地地址,则返回 true。
Syntax :public boolean isSiteLocalAddress()()
- hashCode() :返回与此地址对象关联的哈希码。
Syntax : public int hashCode()
- equals() :如果此 IP 地址与指定对象的 IP 地址相同,则返回 true。 Equals() 方法在比较时不考虑主机名,只考虑关联的 IP 地址。
Syntax : public boolean equals(Object obj) Parameters : obj : object to compare with
Java实现:
//Java program to illustrate various
//Inet6Address class methods
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
public class inet6add
{
public static void main(String[] args) throws UnknownHostException
{
String host = "localhost";
byte add[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
//getByAddress() method
Inet6Address ip1 = Inet6Address.getByAddress(host, add, 5);
Inet6Address ip2 = Inet6Address.getByAddress(null, add, 6);
// Following methods checks the property of the thus created object.
// getscopeId() method
System.out.println("Scope Id : " + ip1.getScopeId());
// getScopedInterface() method
System.out.println("Scoped Interface : " + ip1.getScopedInterface());
// getAddress() method
System.out.println("Address : " + Arrays.toString(ip1.getAddress()));
// getHostAddress() method
System.out.println("Host Address : " + ip1.getHostAddress());
// isAnyLocalAddress() method
System.out.println("isAnyLocalAddress : " + ip1.isAnyLocalAddress());
// isLinkLocalAddress() method
System.out.println("isLinkLocalAddress : " + ip1.isLinkLocalAddress());
// isLoopbackAddress() method
System.out.println("isLoopbackAddress : " + ip1.isLoopbackAddress());
// isMCGlobal() method
System.out.println("isMCGlobal : " + ip1.isMCGlobal());
// isMCLinkLocal() method
System.out.println("isMCLinkLocal : " + ip1.isMCLinkLocal());
// isMCNodeLocal() method
System.out.println("isMCNodeLocal : " + ip1.isMCNodeLocal());
// isMCOrgLocal() method
System.out.println("isMCOrgLocal : " + ip1.isMCOrgLocal());
// isMCSiteLocal() method
System.out.println("isMCSiteLocal : " + ip1.isMCSiteLocal());
// isMulticastAddress() method
System.out.println("isMulticastAddress : " + ip1.isMulticastAddress());
// isSiteLocalAddress() method
System.out.println("isSiteLocalAddress : " + ip1.isSiteLocalAddress());
// hashCode() method
System.out.println("hashCode : " + ip1.hashCode());
// equals() method
System.out.println("ip1==ip2 : " + ip1.equals(ip2));
}
}
输出 :
Scope Id : 5
Scoped Interface : null
Address : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
Host Address : 0:0:0:0:0:0:0:1%5
isAnyLocalAddress : false
isLinkLocalAddress : false
isLoopbackAddress : true
isMCGlobal : false
isMCLinkLocal : false
isMCNodeLocal : false
isMCOrgLocal : false
isMCSiteLocal : false
isMulticastAddress : false
isSiteLocalAddress : false
hashCode : 1
ip1==ip2 : true