以下の追加の関数はネットワーク接続の作成や操作に有用です。これらはいくつかのシステムでのみサポートされることに注意してください。
This function returns a list describing the network interfaces of the
machine you are using. The value is an alist whose elements have the form
(ifname . address). ifname is a string naming the
interface, address has the same form as the local-address and
remote-address arguments to make-network-process, i.e. a
vector of integers. By default both IPv4 and IPv6 addresses are returned if
possible.
オプション引数fullが非nilなら、かわりに(ifname addr bcast netmask)という形式の要素を1つ以上もつリストをリターンする。ifnameはそのインターフェースを命名する一意ではない文字列。addr、bcast、netmaskはそれぞれIPアドレス、ブロードキャストアドレス、ネットワークマスクを詳述する整数のベクター。
シンボルipv4またはipv6としてオプション引数familyを指定すると、fullの値とは独立してリターンする情報をそれぞれIPv4またはIPv6に制限する。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)という形式をもつリスト。
インターネットプロトコルアドレス。
ブロードキャストアドレス。
ネットワークマスク。
レイヤー2アドレス(たとえばイーサネットMACアドレス)。
そのインターフェースのカレントのフラグ。
この関数はIPv4の情報だけをリターンすることに注意。
この関数はネットワークアドレスのLisp表現を文字列に変換する。
5要素のベクター[a b c d
p]はIPv4アドレスa.b.c.d、およびポート番号pを表す。format-network-addressはこれを文字列"a.b.c.d:p"に変換する。
9要素のベクター[a b c d e f g
h
p]はポート番号とともにIPv6アドレスを表す。format-network-addressはこれを文字列"[a:b:c:d:e:f:g:h]:p"に変換する。
このベクターにポート番号が含まれない、またはomit-portが非nilなら結果にサフィックス:pは含まれない。
この関数はnameでホスト名の照合を行う。この名前にはASCII文字列のみを期待しており、さもなくばエラーをシグナルする。国際化されたホスト名を照合したければ、最初にnameにたいしてpuny-encode-domainを呼び出すこと。
この関数は成功時にはネットワークアドレスを表すLispのリスト(フォーマットについては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ではたとえば‘0’や‘1’が有効であるのと同様に、‘0xe3010203’や‘0343.1.2.3’のように驚くような形式も有効であることに注意(ただしIPv6では無効)。