Есть ли простой способ конвертировать строку в Inetaddress в Java? - PullRequest
23 голосов
/ 22 февраля 2010

Я пытаюсь преобразовать строки в Inetaddress. Я не пытаюсь разрешить имена хостов: строки - это адреса ipv4. InetAddress.getByName(String host) работает? Или я должен вручную разобрать его?

Ответы [ 5 ]

17 голосов
/ 15 июня 2012

com.google.common.net.InetAddresses.forString(String ipString) лучше для этого, поскольку он не будет выполнять поиск DNS независимо от того, какая строка передана ему.

14 голосов
/ 22 февраля 2010

Да, это будет работать. API очень ясен в этом («Имя хоста может быть именем машины, например,« java.sun.com », или текстовым представлением его IP-адреса.») И, конечно, Вы можете легко проверить себя.

3 голосов
/ 18 ноября 2013

Осторожно: кажется, что синтаксический анализ неверного адреса, такого как InetAddress.getByName("999.999.999.999"), не приведет к исключению, как можно ожидать из фразы в документации:

проверяется правильность формата адреса

Опытным путем я обнаружил, что получаю экземпляр InetAddress с необработанным IP-адресом локального компьютера и неверным IP-адресом в качестве имени хоста. Конечно, это было не то, что я ожидал!

1 голос
/ 28 марта 2013

Вы можете попробовать , используя регулярное выражение для фильтрации нечисловых IP-адресов перед передачей String в getByName(). Тогда getByName() не будет пытаться разрешить имя.

0 голосов
/ 18 декабря 2017

Библиотека Java с открытым исходным кодом IPAddress проверит все стандартные представления IPv6 и IPv4 и сделает это без поиска DNS. Отказ от ответственности: я руководитель проекта этой библиотеки.

Следующий код выполнит то, что вы запрашиваете:

     String s = "1.2.3.4";
     try {
            IPAddressString str = new IPAddressString(s);
            IPAddress addr = str.toAddress();
            InetAddress inetAddress = addr.toInetAddress(); //IPv4 or IPv6
            if(addr.isIPv4() || addr.isIPv4Convertible()) {//IPv4 specific
                IPv4Address ipv4Addr = addr.toIPv4();
                Inet4Address inetAddr = ipv4Addr.toInetAddress();
                //use address
            }
      } catch(AddressStringException e) {
            //e.getMessage has validation error
      }
...