Подтвердить что ты не робот

Есть ли простой способ преобразования String в Inetaddress в Java?

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 5

Библиотека 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
      }