Класс 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 и, возможно, соответствующего имени хоста (в зависимости от того, был ли он создан с именем хоста или уже выполнена обратная резолюция имени хоста).
Типы адресов
| unicast | Идентификатор одного интерфейса. Пакет, отправленный по адресу unicast, доставляется на интерфейс, идентифицированный этим адресом. Адрес "без указания" -- Также называется любым локальным или подстановочным адресом. Его никогда нельзя назначать никакому узлу. Он указывает на отсутствие адреса. Один пример его использования — в качестве целевого адреса bind, который позволяет серверу принимать подключение клиента на любом интерфейсе, если у узла сервера несколько интерфейсов. Адрес без указания не должен использоваться в качестве целевого адреса IP-пакета. Адреса обратной связи — это адрес, назначенный интерфейсу обратной связи. Всё, что отправляется по этому IP-адресу, возвращается и становится IP-входом на локальном узле. Этот адрес часто используется при тестировании клиента. |
|---|---|
| multicast | Идентификатор набора интерфейсов (обычно принадлежащих различным узлам). Пакет, отправленный по multicast-адресу, доставляется на все интерфейсы, идентифицированные этим адресом. |
Сфера действия IP-адреса
Локальные адреса предназначены для использования для адресации на одном канале, например, для автоматической настройки адреса, обнаружения соседей или при отсутствии маршрутизаторов.
Локальные адреса сайта предназначены для использования для адресации внутри сайта без необходимости использования глобального префикса.
Глобальные адреса уникальны в Интернете.
Текстовое представление IP-адресов
Текстовое представление IP-адреса зависит от семейства адресов.Для формата адресов IPv4 см. Inet4Address#format; для формата адресов IPv6 см. Inet6Address#format.
Существует несколько системных свойств, влияющих на использование адресов IPv4 и IPv6.
Резолюция имени хоста
Резолюция имени хоста в IP-адрес выполняется с помощью комбинации информации о конфигурации локальной машины и сетевых служб именования, таких как система доменных имён (DNS) и служба сетевой информации (NIS). Используемые службы именования по умолчанию — это конфигурированные на локальной машине. Для любого имени хоста возвращается соответствующий IP-адрес.Обратная резолюция имени означает, что для любого 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 означает "кэшировать навсегда".
- С тех пор:
- JDK1.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) Возвращает объект, данный сырой 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-адрес в . |
Методы, унаследованные от класса java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait Методы
isMulticastAddress
public boolean isMulticastAddress()
Вспомогательная функция для проверки, является ли InetAddress адресом IP-мультиадресации.
- Возвращает:
- значение
boolean, указывающее, является ли InetAddress адресом IP-мультиадресации - С тех пор:
- JDK1.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()
Возвращает полное доменное имя для этого IP-адреса. Метод "лучшие усилия", что означает, что мы не сможем вернуть FQDN в зависимости от конфигурации системы.
Если существует менеджер безопасности, этот метод сначала вызывает его метод 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-адреса.
- С тех пор:
- JDK1.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, то возвращается InetAddress, представляющий адрес локального интерфейса. См. RFC 3330 раздел 2 и RFC 2373 раздел 2.5.3.
- Параметры:
-
host- указанный хост илиnull. - Возвращает:
- IP-адрес для данного имени хоста.
- Выбрасывает:
-
UnknownHostException- если IP-адрес дляhostне найден или если для глобального 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, то возвращается InetAddress, представляющий адрес локального интерфейса. См. RFC 3330 раздел 2 и RFC 2373 раздел 2.5.3.
Если существует менеджер безопасности и host не равен null, а host.length() не равен нулю, метод менеджера безопасности checkConnect вызывается с именем хоста и -1 в качестве аргументов, чтобы проверить, разрешена ли операция.
- Параметры:
-
host- имя хоста илиnull. - Возвращает:
- массив всех IP-адресов для данного имени хоста.
- Выбрасывает:
-
UnknownHostException- если IP-адрес дляhostне найден или если для глобального 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.