これらの追加機能は、ネットワーク接続の作成や操作に有用です。なお、一部のシステムでのみサポートされている点にご注意ください。
この関数は、使用しているマシンのネットワークインターフェースを記述するリストを返します。戻り値はアリストであり、各要素は (ifname . address) という形式をしています。ifname
はインターフェース名を示す文字列であり、address は make-network-process の引数である local-address および remote-address
と同じ形式、すなわち整数のベクトルとなっています。デフォルトでは、可能であれば IPv4 と IPv6 の両方のアドレスが返されます。
オプション引数 full が non-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" に変換します。
ベクトルにポート番号、p が含まれていない場合、または omit-port が nil 以外である場合、結果に
:p サフィックスは含まれません。
この関数は、ASCIIのみの文字列であることが期待される name
に対してホスト名のルックアップを行い、それ以外の場合はエラーを通知します。国際化ホスト名のルックアップを行いたい場合は、まず 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においては、‘0xe3010203’や‘0343.1.2.3’、‘0’や‘1’など、意外にも有効な形式が存在する点にご注意ください(ただし、これらはIPv6では無効です)。