Spec-Zone.ru › OpenJDK 21

Класс InetAddress

java.lang.Object
java.net.InetAddress
Все реализованные интерфейсы:
Serializable
Прямые известные подклассы:
Inet4Address, Inet6Address
public sealed class InetAddress extends Object implements Serializable permits Inet4Address, Inet6Address
Этот класс представляет собой адрес Интернет-протокола (IP).

Адрес IP — это 32- или 128-битовое беззнаковое число, используемое протоколом IP, протоколом более низкого уровня, на котором строятся протоколы, такие как UDP и TCP. Архитектура адресов IP определяется в RFC 790: Присвоенные номера, RFC 1918: Распределение адресов для частных сетей, RFC 2365: Администрируемые адреса IP-мультивещания и RFC 2373: Архитектура адресации IP версии 6. Экземпляр InetAddress состоит из адреса IP и, возможно, соответствующего имени хоста (в зависимости от того, был ли он построен с именем хоста или уже выполнил обратный поиск имени хоста).

Типы адресов

Описание типов адресов одноадресной и многоадресной рассылки
Тип адреса Описание
одноадресная рассылка Идентификатор одного интерфейса. Пакет, отправленный по адресу одноадресной рассылки, доставляется на интерфейс, идентифицированный этим адресом.

Адрес «не указан» — также называется локальным или адресом-«подстановкой». Он никогда не должен назначаться ни одному узлу. Он указывает на отсутствие адреса. Один из примеров его использования — в качестве назначения bind, что позволяет серверу принимать подключение клиента на любом интерфейсе, если у серверного узла несколько интерфейсов.

Адрес «не указан» не должен использоваться в качестве адреса назначения пакета IP.

Адреса «обратной петли» — это адрес, назначенный интерфейсу обратной петли. Всё, что отправляется по этому IP-адресу, циркулирует и становится IP-входом на локальном узле. Этот адрес часто используется при тестировании клиента.

многоадресная рассылка Идентификатор набора интерфейсов (обычно принадлежащих различным узлам). Пакет, отправленный по адресу многоадресной рассылки, доставляется на все интерфейсы, идентифицированные этим адресом.

Сфера действия IP-адреса

Адреса «локальной связи» предназначены для использования в адресации на одном канале связи, например, для автоматической настройки адресов, обнаружения соседей или при отсутствии маршрутизаторов.

Адреса «локальной сети» предназначены для адресации внутри сайта без необходимости глобального префикса.

Глобальные адреса уникальны в интернете.

Текстовое представление IP-адресов

Текстовое представление IP-адреса зависит от семейства адресов.

Для формата адресов IPv4 см. Inet4Address#format; для формата адресов IPv6 см. Inet6Address#format.

Существует несколько системных свойств, влияющих на использование адресов IPv4 и IPv6.

Разрешение имени хоста

Класс InetAddress предоставляет методы для преобразования имен хостов в IP-адреса и наоборот. Фактическое преобразование делегируется разрешителю InetAddress.

Преобразование имени хоста в IP-адрес сопоставляет имя хоста с IP-адресом. Для любого имени хоста возвращается соответствующий IP-адрес.

Обратный поиск имени означает, что для любого IP-адреса возвращается связанный с ним хост.

Встроенная реализация разрешителя InetAddress выполняет преобразование имен хостов в IP-адреса и наоборот с помощью сочетания информации о конфигурации локальной машины и сетевых служб именования, таких как система доменных имён (DNS) и протокол лёгкого доступа к каталогам (LDAP). Конкретные службы именования, используемые встроенным разрешителем по умолчанию, зависят от конфигурации локальной машины.

InetAddress имеет механизм поставщика услуг для разрешителей InetAddress, который позволяет использовать пользовательского разрешителя InetAddress вместо встроенной реализации. InetAddressResolverProvider — класс поставщика услуг. В его документации API подробно описан этот механизм.

Кэширование InetAddress

Класс InetAddress имеет кэш для хранения успешных и неуспешных разрешений имен хостов.

