Совпадают адреса IPv4 и IPv6, но НЕ имя хоста? - PullRequest
3 голосов
/ 23 февраля 2012

Я хочу проверить, является ли строка адресом IPv4 или IPv6, но НИЧЕГО больше. Есть ли способ сделать это, используя стандартные Java-библиотеки?

Я знаю:

  • InetAddress.getByName (str) - но он принимает имена хостов
  • IPAddressUtil.isIPv4LiteralAddress (str) - но это внутренний класс и выдаст предупреждения компилятора

Я знаю, что мог бы использовать регулярные выражения, но я предпочитаю использовать существующие методы.

Ответы [ 4 ]

3 голосов
/ 23 февраля 2012

Вы можете использовать InetAddresses.forString () из этой библиотеки:

http://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/net/InetAddresses.java

1 голос
/ 27 февраля 2012

Способ сделать это в C - использовать inet_pton () .Вы можете перенести код на Java.(Или используйте некоторые действительно сложные регулярные выражения, потому что сопоставление адресов IPv6 непросто.)

Вы можете взглянуть на регулярное выражение в этом вопросе и изменить его так, чтобы оно не 'не совпадают с именами хостов, если вы чувствуете себя смелым.; -)

0 голосов
/ 06 сентября 2016

Java-библиотека IPAddress поддерживает как IPv4, так и IPv6 полиморфным способом.У него есть методы для выполнения того, что вы описываете.

Вот пример кода , который решает вашу проблему.

Вот еще пример кода:

IPAddressString ipString = new IPAddressString("ipv4 or ipv6 address string goes here");
System.out.println("IPv4: " + ipString.isIpV4() + " IPv6: " + ipString.isIpV6()); 
0 голосов
/ 23 февраля 2012

Простое правило: если адрес xxxxxxxx, то это адрес IPV6 ... Попробуйте также изучить классы Inet4Address и Inet6Address.

...