Класс InetAddress
- java.lang.Object
-
- java.net.InetAddress
- Все реализованные интерфейсы:
Serializable
- Прямые известные подклассы:
-
Inet4Address,Inet6Address
public class InetAddress extends Object implements Serializable
Этот класс представляет собой адрес Интернет-протокола (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.
Разрешение имени хоста
Разрешение имени хоста в IP-адрес выполняется с помощью комбинации информации о конфигурации локальной машины и сетевых служб именования, таких как система доменных имён (DNS) и служба сетевой информации (NIS). По умолчанию используются службы именования, настроенные на локальной машине. Для любого имени хоста возвращается соответствующий IP-адрес.Обратное разрешение имени означает, что для любого IP-адреса возвращается связанный с ним хост.
Класс InetAddress предоставляет методы для разрешения имён хостов в их IP-адреса и наоборот.
Кэширование InetAddress
Класс InetAddress имеет кэш для хранения успешных и неудачных разрешений имён хостов.По умолчанию, при установке менеджера безопасности для защиты от атак с подменой DNS, результаты положительных разрешений имён хостов кэшируются навсегда. При отсутствии менеджера безопасности по умолчанию кэшируются записи на ограниченный (зависимый от реализации) период времени. Результат неудачного разрешения имени хоста кэшируется на очень короткий период времени (10 секунд) для повышения производительности.
Если поведение по умолчанию нежелательно, можно установить свойство безопасности Java на другое значение Time-to-live (TTL) для положительного кэширования. Аналогично, системный администратор может настроить другое значение TTL отрицательного кэширования при необходимости.
Два свойства безопасности Java управляют значениями TTL, используемыми для кэширования положительного и отрицательного разрешения имени хоста:
- networkaddress.cache.ttl
- Указывает политику кэширования успешных запросов к службе именования. Значение задаётся целым числом, указывающим количество секунд для кэширования успешного запроса. Значение по умолчанию - кэширование на определённый реализацией период времени.
Значение -1 означает "кэшировать навсегда".
- networkaddress.cache.negative.ttl (по умолчанию: 10)
- Указывает политику кэширования неудачных запросов к службе именования. Значение задаётся целым числом, указывающим количество секунд для кэширования ошибки неудачного запроса.
Значение 0 означает "никогда не кэшировать". Значение -1 означает "кэшировать навсегда".
- C момента:
- 1.0
- См. также:
-
getByAddress(byte[]),getByAddress(java.lang.String, byte[]),getAllByName(java.lang.String),getByName(java.lang.String),getLocalHost(), Сериализованная форма
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean | equals(Object obj) | Сравнивает этот объект с указанным объектом. |
byte[] | getAddress() | Возвращает исходный IP-адрес этого |
static InetAddress[] | getAllByName(String host) | Учитывая имя хоста, возвращает массив его IP-адресов, основанный на настроенной службе именования в системе. |
static InetAddress | getByAddress(byte[] addr) | Возвращает |
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-адрес в |
Методы, объявленные в классе 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 (Эхо) целевого хоста.
Значение таймаута в миллисекундах указывает максимальное время выполнения попытки. Если операция завершается таймаутом до получения ответа, считается, что хост недоступен. Отрицательное значение приведет к сбросу 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 (Эхо) целевого хоста.
Параметры 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()
Получает полное доменное имя для данного IP-адреса. Метод с максимальными усилиями, что означает, что мы можем не получить полное доменное имя в зависимости от конфигурации системы.
Если есть менеджер безопасности, этот метод сначала вызывает его метод checkConnect с именем хоста и -1 в качестве аргументов, чтобы проверить, разрешено ли вызывающему коду узнать имя хоста для этого IP-адреса, т.е. подключиться к хосту. Если операция не разрешена, он вернёт текстовое представление IP-адреса.
- Возвращает:
- полное доменное имя для этого 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, одинакова для обоих, и каждый из компонентов массива одинаков для массивов байтов.
- Переопределяет:
-
equalsв классеObject - Параметры:
-
obj- объект для сравнения. - Возвращает:
-
trueесли объекты идентичны;falseв противном случае. - См. также:
getAddress()
toString
public String toString()
Преобразует этот IP-адрес в String. Возвращаемая строка имеет вид: имя хоста / литеральный IP-адрес. Если имя хоста не разрешено, обратное преобразование имени службы не выполняется. Часть имени хоста будет представлена пустой строкой.
getByAddress
public static InetAddress getByAddress(String host,
byte[] addr)
throws UnknownHostException Создаёт InetAddress на основе предоставленного имени хоста и IP-адреса. Сервис имен не проверяет валидность адреса.
Имя хоста может быть именем машины, таким как "java.sun.com", или текстовым представлением её IP-адреса.
Валидация имени хоста также не выполняется.
Если addr указывает IPv4-адрес, будет возвращён экземпляр Inet4Address; в противном случае — экземпляр Inet6Address.
Массив байтов IPv4-адреса должен иметь длину 4 байта, а IPv6 — 16 байт.
- Параметры:
-
host- указанный хост -
addr- сырой IP-адрес в сетевом порядке байтов - Возвращает:
- объект InetAddress, созданный из сырого IP-адреса.
- Выбрасывает:
-
UnknownHostException- если IP-адрес имеет неверную длину - С момента:
- 1.4
getByName
public static InetAddress getByName(String host)
throws UnknownHostException Определяет IP-адрес хоста по его имени.
Имя хоста может быть именем машины, например, "java.sun.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 в качестве аргументов, чтобы определить, разрешена ли операция.
- Параметры:
-
host- указанный хост илиnull. - Возвращает:
- IP-адрес для данного имени хоста.
- Выбрасывает:
-
UnknownHostException- если IP-адрес дляhostне найден или если scope_id был указан для глобального IPv6-адреса. -
SecurityException- если менеджер безопасности существует и его метод checkConnect не разрешает операцию
getAllByName
public static InetAddress[] getAllByName(String host)
throws UnknownHostException По заданному имени хоста возвращает массив его IP-адресов, основываясь на настроенной службе имен системы.
Имя хоста может быть именем машины, например, "java.sun.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 в качестве аргументов, чтобы определить, разрешена ли операция.
- Параметры:
-
host- имя хоста илиnull. - Возвращает:
- массив всех IP-адресов для данного имени хоста.
- Выбрасывает:
-
UnknownHostException- если IP-адрес дляhostне найден или если scope_id был указан для глобального IPv6-адреса. -
SecurityException- если менеджер безопасности существует и его методcheckConnectне разрешает операцию. - См. также:
SecurityManager.checkConnect(java.lang.String, int)
getLoopbackAddress
public static InetAddress getLoopbackAddress()
Возвращает адрес локального шлюза.
Возвращаемый InetAddress будет представлять IPv4 адрес обратной связи, 127.0.0.1, или IPv6 адрес обратной связи, ::1. Возвращаемый IPv4 адрес обратной связи — только один из многих в формате 127.*.*.*
- Возвращает:
- объект InetAddress локального шлюза.
- С момента:
- 1.7
getByAddress
public static InetAddress getByAddress(byte[] addr)
throws UnknownHostException Возвращает объект InetAddress по заданному сырому IP-адресу. Аргумент находится в сетевом порядке байтов: старший байт адреса находится в getAddress()[0].
Этот метод не блокируется, т.е. обратный поиск по имени службы не выполняется.
Массив байтов для IPv4 адреса должен быть длиной 4 байта, а для IPv6 — 16 байт.
- Параметры:
-
addr- сырой IP-адрес в сетевом порядке байтов - Возвращает:
- объект InetAddress, созданный из сырого IP-адреса.
- Выбрасывает:
-
UnknownHostException- если IP-адрес имеет неверную длину - С момента:
- 1.4
getLocalHost
public static InetAddress getLocalHost()
throws UnknownHostException Возвращает адрес локального хоста. Это достигается путем получения имени хоста из системы, а затем преобразования этого имени в InetAddress.
Примечание: Результирующий адрес может кешироваться в течение короткого промежутка времени.
Если существует менеджер безопасности, его метод checkConnect вызывается с именем локального хоста и -1 в качестве аргументов, чтобы проверить разрешение операции. Если операция не разрешена, возвращается InetAddress, представляющий адрес обратной связи.
- Возвращает:
- адрес локального хоста.
- Выбрасывает:
-
UnknownHostException- если имя локального хоста не удалось преобразовать в адрес. - См. также:
-
SecurityManager.checkConnect(java.lang.String, int),getByName(java.lang.String)
© 1993, 2020, 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/11/docs/api/java.base/java/net/InetAddress.html