Эти дополнительные функции полезны для создания и работы с сетевыми соединениями. Обратите внимание, что они поддерживаются только на некоторых системах.
Эта функция возвращает список, описывающий сетевые интерфейсы
используемой машины. Значение представляет собой 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]))
Эта функция возвращает информацию о сетевом интерфейсе с именем
ifname. Значение представляет собой список вида
(addr bcast netmask hwaddr flags).
Адрес протокола Internet.
Адрес широковещательной рассылки.
Сетевая маска.
Адрес уровня 2 (например, MAC-адрес Ethernet).
Текущие флаги интерфейса.
Обратите внимание, что эта функция возвращает только информацию IPv4.
Эта функция преобразует представление сетевого адреса в 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.
Эта функция выполняет поиск имен хостов по 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).