InetAddress.getHostAddress() ipv6 compliant?

2019-01-27 23:32发布

问题:

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?

回答1:

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.



回答2:

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


回答3:

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

}


标签: java ipv6