По умолчанию, при установке менеджера безопасности, для защиты от атак с подменой DNS результаты положительных разрешений имен хостов кэшируются навсегда. При отсутствии менеджера безопасности поведение по умолчанию заключается в кэшировании записей в течение конечного (зависимого от реализации) периода времени. Результат неуспешного разрешения имени хоста кэшируется очень короткий период времени (10 секунд), чтобы повысить производительность.

Если поведение по умолчанию нежелательно, можно установить системное свойство Java для задания другого значения TTL (времени жизни) для положительного кэширования. Аналогичным образом, системный администратор может настроить другое значение TTL кэша для отрицательных значений или расширить использование устаревших данных.

Три системных свойства безопасности Java контролируют значения TTL, используемые для кэширования положительных и отрицательных разрешений имен хостов:

networkaddress.cache.ttl
Указывает политику кэширования для успешных поисков имен в службе имён. Значение задаётся целым числом, обозначающим количество секунд для кэширования успешного поиска. Значение по умолчанию — кэширование в течение периода времени, специфичного для реализации.

Значение -1 обозначает «кэширование навсегда».

networkaddress.cache.stale.ttl
Указывает политику кэширования устаревших имён. Значение задаётся целым числом, обозначающим количество секунд, в течение которых устаревшие имена будут храниться в кэше. Имя считается устаревшим, если истек TTL и попытка поиска имени снова не увенчалась успехом. Это свойство полезно, если предпочтительнее использовать устаревшее имя, чем потерпеть неудачу из-за неуспешного поиска. Значение по умолчанию — кэширование в течение периода времени, специфичного для реализации.

Если значение этого свойства больше, чем «networkaddress.cache.ttl», то «networkaddress.cache.ttl» будет использоваться в качестве интервала обновления имени в кэше. Например, если это свойство установлено на 1 день, а «networkaddress.cache.ttl» — на 30 секунд, то положительный ответ будет кэширован на 1 день, но попытка обновить его будет выполняться каждые 30 секунд.

Значение 0 (ноль) или если свойство не задано, означает, что не использовать устаревшие имена. Отрицательные значения игнорируются.

networkaddress.cache.negative.ttl (по умолчанию: 10)
Указывает политику кэширования неуспешных поисков имен в службе имён. Значение задаётся целым числом, обозначающим количество секунд для кэширования неудачи неуспешных поисков.

Значение 0 обозначает «никогда не кэшировать». Значение -1 обозначает «кэшировать навсегда».

Диаграмма иерархии запечатанного класса:
Sealed class hierarchy graph for InetAddressSealed class hierarchy graph for InetAddress
С:
1.0
Внешние спецификации
  • RFC 1918: Распределение адресов для частных сетей
  • RFC 2365: Администрируемые адреса IP-мультивещания
  • RFC 2373: Архитектура адресации IP версии 6
  • RFC 790: Присвоенные номера
См. также:
  • getByAddress(byte[])
  • getByAddress(java.lang.String, byte[])
  • getAllByName(java.lang.String)
  • getByName(java.lang.String)
  • getLocalHost()
  • Сериализованная форма

Краткое описание методов

