InetAddress.getHostAddress () совместимый с ipv6? - PullRequest
6 голосов
/ 02 августа 2011

Является ли InetAddress.getHostAddress () ipv6-совместимым в JDK 1.6?

В частности, я делаю

InetAddress.getLocalHost().getHostAddress()

Это ipv6-совместимый?Работает ли это для адресов ipv4 и v6?

Ответы [ 3 ]

6 голосов
/ 02 августа 2011

Расширенный класс java.net.Inet6Address совместим с IPv6.

JavaDoc:

Этот класс представляет адрес Интернет-протокола версии 6 (IPv6).Определено в RFC 2373: Архитектура адресации IP версии 6.

В основном, если вы делаете InetAddress.getByName() или InetAddress.getByAddress(), методы определяют, является ли имя или адрес именем / адресом IPv4 или IPv6 и возвращаютсярасширенный Inet4Address / Inet6Address соответственно.

Что касается InetAddress.getHostAddress(), он возвращает ноль .Вам потребуется java.net.Inet6Address.getHostAddress(), чтобы вернуть представляемый адрес строки IPv6.

4 голосов
/ 08 ноября 2013

Я посмотрел код класса InetAddress, и он действительно работает правильно.

  if (isIPv6Supported()) { 
      o = InetAddress.loadImpl("Inet6AddressImpl"); 
  } 
  else { 
      o = InetAddress.loadImpl("Inet4AddressImpl"); } 
      return (InetAddressImpl)o; 
  }
1 голос
/ 15 декабря 2015

Вот код для тестирования на основе приведенного выше анализа:

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...