Как нормализовать адрес IPv6 в Java? - PullRequest
0 голосов
/ 02 сентября 2018

Учитывая строку, которая содержит адрес IPv6 в одном из его форматов, существует ли стандартный способ Java для его нормализации таким образом, чтобы одно и то же нормализованное значение для разных форматов одного и того же адреса?
* 1002 т.е. *

normalise("2001:db8:0:0:1:0:0:1") = x
normalise("2001:db8::1:0:0:1") = x
normalise("2001:db8:0:0:1::1") = x

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Java-библиотека с открытым исходным кодом с открытым исходным кодом предоставляет различные методы для различных форматов строк. Несколько могут быть использованы для получения нормализованной строки. Отказ от ответственности: я руководитель проекта библиотеки IPAddress.

Двумя подходящими для рассмотрения «стандартизированными» строками являются каноническая и нормализованная.

Каноническая строка является рекомендуемым способом записи адресов IPv6, как определено RFC 5952

Нормализованная строка - это формат, созданный классом java.net.InetAddress.

static void printNormalized(String strs[]) {
    for (String str : strs) {
        System.out.println(new IPAddressString(str).getAddress().toNormalizedString());
    }
}

static void printCanonical(String strs[]) {
    for (String str : strs) {
        System.out.println(new IPAddressString(str).getAddress().toCanonicalString());
    }
}

String strs[] = {
    "2001:db8:0:0:1:0:0:1",
    "2001:db8::1:0:0:1", 
    "2001:db8:0:0:1::1"};

printCanonical(strs);
System.out.println();
printNormalized(strs);

Выход:

2001:db8::1:0:0:1
2001:db8::1:0:0:1
2001:db8::1:0:0:1

2001:db8:0:0:1:0:0:1
2001:db8:0:0:1:0:0:1
2001:db8:0:0:1:0:0:1
0 голосов
/ 02 сентября 2018

Вы можете достичь этого легко анализируя строку с InetAddress.getByName(String) и затем преобразование обратно в строку с getHostAddress():

public static String normalize(String s) throws UnknownHostException {
    return InetAddress.getByName(s).getHostAddress();
}

Этот метод возвращает "2001:db8:0:0:1:0:0:1" для всех ваших 3 примеров.

Кстати: приведенный выше код может нормализовать адреса IPv6 и IPv4.

...