Как проверить массив байтов как адрес ipv6? - PullRequest
2 голосов
/ 05 марта 2020

Справочная информация. При проверке строки в качестве действительного адреса ipv6 необходимо учитывать множество сценариев ios из-за сокращений.

::
::1
2622:ca00:139:594::64:90f3
2622:ca00:0139:0594:0000:0000:0064:90f3

- все действительные способы представления адресов ipv6 в виде строк. , Если бы мне нужна была функция для проверки строки как действительного адреса ipv6, мне нужно было бы принять во внимание все эти случаи.

Проблема: мне нужна помощь в написании функции java / scala, которая принимает массив байтов и проверяет его как адрес ipv6. Похоже, я не могу понять, когда адрес ipv6 записывается в виде массива байтов, всегда ли он длиной 16 байтов или есть способы сокращения, аналогичные тому, как адреса можно сокращать с помощью строковых обозначений? Если байтовое представление ipv6 всегда составляет 16 байтов и никогда не сокращается, я полагаю, что я могу просто проверить правильность ipv6 с приведенным ниже логом c - так ли это?

  /**
   * Return true if byte array is a valid ipv6 address.
   *
   * @param ip - array of bytes representing ip address
   * @return - true if ip address is a valid ipv6 address
   */
  def isIpV6(ip: Array[Byte]): Boolean = {
    ip != null && ip.length == 16
  }

1 Ответ

1 голос
/ 05 марта 2020

Существуют сложные возможности синтаксического анализа, если вам действительно нужно это сделать без помощи библиотеки. Он не помещается на одной странице.

Самый удобный способ - InetAddress.getByName () , который выдает исключение, если что-то не так.

У Guava есть аналогичное метод только для IP-адресов .

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