Класс InetAddress
- Все реализованные интерфейсы:
Serializable
- Прямые известные подклассы:
-
Inet4Address,Inet6Address
public sealed class InetAddress extends Object implements Serializable permits Inet4Address, Inet6Address
Адрес 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 обозначает «кэшировать навсегда».
- Диаграмма иерархии запечатанного класса:
- С:
- 1.0
- Внешние спецификации
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Сравнивает этот объект с указанным объектом. |
byte[] |
getAddress() |
Возвращает исходный IP-адрес этого объекта InetAddress. |
static InetAddress[] |
getAllByName |
Принимая имя хоста, возвращает массив его IP-адресов, основываясь на конфигурированном системном разрешителе. |
static InetAddress |
getByAddress |
Возвращает объект InetAddress, заданный исходным IP-адресом. |
static InetAddress |
getByAddress |
Создает InetAddress на основе предоставленного имени хоста и IP-адреса. |
static InetAddress |
getByName |
Определяет 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 |
Проверка доступности адреса. |
boolean |
isReachable |
Проверка доступности адреса. |
boolean |
isSiteLocalAddress() |
Вспомогательная функция для проверки, является ли InetAddress адресом локального сайта. |
String |
toString() |
Преобразует этот IP-адрес в String. |
Подробное описание методов
isMulticastAddress
public boolean isMulticastAddress()
- Возвращает:
- значение
boolean, указывающее, является ли InetAddress адресом IP-мультикаста - С момента:
- 1.1
isAnyLocalAddress
public boolean isAnyLocalAddress()
- Возвращает:
- значение
boolean, указывающее, является ли InetAddress универсальным адресом. - С момента:
- 1.4
isLoopbackAddress
public boolean isLoopbackAddress()
- Возвращает:
- значение
boolean, указывающее, является ли InetAddress адресом обратной связи; в противном случае — false. - С момента:
- 1.4
isLinkLocalAddress
public boolean isLinkLocalAddress()
- Возвращает:
- значение
boolean, указывающее, является ли InetAddress адресом локальной сети; или false, если адрес не является адресом одноадресной локальной сети. - С момента:
- 1.4
isSiteLocalAddress
public boolean isSiteLocalAddress()
- Возвращает:
- значение
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
Значение таймаута в миллисекундах задаёт максимальное время, которое должно быть затрачено на проверку. Если операция завершается по таймауту, узел считается недоступным. Отрицательное значение приведёт к исключению IllegalArgumentException.
- Параметры:
-
timeout- время в миллисекундах, по истечении которого вызов прерывается - Возвращает:
- значение
boolean, указывающее, доступен ли адрес. - Исключения:
-
IOException- если произошла сетевая ошибка -
IllegalArgumentException- еслиtimeoutотрицательно. - С момента:
- 1.5
isReachable
public boolean isReachable(NetworkInterface netif, int ttl, int timeout) throws IOException
Параметры network interface и ttl позволяют вызывающему коду указать сетевой интерфейс, через который будет проводиться проверка, и максимальное количество хопов, которое должны пройти пакеты. Отрицательное значение для ttl приведёт к исключению IllegalArgumentException.
Значение таймаута в миллисекундах задаёт максимальное время, которое должно быть затрачено на проверку. Если операция завершается по таймауту, узел считается недоступным. Отрицательное значение приведёт к исключению IllegalArgumentException.
- Параметры:
-
netif- сетевой интерфейс, через который будет выполняться проверка, или null для любого интерфейса -
ttl- максимальное количество хопов для проверки или 0 для значения по умолчанию -
timeout- время в миллисекундах, по истечении которого вызов прерывается - Возвращает:
- значение
boolean, указывающее, доступен ли адрес. - Исключения:
-
IllegalArgumentException- еслиtimeoutилиttlотрицательны. -
IOException- если произошла сетевая ошибка - С момента:
- 1.5
getHostName
public String getHostName()
Если этот InetAddress был создан с именем хоста, это имя хоста будет запомнено и возвращено; в противном случае будет произведён обратный поиск имени, и результат будет возвращён на основе конфигурированного системой резолвера. Если требуется поиск в службе имён, вызовите getCanonicalHostName.
Если есть менеджер безопасности, его метод checkConnect вызывается сначала с именем хоста и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается текстовое представление IP-адреса.
- Возвращает:
- имя хоста для данного IP-адреса; или, если операция не разрешена проверкой безопасности, текстовое представление IP-адреса.
- См. также:
getCanonicalHostName
public String getCanonicalHostName()
Если есть менеджер безопасности, этот метод сначала вызывает его метод checkConnect с именем хоста и -1 в качестве аргументов, чтобы проверить, разрешено ли вызывающему коду узнавать имя хоста для этого IP-адреса, т. е. подключаться к хосту. Если операция не разрешена, возвращается текстовое представление IP-адреса.
- Возвращает:
- полное доменное имя (FQDN) для этого IP-адреса; или, если операция не разрешена проверкой безопасности, текстовое представление IP-адреса.
- С момента:
- 1.4
- См. также:
getAddress
public byte[] getAddress()
InetAddress. Результат представлен в сетевом порядке байтов: старший байт адреса находится в getAddress()[0]. - Возвращает:
- сырой IP-адрес этого объекта.
getHostAddress
public String getHostAddress()
- Возвращает:
- строковое представление сырого IP-адреса.
- С момента:
- 1.0.2
hashCode
public int hashCode()
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- значение хэш-кода для данного IP-адреса.
- См. также:
equals
public boolean equals(Object obj)
true тогда и только тогда, когда аргумент не null и представляет тот же IP-адрес, что и этот объект. Два экземпляра InetAddress представляют один и тот же IP-адрес, если длина массивов байтов, возвращаемых getAddress, одинакова для обоих и каждый компонент массива одинаков для массивов байтов.
- Overrides:
-
equalsв классеObject - Parameters:
-
obj- объект для сравнения. - Returns:
-
trueесли объекты одинаковы;falseв противном случае. - See Also:
toString
public String toString()
String. Возвращаемая строка имеет вид: имя_хоста / литеральный IP-адрес. Если имя хоста не разрешено, обратный поиск не выполняется. Часть имени хоста будет представлена пустой строкой.- Overrides:
-
toStringв классеObject - Returns:
- строковое представление этого IP-адреса.
getByAddress
public static InetAddress getByAddress(String host, byte[] addr) throws UnknownHostException
Имя хоста может быть именем машины, например, "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
Имя хоста может быть именем машины, например, "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
getAllByName
public static InetAddress[] getAllByName(String host) throws UnknownHostException
Имя хоста может быть именем машины, например, "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
- See Also:
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:
© 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