Модификатор и тип Метод Описание
boolean equals(Object obj)
Сравнивает этот объект с указанным объектом.
byte[] getAddress()
Возвращает исходный IP-адрес этого объекта InetAddress.
static InetAddress[] getAllByName(String host)
Принимая имя хоста, возвращает массив его IP-адресов, основываясь на конфигурированном системном разрешителе.
static InetAddress getByAddress(byte[] addr)
Возвращает объект InetAddress, заданный исходным IP-адресом.
static InetAddress getByAddress(String host, byte[] addr)
Создает InetAddress на основе предоставленного имени хоста и IP-адреса.
static InetAddress getByName(String host)
Определяет IP-адрес хоста по имени хоста.
String getCanonicalHostName()
Получает полное доменное имя для этого IP-адреса.
String getHostAddress()
Возвращает строковое представление IP-адреса.
String getHostName()
Получает имя хоста для этого IP-адреса.
static InetAddress getLocalHost()
Возвращает адрес локального хоста.
static InetAddress getLoopbackAddress()
Возвращает адрес обратной связи.
int hashCode()
Возвращает хэш-код для этого IP-адреса.
boolean isAnyLocalAddress()
Вспомогательная функция для проверки, является ли InetAddress адресом-маской.
boolean isLinkLocalAddress()
Вспомогательная функция для проверки, является ли InetAddress адресом локальной сети.
boolean isLoopbackAddress()
Вспомогательная функция для проверки, является ли InetAddress адресом обратной связи.
boolean isMCGlobal()
Вспомогательная функция для проверки, имеет ли многоадресная рассылка глобальный охват.
boolean isMCLinkLocal()
Вспомогательная функция для проверки, имеет ли многоадресная рассылка охват локальной сети.
boolean isMCNodeLocal()
Вспомогательная функция для проверки, имеет ли многоадресная рассылка охват узла.
boolean isMCOrgLocal()
Вспомогательная функция для проверки, имеет ли многоадресная рассылка охват организации.
boolean isMCSiteLocal()
Вспомогательная функция для проверки, имеет ли многоадресная рассылка охват сайта.
boolean isMulticastAddress()
Вспомогательная функция для проверки, является ли InetAddress многоадресным IP-адресом.
boolean isReachable(int timeout)
Проверка доступности адреса.
boolean isReachable(NetworkInterface netif, int ttl, int timeout)
Проверка доступности адреса.
boolean isSiteLocalAddress()
Вспомогательная функция для проверки, является ли InetAddress адресом локального сайта.
String toString()
Преобразует этот IP-адрес в String.

Методы, объявленные в классе java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Подробное описание методов

isMulticastAddress

public boolean isMulticastAddress()
Вспомогательная процедура для проверки, является ли InetAddress адресом IP-мультикаста.
Возвращает:
значение boolean, указывающее, является ли InetAddress адресом IP-мультикаста
С момента:
1.1

isAnyLocalAddress

public boolean isAnyLocalAddress()
Вспомогательная процедура для проверки, является ли InetAddress универсальным адресом.
Возвращает:
значение boolean, указывающее, является ли InetAddress универсальным адресом.
С момента:
1.4

isLoopbackAddress

public boolean isLoopbackAddress()
Вспомогательная процедура для проверки, является ли InetAddress адресом обратной связи.
Возвращает:
значение boolean, указывающее, является ли InetAddress адресом обратной связи; в противном случае — false.
С момента:
1.4

isLinkLocalAddress

public boolean isLinkLocalAddress()
Вспомогательная процедура для проверки, является ли InetAddress адресом локальной сети.
Возвращает:
значение boolean, указывающее, является ли InetAddress адресом локальной сети; или false, если адрес не является адресом одноадресной локальной сети.
С момента:
1.4

isSiteLocalAddress

public boolean isSiteLocalAddress()
Вспомогательная процедура для проверки, является ли InetAddress адресом локальной сети.
Возвращает:
значение boolean, указывающее, является ли InetAddress адресом локальной сети; или false, если адрес не является адресом локальной сети.
С момента:
1.4

isMCGlobal

public boolean isMCGlobal()
Вспомогательная процедура для проверки, имеет ли адрес мультипоста глобальный охват.
Возвращает:
значение boolean, указывающее, имеет ли адрес мультипоста глобальный охват; false, если охват не глобальный или это не адрес мультипоста
С момента:
1.4

isMCNodeLocal

public boolean isMCNodeLocal()
Вспомогательная процедура для проверки, имеет ли адрес мультипоста охват узла.
Возвращает:
значение boolean, указывающее, имеет ли адрес мультипоста охват узла; false, если охват не узловой или это не адрес мультипоста
С момента:
1.4

isMCLinkLocal

public boolean isMCLinkLocal()
Вспомогательная процедура для проверки, имеет ли адрес мультипоста охват локальной сети.
Возвращает:
значение boolean, указывающее, имеет ли адрес мультипоста охват локальной сети; false, если охват не локальной сети или это не адрес мультипоста
С момента:
1.4

