Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

InetAddress.getHostAddress() ipv6 compliant?

Tags:

java

ipv6

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?

like image 848
Fakrudeen Avatar asked Aug 02 '11 07:08

Fakrudeen


3 Answers

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.

like image 68
Buhake Sindi Avatar answered Oct 13 '22 05:10

Buhake Sindi


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; 
  }
like image 41
Fakrudeen Avatar answered Oct 13 '22 05:10

Fakrudeen


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();
    }

}
like image 22
Srinu Yarru Avatar answered Oct 13 '22 06:10

Srinu Yarru