9.12. Функции и операторы для работы с сетевыми адресами

Типы cidr и inet, предназначенные для сетевых IP-адресов, поддерживают обычные операторы сравнения, показанные в Таблице 9.1, а также специализированные операторы и функции, показанные в Таблице 9.39 и Таблице 9.40.

Любое значение cidr можно привести к типу inet неявно, поэтому все функции, показанные выше с типом inet, также будут работать со значениями cidr. (То, что некоторые из функций описаны для типов inet и cidr в отдельности, объясняется тем, что их поведение с разными типами различается.) Кроме того, значение inet тоже можно привести к типу cidr. При этом все биты справа от сетевой маски просто обнуляются, чтобы значение стало допустимым для типа cidr.

Таблица 9.39. Операторы для работы с IP-адресами

Оператор

Описание

Пример(ы)

inet << inetboolean

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

inet '192.168.1.5' << inet '192.168.1/24't

inet '192.168.0.5' << inet '192.168.1/24'f

inet '192.168.1/24' << inet '192.168.1/24'f

inet <<= inetboolean

Первая подсеть содержится во второй или равна ей?

inet '192.168.1/24' <<= inet '192.168.1/24't

inet >> inetboolean

Первая подсеть содержит вторую подсеть и не равна ей?

inet '192.168.1/24' >> inet '192.168.1.5't

inet >>= inetboolean

Первая подсеть содержит вторую подсеть или равна ей?

inet '192.168.1/24' >>= inet '192.168.1/24't

inet && inetboolean

Одна из двух подсетей содержит другую или равна ей?

inet '192.168.1/24' && inet '192.168.1.80/28't

inet '192.168.1/24' && inet '192.168.2.0/28'f

~ inetinet

Вычисляет результат побитового НЕ.

~ inet '192.168.1.6'63.87.254.249

inet & inetinet

Вычисляет результат побитового И.

inet '192.168.1.6' & inet '0.0.0.255'0.0.0.6

inet | inetinet

Вычисляет результат побитового ИЛИ.

inet '192.168.1.6' | inet '0.0.0.255'192.168.1.255

inet + bigintinet

Добавляет смещение к адресу.

inet '192.168.1.6' + 25192.168.1.31

bigint + inetinet

Добавляет смещение к адресу.

200 + inet '::ffff:fff0:1'::ffff:255.240.0.201

inet - bigintinet

Вычитает смещение из адреса.

inet '192.168.1.43' - 36192.168.1.7

inet - inetbigint

Вычисляет разность двух адресов.

inet '192.168.1.43' - inet '192.168.1.19'24

inet '::1' - inet '::ffff:1'-4294901760


Таблица 9.40. Функции для работы с IP-адресами

Функция

Описание

Пример(ы)

abbrev ( inet ) → text

Выводит адрес в сокращённом текстовом виде. (Результат не отличается от того, что даёт функция вывода inet; «сокращённым» он является только в сравнении с явным приведением к типу text, которое по историческим причинам не убирает компонент маски сети).

abbrev(inet '10.1.0.0/32')10.1.0.0

abbrev ( cidr ) → text

Выводит адрес в сокращённом текстовом виде. (Сокращение заключается в отбрасывании полностью нулевых октетов в конце сетевой маски; другие примеры приведены в Таблице 8.22.)

abbrev(cidr '10.1.0.0/16')10.1/16

broadcast ( inet ) → inet

Вычисляет широковещательный адрес для сети.

broadcast(inet '192.168.1.5/24')192.168.1.255/​24

family ( inet ) → integer

Выдаёт семейство адреса: 4 для адресов IPv4, 6 для адресов IPv6.

family(inet '::1')6

host ( inet ) → text

Выдаёт IP-адрес в текстовом виде, опуская маску сети.

host(inet '192.168.1.0/24')192.168.1.0

hostmask ( inet ) → inet

Вычисляет маску узла для сети в заданном адресе.

hostmask(inet '192.168.23.20/30')0.0.0.3

inet_merge ( inet, inet ) → cidr

Вычисляет наименьшую сеть, содержащую обе заданные сети.

inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24')192.168.0.0/22

inet_same_family ( inet, inet ) → boolean

Проверяет, относятся ли адреса к одному семейству IP?

inet_same_family(inet '192.168.1.5/24', inet '::1')f

masklen ( inet ) → integer

Выдаёт длину маски сети в битах.

masklen(inet '192.168.1.5/24')24

netmask ( inet ) → inet

Вычисляет маску сети для заданного адреса.

netmask(inet '192.168.1.5/24')255.255.255.0

network ( inet ) → cidr

Выдаёт компонент сети для заданного адреса, обнуляя все биты справа от маски сети. (Это равнозначно приведению значения к типу cidr.)

network(inet '192.168.1.5/24')192.168.1.0/24

set_masklen ( inet, integer ) → inet

Задаёт размер маски сети для значения inet. Компонент адреса при этом не меняется.

set_masklen(inet '192.168.1.5/24', 16)192.168.1.5/16

set_masklen ( cidr, integer ) → cidr

Задаёт размер маски сети для значения cidr. Биты адреса справа от новой маски при этом обнуляются.

set_masklen(cidr '192.168.1.0/24', 16)192.168.0.0/16

text ( inet ) → text

Выдаёт несокращённый IP-адрес и размер маски в виде текста. (Такой же результат получается при явном приведении к типу text.)

text(inet '192.168.1.5')192.168.1.5/32


Подсказка

Функции abbrev, host и text предназначены в основном для вывода IP-адресов в альтернативных текстовых форматах.

Типы MAC-адресов macaddr и macaddr8 поддерживают обычные операторы сравнения, показанные в Таблице 9.1, a также специализированные функции, показанные в Таблице 9.41. Кроме того, они поддерживают битовые логические операторы: ~, & и | (НЕ, И, ИЛИ), показанные выше для IP-адресов.

Таблица 9.41. Функции для работы с MAC-адресами

Функция

Описание

Пример(ы)

trunc ( macaddr ) → macaddr

Обнуляет три последних байта адреса. Оставшийся префикс можно сопоставить с конкретным производителем сетевой карты (в Postgres Pro необходимой для этого информации нет).

trunc(macaddr '12:34:56:​78:90:ab')12:34:56:​00:00:00

trunc ( macaddr8 ) → macaddr8

Обнуляет 5 последних байт адреса. Оставшийся префикс можно сопоставить с конкретным производителем сетевой карты (в Postgres Pro необходимой для этого информации нет).

trunc(macaddr8 '12:34:56:78:90:ab:cd:ef')12:34:56:00:00:00:00:00

macaddr8_set7bit ( macaddr8 ) → macaddr8

Устанавливает в 7 бите адреса единицу, получая тем самым так называемый модифицированный адрес EUI-64 для включения в адрес IPv6.

macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef')02:34:56:ff:fe:ab:cd:ef


pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy