Node.js v0.11.11 マニュアル & ドキュメンテーション
Table of Contents
- DNS
- dns.lookup(hostname, [family], callback)
- dns.resolve(hostname, [rrtype], callback)
- dns.resolve4(hostname, callback)
- dns.resolve6(hostname, callback)
- dns.resolveMx(hostname, callback)
- dns.resolveTxt(hostname, callback)
- dns.resolveSrv(hostname, callback)
- dns.resolveSoa(hostname, callback)
- dns.resolveNs(hostname, callback)
- dns.resolveCname(hostname, callback)
- dns.reverse(ip, callback)
- dns.getServers()
- dns.setServers(servers)
- Error codes
DNS#
Stability: 3 - Stable
このモジュールにアクセスするには require('dns')
を使用します。
dns モジュールの全てのメソッドは C-Ares を使用します。
ただし、dns.lookup
はスレッドプール上で getaddrinfo(3)
を使用します。
C-Ares は getaddrinfo
よりずっと速いものの、
他のシステムと連携するにはシステムリゾルバの方が一貫しています。
ユーザが net.connect(80, 'google.com')
または
http.get({ host: 'google.com' })
を行った時、dns.lookup
メソッドが使われます。
多数のルックアップを素早く実行したいユーザは、
C-Ares を呼び出すメソッドを使用すべきです。
これは 'www.google.com'
を解決して、返された IP アドレスを逆引きで解決する例です。
var dns = require('dns');
dns.resolve4('www.google.com', function (err, addresses) {
if (err) throw err;
console.log('addresses: ' + JSON.stringify(addresses));
addresses.forEach(function (a) {
dns.reverse(a, function (err, hostnames) {
if (err) {
throw err;
}
console.log('reverse for ' + a + ': ' + JSON.stringify(hostnames));
});
});
});
dns.lookup(hostname, [family], callback)#
ホスト名 (例 'google.com'
) を解決して最初に見つかった
A (IPv4) または AAAA (IPv6) レコードにします。
family
は整数の 4
または 6
を指定することができます。
デフォルトは null
で、IP v4 と v6 の両方をアドレスファミリーを意味します。
コールバックは引数 (err, address, family)
を持ちます。
address
引数は IP v4 または v6 アドレスを表現する文字列です。
family
引数は整数の 4 または 6 で、address
のファミリーを意味します
(この値は必ずしも最初に lookup
に渡す必要はありません)。
エラー時、err
は Error
オブジェクトで、err.code
はエラーコードです。
err.code
が 'ENOENT'
に設定されるのはホスト名が存在しない場合だけではなく、
ファイル記述子が使えないなどルックアップが失敗した場合もあることに
注意してください。
dns.resolve(hostname, [rrtype], callback)#
ホスト名 (例 'google.com'
) を解決して rrtype
で指定されたレコードタイプの配列にします。
妥当な rrtype
は 'A'
(IPV4アドレス)、'AAAA'
(IPV6アドレス)、
'MX'
(mail exchangeレコード), 'TXT'
(テキストレコード)、
'SRV'
(SRVレコード)、'PTR'
(IP を逆引きでルックアップするために使われる)、
'NS'
(ネームサーバレコード)、そして 'CNAME'
(別名レコード) です。
妥当な rrtype
は:
'A'
(IPV4 アドレス、デフォルト)'AAAA'
(IPV6 アドレス)'MX'
(mail exchange レコード)'TXT'
(テキストレコード)'SRV'
(SRV レコード)'PTR'
(IP を逆引きでルックアップするために使われる)'NS'
(ネームサーバレコード)'CNAME'
(別名レコード)'SOA'
(start of authority、権威を持つゾーンの開始レコード)
コールバックは引数 (err, addresses)
を持ちます。
addresses
の各要素の種類はレコードの種類によって決まり、
対応する後述のルックアップメソッドで記述されます。
エラー時、err
は Error
オブジェクトで、
err.errno
は後述するエラーコードのいずれかです。
dns.resolve4(hostname, callback)#
dns.resolve()
と同じですが、IPv4 アドレス (A
レコード) だけを問い合わせます。
addresses
は IPv4 アドレスの配列です (例
['74.125.79.104', '74.125.79.105', '74.125.79.106']
)
dns.resolve6(hostname, callback)#
IPv6 (AAAA
レコード) を問い合わせることを除いて dns.resolve4()
と同じです。
dns.resolveMx(hostname, callback)#
dns.resolve()
と同じですが、mail exchange (MX
レコード) だけを問い合わせます。
addresses
は MX レコードの配列で、それぞれは priority と exchange の属性を持ちます
(例 [{'priority': 10, 'exchange': 'mx.example.com'},...]
)。
dns.resolveTxt(hostname, callback)#
dns.resolve()
と同じですが、テキスト (TXT
レコード) だけを問い合わせます。
addresses
は hostname
で利用可能なテキストレコードの配列です。
(例、['v=spf1 ip4:0.0.0.0 ~all']
)
dns.resolveSrv(hostname, callback)#
dns.resolve()
と同じですが、サービスレコード (SRV
レコード) だけを問い合わせます。
addresses
は hostname
で利用可能な SRV レコードの配列です。
SRV レコードのプロパティは priority、weight、port、そして name です
(例 [{'priority': 10, {'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...]
)。
dns.resolveSoa(hostname, callback)#
dns.resolve()
と同じですが、権威を持つゾーンの開始レコード (SOA
レコード)
だけを問い合わせます。
address
は以下の構造を持つオブジェクトです。
{
nsname: 'ns.example.com',
hostmaster: 'root.example.com',
serial: 2013101809,
refresh: 10000,
retry: 2400,
expire: 604800,
minttl: 3600
}
dns.resolveNs(hostname, callback)#
dns.resolve()
と同じですが、ネームサーバレコード (NS
レコード)
だけを問い合わせます。
address
は hostname
で利用可能なネームサーバレコードの配列です
(例 ['ns1.example.com', 'ns2.example.com']
)。
dns.resolveCname(hostname, callback)#
dns.resolve()
と同じですが、別名レコード (CNAME
レコード)
だけを問い合わせます。
address
は domain
で利用可能な別名レコードの配列です
hostname
(e.g., ['bar.example.com']
)。
dns.reverse(ip, callback)#
IP アドレスからホスト名の配列へ逆引きで解決します。
コールバックは引数 (err, hostname)
を持ちます。
エラー時、err
は Error
オブジェクトで、
err.errno
は後述するエラーコードのいずれかです。
dns.getServers()#
現在解決に使用されているサーバの IP アドレスを文字列の配列で返します。
dns.setServers(servers)#
解決に使用されるサーバーの IP アドレスを文字列の配列で与えます。
もしアドレスと共にポートを指定しても、下層のライブラリがサポートしないため それらは取り除かれます。
不正なパラメータを与えると例外をスローします。
Error codes#
どの DNS 問い合わせも以下のエラーコードの一つを返します:
dns.NODATA
: DNS サーバがデータがないと応答した。dns.FORMERR
: DNS サーバが問い合わせフォーマットが不正だと主張した。dns.SERVFAIL
: DNS サーバが一般的な失敗を返した。dns.NOTFOUND
: ドメイン名が見つからない。dns.NOTIMP
: DNS サーバは要求された操作を実装していない。dns.REFUSED
: DNS サーバが問い合わせを拒否した。dns.BADQUERY
: DNS 問い合わせのフォーマットが不正。dns.BADNAME
: ホスト名のフォーマットが不正。dns.BADFAMILY
: サポートされないアドレスファミリー。dns.BADRESP
: DNS 応答のフォーマットが不正。dns.CONNREFUSED
: DNS サーバに接続できない。dns.TIMEOUT
: DNS サーバへの接続がタイムアウトした。dns.EOF
: エンドオブファイル。dns.FILE
: ファイルの読み込みがエラー。dns.NOMEM
: メモリ不足。dns.DESTRUCTION
: チャネルが壊れている。dns.BADSTR
: 文字列のフォーマットが不正。dns.BADFLAGS
: 不正なフラグが指定された。dns.NONAME
: 与えられたホスト名が数値ではない。dns.BADHINTS
: 不正なヒントフラグが指定された。dns.NOTINITIALIZED
: c-ares ライブラリが初期化されていない。dns.LOADIPHLPAPI
: iphlpapi.dll のローディングでエラー。dns.ADDRGETNETWORKPARAMS
: GetNetworkParams 関数が見つからない。dns.CANCELLED
: DNS 問い合わせがキャンセルされた。