41.18 Различные сетевые функции

Эти дополнительные функции полезны для создания и работы с сетевыми соединениями. Обратите внимание, что они поддерживаются только на некоторых системах.

Функция: network-interface-list &optional full family

Эта функция возвращает список, описывающий сетевые интерфейсы используемой машины. Значение представляет собой alist, чьи элементы имеют вид (ifname . address). ifname — это строка, имя которой присвоено интерфейсу, address имеет тот же вид, что и аргументы local-address и remote-address функции make-network-process, то есть вектор целых чисел. По умолчанию возвращаются адреса IPv4 и IPv6, если это возможно.

Необязательный аргумент full не равный nil означает, что вместо этого возвращается список из одного или нескольких элементов вида (ifname addr bcast netmask). ifname — это не уникальная строка, имя которой присвоено интерфейсу. addr, bcast и netmask — это векторы целых чисел, детализирующие IP-адрес, адрес широковещательной рассылки и сетевую маску.

Необязательный аргумент family, указанный как символ ipv4 или ipv6, ограничивает возвращаемую информацию адресами IPv4 и IPv6 соответственно, независимо от значения full. Указание ipv6, когда поддержка IPv6 недоступна, приведет к сигнализации об ошибке.

Некоторые примеры:

(network-interface-list) ⇒
(("vmnet8" .
  [172 16 76 1 0])
 ("vmnet1" .
  [172 16 206 1 0])
 ("lo0" .
  [65152 0 0 0 0 0 0 1 0])
 ("lo0" .
  [0 0 0 0 0 0 0 1 0])
 ("lo0" .
  [127 0 0 1 0]))
(network-interface-list t) ⇒
(("vmnet8"
  [172 16 76 1 0]
  [172 16 76 255 0]
  [255 255 255 0 0])
 ("vmnet1"
  [172 16 206 1 0]
  [172 16 206 255 0]
  [255 255 255 0 0])
 ("lo0"
  [65152 0 0 0 0 0 0 1 0]
  [65152 0 0 0 65535 65535 65535 65535 0]
  [65535 65535 65535 65535 0 0 0 0 0])
 ("lo0"
  [0 0 0 0 0 0 0 1 0]
  [0 0 0 0 0 0 0 1 0]
  [65535 65535 65535 65535 65535 65535 65535 65535 0])
 ("lo0"
  [127 0 0 1 0]
  [127 255 255 255 0]
  [255 0 0 0 0]))
Функция: network-interface-info ifname

Эта функция возвращает информацию о сетевом интерфейсе с именем ifname. Значение представляет собой список вида (addr bcast netmask hwaddr flags).

addr

Адрес протокола Internet.

bcast

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

netmask

Сетевая маска.

hwaddr

Адрес уровня 2 (например, MAC-адрес Ethernet).

flags

Текущие флаги интерфейса.

Обратите внимание, что эта функция возвращает только информацию IPv4.

Функция: format-network-address address &optional omit-port

Эта функция преобразует представление сетевого адреса в Lisp в строку.

Вектор из пяти элементов [a b c d p] представляет IPv4-адрес a.b.c.d и номер порта p. format-network-address преобразует это в строку "a.b.c.d:p".

Вектор из девяти элементов [a b c d e f g h p] представляет IPv6-адрес вместе с номером порта. format-network-address преобразует это в строку "[a:b:c:d:e:f:g:h]:p".

Если вектор не включает номер порта, p, или если omit-port не равен nil, результат не включает суффикс :p.

Функция: network-lookup-address-info name &optional family hints

Эта функция выполняет поиск имен хостов по name, который ожидается быть строкой только в ASCII, в противном случае она сигнализирует об ошибке. Сначала вызовите puny-encode-domain для name, если вы хотите искать интернационализированные имена хостов.

В случае успеха эта функция возвращает список представлений сетевых адресов в Lisp (см. make-network-process для описания формата), в противном случае возвращает nil. В последнем случае также регистрируется сообщение об ошибке, которое, как надеется, объяснит, что пошло не так.

По умолчанию эта функция пытается выполнить поиск как IPv4, так и IPv6. Необязательный аргумент family контролирует это поведение: указание символа ipv4 или ipv6 ограничивает поиск соответствующими адресами.

Если необязательный аргумент hints является numeric, функция рассматривает name как числовой IP-адрес (и не выполняет поиск DNS). Это можно использовать для проверки, является ли строка допустимым числовым представлением IP-адреса, или для преобразования числовой строки в ее каноническое представление. Например:

(network-lookup-address-info "127.1" 'ipv4 'numeric)
    ⇒ ([127 0 0 1 0])

(network-lookup-address-info "::1" nil 'numeric)
    ⇒ ([0 0 0 0 0 0 0 1 0])

Стоит предупредить, что существуют некоторые удивительные допустимые формы, особенно для IPv4, например, ‘0xe3010203’ и ‘0343.1.2.3’ являются допустимыми, как и ‘0’ и ‘1’ (но они недопустимы для IPv6).