Node.js v0.11.11 マニュアル & ドキュメンテーション


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 に渡す必要はありません)。

エラー時、errError オブジェクトで、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 の各要素の種類はレコードの種類によって決まり、 対応する後述のルックアップメソッドで記述されます。

エラー時、errError オブジェクトで、 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 レコード) だけを問い合わせます。 addresseshostname で利用可能なテキストレコードの配列です。 (例、['v=spf1 ip4:0.0.0.0 ~all'])

dns.resolveSrv(hostname, callback)#

dns.resolve() と同じですが、サービスレコード (SRV レコード) だけを問い合わせます。 addresseshostname で利用可能な 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 レコード) だけを問い合わせます。 addresshostname で利用可能なネームサーバレコードの配列です (例 ['ns1.example.com', 'ns2.example.com'])。

dns.resolveCname(hostname, callback)#

dns.resolve() と同じですが、別名レコード (CNAME レコード) だけを問い合わせます。 addressdomain で利用可能な別名レコードの配列です hostname (e.g., ['bar.example.com'])。

dns.reverse(ip, callback)#

IP アドレスからホスト名の配列へ逆引きで解決します。

コールバックは引数 (err, hostname) を持ちます。

エラー時、errError オブジェクトで、 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 問い合わせがキャンセルされた。