以下附加函数对创建和操作网络连接很有用。注意它们仅在部分系统上受支持。
该函数返回一个列表,描述当前机器的网络接口。返回值为一个关联表,元素格式为 (ifname . address)。
ifname 是表示接口名称的字符串,address 的格式与 make-network-process 的
local-address 和 remote-address 参数相同,即整数向量。
默认情况下会尽可能同时返回 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)。
互联网协议地址。
广播地址。
子网掩码。
二层地址(例如以太网 MAC 地址)。
接口当前标志位。
注意该函数仅返回 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 执行主机名解析,name 应为仅含 ASCII 的字符串,否则会抛出错误。
若需要查询国际化域名,应先对 name 调用 puny-encode-domain。
若执行成功,函数返回网络地址的 Lisp 表示形式列表(格式说明参见 see make-network-process),
否则返回 nil。在后一种情况下,函数还会记录错误信息,尽可能说明失败原因。
默认情况下,该函数会同时尝试 IPv4 和 IPv6 解析。
可选参数 family 可控制该行为,指定符号 ipv4 或 ipv6
可将解析分别限制为 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 无效)。