Я ищу 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-адреса?
Спасибо за любые отзывы / ответы!