isMCSiteLocal

public boolean isMCSiteLocal()
Вспомогательная процедура для проверки, имеет ли адрес мультипоста охват сайта.
Возвращает:
значение boolean, указывающее, имеет ли адрес мультипоста охват сайта; false, если охват не сайтовый или это не адрес мультипоста
С момента:
1.4

isMCOrgLocal

public boolean isMCOrgLocal()
Вспомогательная процедура для проверки, имеет ли адрес мультипоста охват организации.
Возвращает:
значение boolean, указывающее, имеет ли адрес мультипоста охват организации; false, если охват не организационный или это не адрес мультипоста
С момента:
1.4

isReachable

public boolean isReachable(int timeout) throws IOException
Проверяет, доступен ли этот адрес. Реализация прилагает все усилия для проверки доступности узла, но брандмауэры и конфигурация сервера могут блокировать запросы, что приводит к недоступности, в то время как некоторые определённые порты могут быть доступны. Типичная реализация использует ICMP ECHO REQUEST, если есть соответствующие привилегии, иначе она пытается установить TCP-соединение на порте 7 (Echo) узла назначения.

Значение таймаута в миллисекундах задаёт максимальное время, которое должно быть затрачено на проверку. Если операция завершается по таймауту, узел считается недоступным. Отрицательное значение приведёт к исключению IllegalArgumentException.

Параметры:
timeout - время в миллисекундах, по истечении которого вызов прерывается
Возвращает:
значение boolean, указывающее, доступен ли адрес.
Исключения:
IOException - если произошла сетевая ошибка
IllegalArgumentException - если timeout отрицательно.
С момента:
1.5

isReachable

public boolean isReachable(NetworkInterface netif, int ttl, int timeout) throws IOException
Проверяет, доступен ли этот адрес. Реализация прилагает все усилия для проверки доступности узла, но брандмауэры и конфигурация сервера могут блокировать запросы, что приводит к недоступности, в то время как некоторые определённые порты могут быть доступны. Типичная реализация использует ICMP ECHO REQUEST, если есть соответствующие привилегии, иначе она пытается установить TCP-соединение на порте 7 (Echo) узла назначения.

Параметры network interface и ttl позволяют вызывающему коду указать сетевой интерфейс, через который будет проводиться проверка, и максимальное количество хопов, которое должны пройти пакеты. Отрицательное значение для ttl приведёт к исключению IllegalArgumentException.

Значение таймаута в миллисекундах задаёт максимальное время, которое должно быть затрачено на проверку. Если операция завершается по таймауту, узел считается недоступным. Отрицательное значение приведёт к исключению IllegalArgumentException.

Параметры:
netif - сетевой интерфейс, через который будет выполняться проверка, или null для любого интерфейса
ttl - максимальное количество хопов для проверки или 0 для значения по умолчанию
timeout - время в миллисекундах, по истечении которого вызов прерывается
Возвращает:
значение boolean, указывающее, доступен ли адрес.
Исключения:
IllegalArgumentException - если timeout или ttl отрицательны.
IOException - если произошла сетевая ошибка
С момента:
1.5

getHostName

public String getHostName()
Получает имя хоста для данного IP-адреса.

Если этот InetAddress был создан с именем хоста, это имя хоста будет запомнено и возвращено; в противном случае будет произведён обратный поиск имени, и результат будет возвращён на основе конфигурированного системой резолвера. Если требуется поиск в службе имён, вызовите getCanonicalHostName.

Если есть менеджер безопасности, его метод checkConnect вызывается сначала с именем хоста и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается текстовое представление IP-адреса.

Возвращает:
имя хоста для данного IP-адреса; или, если операция не разрешена проверкой безопасности, текстовое представление IP-адреса.
См. также:
  • getCanonicalHostName()
  • SecurityManager.checkConnect(java.lang.String, int)

getCanonicalHostName

