Есть ли Java API, который будет идентифицировать IPv6-адрес fd00 :: как локальный / частный? - PullRequest
0 голосов
/ 13 декабря 2018

Я ищу Java API, который будет правильно определять, является ли данный IP-адрес частным или локальным.Этот код, похоже, работает для большинства адресов ipv4 / ipv6:

    boolean isLocalIp = InetAddress.getByName(ipAddr).isSiteLocalAddress() ||
                        InetAddress.getByName(ipAddr).isLinkLocalAddress() ||
                        InetAddress.getByName(ipAddr).isLoopbackAddress() ;

В частности, он идентифицирует «fec0 ::» как адрес локального / частного типа, но не идентифицирует, например, «fc00 ::"или" fd00 :: "как адреса локального / частного типа.

Просмотр этой ссылки в Википедии https://en.wikipedia.org/wiki/Private_network#IPv6:

Адресный блок fc00 :: / 7 зарезервирован IANA дляУникальные локальные адреса (ULA). [2]Они являются адресами одноадресной рассылки, но содержат префикс 40-битного случайного числа в префиксе маршрутизации, чтобы предотвратить конфликты, когда две частные сети связаны между собой.Несмотря на то, что использование IPv6-адресов уникальных локальных адресов по своей природе является локальным, оно является глобальным.

Первый определенный блок - это fd00 :: / 8, предназначенный для / 48 блоков маршрутизации, в которых пользователи могут создавать несколько подсетей,при необходимости.

Может ли кто-нибудь помочь с объяснением, если здесь есть какое-то ложное предположение (например, что "fc00 ::" или "fd00 ::" следует идентифицировать как локальный / частный адрес ipv6) илиесли есть какой-то другой Java-API, который будет правильно идентифицировать все локальные / частные IP-адреса?

Спасибо за любые отзывы / ответы!

1 Ответ

0 голосов
/ 13 декабря 2018

Может ли кто-нибудь помочь с объяснением, если здесь есть какое-то ложное предположение (например, что "fc00 ::" или "fd00 ::" должны быть определены как локальный / частный адрес ipv6)

Адреса в этих блоках не предназначены для маршрутизации за пределы одного административного домена, но термин «локальный адрес сайта» означает нечто гораздо более конкретное.Этот устаревший термин относится конкретно к блоку fec0 :: / 10.

Адреса в блоке fc00 :: / 7 являются «уникальными локальными адресами», которые не гарантируются глобально уникальными, но они не являются глобальными.link-local, потому что им разрешено маршрутизировать между разными широковещательными доменами.

или если есть какой-то другой Java-API, который будет правильно идентифицировать все локальные / частные IP-адреса?

Я кратко посмотрел на InetAddress.isAnyLocalAddress(), но его документы, похоже, не соответствуют тому, что вы пытаетесь сделать.Похоже, что в стандартной библиотеке такой метод не доступен.

...