Класс 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-адреса и, возможно, соответствующего имени хоста (в зависимости от того, был ли он создан с именем хоста или уже выполнено обратное преобразование имени хоста в IP-адрес).
Типы адресов
| Тип адреса | Описание |
|---|---|
| одноадресная рассылка | Идентификатор для одного интерфейса. Пакет, отправленный по одноадресному адресу, доставляется на интерфейс, идентифицированный этим адресом. Неопределенный адрес — также называется любым локальным или универсальным адресом. Он никогда не должен назначаться ни одному узлу. Он указывает отсутствие адреса. Одним из примеров его использования является цель bind, что позволяет серверу принимать подключение клиента на любом интерфейсе, если у сервера есть несколько интерфейсов. Неопределенный адрес не должен использоваться в качестве адреса назначения IP-пакета. Адреса петли обратной связи — это адрес, назначенный интерфейсу петли обратной связи. Всё, что отправлено по этому IP-адресу, циклически обрабатывается и становится входными данными IP на локальном хосте. Этот адрес часто используется при тестировании клиента. |
| многоадресная рассылка | Идентификатор набора интерфейсов (как правило, принадлежащих разным узлам). Пакет, отправленный по многоадресному адресу, доставляется на все интерфейсы, идентифицированные этим адресом. |
Область действия IP-адреса
Адреса локальной связи предназначены для использования в адресации на одном канале связи, например, для автоматической конфигурации адреса, обнаружения соседей или при отсутствии маршрутизаторов.
Адреса локальной сети предназначены для использования в адресации внутри сети без необходимости глобального префикса.
Глобальные адреса уникальны в интернете.
Текстовое представление IP-адресов
Текстовое представление IP-адреса зависит от семейства адресов.Для формата IPv4-адреса, пожалуйста, обратитесь к поддерживаемым текстовым представлениям IPv4-адреса; для формата IPv6-адреса, пожалуйста, обратитесь к поддерживаемым текстовым представлениям IPv6-адреса.
Существует несколько системных свойств, влияющих на использование адресов IPv4 и IPv6.
Разрешение имени хоста
Класс InetAddress предоставляет методы для разрешения имен хостов в их IP-адреса и наоборот. Фактическое разрешение делегируется разрешителю InetAddress.
Разрешение имени хоста в IP-адрес отображает имя хоста в IP-адрес. Для любого имени хоста возвращается соответствующий IP-адрес.
Обратное разрешение имени означает, что для любого IP-адреса возвращается связанный с ним хост.
Встроенная реализация разрешителя InetAddress выполняет разрешение имени хоста в IP-адрес и наоборот с помощью комбинации информации о конфигурации локальной машины и сетевых служб именования, таких как система доменных имён (DNS) и протокол лёгкого доступа к каталогам (LDAP). Конкретные службы именования, используемые встроенным разрешителем по умолчанию, зависят от конфигурации локальной машины.
InetAddress имеет механизм поставщика услуг для разрешителей InetAddress, который позволяет использовать вместо встроенной реализации пользовательского разрешителя InetAddress. InetAddressResolverProvider — это класс поставщика услуг. Его документация API содержит все подробности об этом механизме.
Кэширование InetAddress
Класс InetAddress имеет кэш для хранения успешных и неуспешных разрешений имен хостов.По умолчанию записи кэшируются на конечный (зависящий от реализации) период времени. Результат неудачного разрешения имени хоста кэшируется на очень короткий период (10 секунд) для повышения производительности.
Если поведение по умолчанию нежелательно, можно установить свойство безопасности Java на другое значение TTL (Time-to-live) для положительного кэширования. Аналогично, системный администратор может настроить другое значение 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 означает «кэшировать навсегда».
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
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 адресом локального сайта. |
static InetAddress |
ofLiteral |
Создаёт InetAddress на основе предоставленного текстового представления IP-адреса. |
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.
- Возвращает:
- имя хоста для этого IP-адреса
- См. также:
getCanonicalHostName
public String getCanonicalHostName()
Системный разрешитель будет использован для обратного поиска имени IP-адреса. Поиск может завершиться неудачей по многим причинам, включая то, что хост не зарегистрирован в службе имен. Если разрешитель не может определить полное доменное имя, этот метод возвращает текстовое представление IP-адреса.
- Возвращает:
- полное доменное имя для этого IP-адреса. Если системный разрешитель не смог определить полное доменное имя для IP-адреса, вместо него возвращается текстовое представление IP-адреса.
- С:
- 1.4
getAddress
public byte[] getAddress()
InetAddress объекта. Результат находится в сетевом порядке байтов: байт старшего порядка адреса находится в getAddress()[0].- Возвращает:
- исходный IP-адрес этого объекта.
getHostAddress
public String getHostAddress()
- Возвращает:
- исходный IP-адрес в строковом формате.
- С:
- 1.0.2
hashCode
equals
public boolean equals(Object obj)
true тогда и только тогда, когда аргумент не null и он представляет тот же IP-адрес, что и этот объект. Два экземпляра InetAddress представляют один и тот же IP-адрес, если длина массивов байтов, возвращаемых getAddress, одинакова для обоих, и каждый из компонентов массива одинаков для массивов байтов.
toString
public String toString()
String. Возвращаемая строка имеет вид: имя хоста / буквальный 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.
- Parameters:
-
host- указанный хост илиnull. - Returns:
- IP-адрес для данного имени хоста.
- Throws:
-
UnknownHostException- если не удалось найти IP-адрес дляhostили если был указан идентификатор области для глобального IPv6-адреса. - 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.
- Parameters:
-
host- имя хоста илиnull. - Returns:
- массив всех IP-адресов для данного имени хоста.
- Throws:
-
UnknownHostException- если не удалось найти IP-адрес дляhostили если был указан идентификатор области для глобального IPv6-адреса. - External Specifications
getLoopbackAddress
public static InetAddress getLoopbackAddress()
Возвращаемый InetAddress будет представлять IPv4-адрес обратной связи, 127.0.0.1, или IPv6-адрес обратной связи, ::1. Возвращаемый IPv4-адрес обратной связи - лишь один из многих в формате 127.*.*.*
- Returns:
- экземпляр InetAddress обратной связи.
- Since:
- 1.7
ofLiteral
public static InetAddress ofLiteral(String ipAddressLiteral)
InetAddress на основе предоставленного текстового представления IP-адреса. Предоставленный литерал IP-адреса сначала анализируется как литерал IPv4-адреса. Если его нельзя проанализировать как литерал IPv4-адреса, то метод пытается проанализировать его как литерал IPv6-адреса. Если ни одна попытка не увенчается успехом, выбрасывается IllegalArgumentException.
Этот метод не блокируется, т.е. обратный поиск не выполняется.
- Parameters:
-
ipAddressLiteral- текстовое представление IP-адреса. - Returns:
- объект
InetAddressбез установленного имени хоста, и созданный из предоставленного литерала IP-адреса. - Throws:
-
IllegalArgumentException- еслиipAddressLiteralнельзя проанализировать как литерал IPv4 или IPv6-адреса. -
NullPointerException- еслиipAddressLiteralявляетсяnull. - Since:
- 22
- See Also:
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. Примечание: разрешенный адрес может быть кэширован на короткий период времени.
- Returns:
- адрес локального хоста.
- Throws:
-
UnknownHostException- если имя локального хоста не удалось преобразовать в адрес. - See Also:
© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/net/InetAddress.html