Is InetAddress.getHostAddress() ipv6 compliant in JDK 1.6?
Specifically I am doing
InetAddress.getLocalHost().getHostAddress()
Is it ipv6 compliant? Does it work for both ipv4 and v6 addresses?
The extended class java.net.Inet6Address
is IPv6 compliant.
JavaDoc:
This class represents an Internet Protocol version 6 (IPv6) address. Defined by RFC 2373: IP Version 6 Addressing Architecture.
Basically, if you do InetAddress.getByName()
or InetAddress.getByAddress()
the methods identify whether the name or address is an IPv4 or IPv6 name/address and return an extended Inet4Address
/Inet6Address
respectively.
As for InetAddress.getHostAddress()
, it returns a null. You will need java.net.Inet6Address.getHostAddress()
to return an IPv6 string representable address.
I looked at the code of InetAddress class and it is indeed doing the right thing.
if (isIPv6Supported()) {
o = InetAddress.loadImpl("Inet6AddressImpl");
}
else {
o = InetAddress.loadImpl("Inet4AddressImpl"); }
return (InetAddressImpl)o;
}
Here is the code to test based on the above analysis:
public static void main(String[] args) {
// TODO Auto-generated method stub
InetAddress localIP;
try {
localIP = InetAddress.getLocalHost();
if(localIP instanceof Inet6Address){
System.out.println("IPV6");
} else if (localIP instanceof Inet4Address) {
System.out.println("IPV4");
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With