public String getCanonicalHostName()
Получает полное доменное имя (FQDN) для данного IP-адреса. Метод с наилучшими усилиями, т. е. возможно, мы не сможем вернуть FQDN в зависимости от конфигурации основной системы.

Если есть менеджер безопасности, этот метод сначала вызывает его метод checkConnect с именем хоста и -1 в качестве аргументов, чтобы проверить, разрешено ли вызывающему коду узнавать имя хоста для этого IP-адреса, т. е. подключаться к хосту. Если операция не разрешена, возвращается текстовое представление IP-адреса.

Возвращает:
полное доменное имя (FQDN) для этого IP-адреса; или, если операция не разрешена проверкой безопасности, текстовое представление IP-адреса.
С момента:
1.4
См. также:
  • SecurityManager.checkConnect(java.lang.String, int)

getAddress

public byte[] getAddress()
Возвращает сырой IP-адрес этого объекта InetAddress. Результат представлен в сетевом порядке байтов: старший байт адреса находится в getAddress()[0].
Возвращает:
сырой IP-адрес этого объекта.

getHostAddress

public String getHostAddress()
Возвращает строковое представление IP-адреса.
Возвращает:
строковое представление сырого IP-адреса.
С момента:
1.0.2

hashCode

public int hashCode()
Возвращает хэш-код для данного IP-адреса.
Переопределяет:
hashCode в классе Object
Возвращает:
значение хэш-кода для данного IP-адреса.
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(java.lang.Object)

equals

public boolean equals(Object obj)
Сравнивает этот объект с указанным объектом. Результатом является true тогда и только тогда, когда аргумент не null и представляет тот же IP-адрес, что и этот объект.

Два экземпляра InetAddress представляют один и тот же IP-адрес, если длина массивов байтов, возвращаемых getAddress, одинакова для обоих и каждый компонент массива одинаков для массивов байтов.

Overrides:
equals в классе Object
Parameters:
obj - объект для сравнения.
Returns:
true если объекты одинаковы; false в противном случае.
See Also:
  • getAddress()

toString

public String toString()
Преобразует этот IP-адрес в String. Возвращаемая строка имеет вид: имя_хоста / литеральный IP-адрес. Если имя хоста не разрешено, обратный поиск не выполняется. Часть имени хоста будет представлена пустой строкой.
Overrides:
toString в классе Object
Returns:
строковое представление этого IP-адреса.

getByAddress

public static InetAddress getByAddress(String host, byte[] addr) throws UnknownHostException
Создаёт InetAddress на основе предоставленного имени хоста и IP-адреса. Встроенный системный разрешитель не используется для проверки валидности адреса.

Имя хоста может быть именем машины, например, "www.example.com", или текстовым представлением её IP-адреса.

Никакая проверка валидности имени хоста не выполняется.

Если addr указывает на IPv4-адрес, будет возвращён экземпляр Inet4Address; в противном случае, экземпляр Inet6Address.

Массив байтов IPv4-адреса должен иметь длину 4 байта, а IPv6-адреса - 16 байт.

Parameters:
host - указанный хост
addr - исходный IP-адрес в сетевом порядке байтов
Returns:
объект InetAddress, созданный из исходного IP-адреса.
Throws:
UnknownHostException - если IP-адрес имеет неверную длину
Since:
1.4

getByName

public static InetAddress getByName(String host) throws UnknownHostException
Определяет IP-адрес хоста по его имени.

Имя хоста может быть именем машины, например, "www.example.com", или текстовым представлением её IP-адреса. Если предоставлен литерльный IP-адрес, проверяется только валидность формата адреса.

Для host, указанного в литерльном IPv6-адресе, принимается формат, определённый в RFC 2732, или литерльный формат IPv6-адреса, определённый в RFC 2373. Также поддерживаются IPv6-скопированные адреса. См. здесь для описания IPv6-скопированных адресов.

Если хост является null или host.length() равно нулю, то возвращается InetAddress, представляющий адрес петлевого интерфейса. См. RFC 3330 раздел 2 и RFC 2373 раздел 2.5.3.

Если существует менеджер безопасности, и host не null или host.length() не равно нулю, вызывается метод checkConnect менеджера безопасности с именем хоста и -1 в качестве аргументов, чтобы определить, разрешена ли операция.

Parameters:
host - указанный хост или null.
Returns:
IP-адрес для данного имени хоста.
Throws:
UnknownHostException - если не удалось найти IP-адрес для host, или если был указан scope_id для глобального IPv6-адреса.
SecurityException - если менеджер безопасности существует и его метод checkConnect не разрешает операцию
External Specifications
  • RFC 2373: Архитектура адресации IP версии 6
  • RFC 3330: Специальные IPv4-адреса

getAllByName

public static InetAddress[] getAllByName(String host) throws UnknownHostException
По заданному имени хоста возвращает массив его IP-адресов, основываясь на настройках системного разрешителя.

Имя хоста может быть именем машины, например, "www.example.com", или текстовым представлением её IP-адреса. Если предоставлен литерльный IP-адрес, проверяется только валидность формата адреса.

Для host, указанного в литерльном IPv6-адресе, принимается формат, определённый в RFC 2732, или литерльный формат IPv6-адреса, определённый в RFC 2373. Литерный IPv6-адрес также может быть квалифицирован путём добавления идентификатора скопированной зоны или scope_id. Синтаксис и использование scope_id описаны здесь.

Если хост является null или host.length() равно нулю, то возвращается InetAddress, представляющий адрес петлевого интерфейса. См. RFC 3330 раздел 2 и RFC 2373 раздел 2.5.3.

Если существует менеджер безопасности, и host не null или host.length() не равно нулю, вызывается метод checkConnect менеджера безопасности с именем хоста и -1 в качестве аргументов, чтобы определить, разрешена ли операция.

Parameters:
host - имя хоста или null.
Returns:
массив всех IP-адресов для данного имени хоста.
Throws:
UnknownHostException - если не удалось найти IP-адрес для host, или если был указан scope_id для глобального IPv6-адреса.
SecurityException - если менеджер безопасности существует и его метод checkConnect не разрешает операцию.
External Specifications
  • RFC 2373: Архитектура адресации IP версии 6
  • RFC 3330: Специальные IPv4-адреса
See Also:
  • SecurityManager.checkConnect(java.lang.String, int)

getLoopbackAddress

public static InetAddress getLoopbackAddress()
Возвращает адрес обратной связи.

Возвращаемый InetAddress будет представлять IPv4-адрес обратной связи 127.0.0.1 или IPv6-адрес обратной связи ::1. Возвращаемый IPv4-адрес обратной связи - лишь один из многих в формате 127.*.*.*

Returns:
экземпляр InetAddress для адреса обратной связи.
Since:
1.7

getByAddress

public static InetAddress getByAddress(byte[] addr) throws UnknownHostException
Возвращает объект InetAddress по исходному IP-адресу. Аргумент находится в сетевом порядке байтов: байт старшего порядка адреса находится в getAddress()[0].

Этот метод не блокируется, т.е. обратный поиск не выполняется.

Массив байтов IPv4-адреса должен иметь длину 4 байта, а IPv6-адреса - 16 байт.

Parameters:
addr - исходный IP-адрес в сетевом порядке байтов
Returns:
объект InetAddress, созданный из исходного IP-адреса.
Throws:
UnknownHostException - если IP-адрес имеет неверную длину
Since:
1.4

getLocalHost

public static InetAddress getLocalHost() throws UnknownHostException
Возвращает адрес локального хоста. Это достигается путём получения имени хоста из системы, а затем преобразования этого имени в InetAddress.

Примечание: разрешённый адрес может быть кэширован на короткий период времени.

Если существует менеджер безопасности, его метод checkConnect вызывается с именем локального хоста и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается InetAddress, представляющий адрес обратной связи.

Returns:
адрес локального хоста.
Throws:
UnknownHostException - если имя локального хоста не удалось преобразовать в адрес.
See Also:
  • SecurityManager.checkConnect(java.lang.String, int)
  • getByName(java.lang.String)

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/net/InetAddress.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API