DNS
[Stable: 2 - 安定版]
Stable: 2 Stability: 2 - 安定版
ソースコード: lib/dns.js
node:dns
モジュールは名前解決を可能にします。例えば、ホスト名のIPアドレスを調べるために使用します。
ドメインネームシステム (DNS) の名前が付けられていますが、名前解決に常に DNS プロトコルを使用するとは限りません。dns.lookup()
は、オペレーティングシステムの機能を使用して名前解決を実行します。ネットワーク通信を実行する必要がない場合があります。同じシステムの他のアプリケーションと同様に名前解決を実行するには、dns.lookup()
を使用します。
import dns from 'node:dns';
dns.lookup('example.org', (err, address, family) => {
console.log('address: %j family: IPv%s', address, family);
});
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
const dns = require('node:dns');
dns.lookup('example.org', (err, address, family) => {
console.log('address: %j family: IPv%s', address, family);
});
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
node:dns
モジュールの他のすべての関数は、名前解決を実行するために実際のDNSサーバーに接続します。それらは常にネットワークを使用してDNSクエリを実行します。これらの関数は、dns.lookup()
(例: /etc/hosts
)で使用されるのと同じ構成ファイルセットを使用しません。常にDNSクエリを実行し、他の名前解決機能をバイパスするには、これらの関数を使用します。
import dns from 'node:dns';
dns.resolve4('archive.org', (err, addresses) => {
if (err) throw err;
console.log(`addresses: ${JSON.stringify(addresses)}`);
addresses.forEach((a) => {
dns.reverse(a, (err, hostnames) => {
if (err) {
throw err;
}
console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);
});
});
});
const dns = require('node:dns');
dns.resolve4('archive.org', (err, addresses) => {
if (err) throw err;
console.log(`addresses: ${JSON.stringify(addresses)}`);
addresses.forEach((a) => {
dns.reverse(a, (err, hostnames) => {
if (err) {
throw err;
}
console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);
});
});
});
詳細については、実装に関する考慮事項のセクションを参照してください。
クラス: dns.Resolver
追加: v8.3.0
DNSリクエストのための独立したリゾルバー。
新しいリゾルバーを作成すると、デフォルトのサーバー設定が使用されます。resolver.setServers()
を使用してリゾルバーに使用するサーバーを設定しても、他のリゾルバーには影響しません。
import { Resolver } from 'node:dns';
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// このリクエストは、グローバル設定とは独立して、4.4.4.4のサーバーを使用します。
resolver.resolve4('example.org', (err, addresses) => {
// ...
});
const { Resolver } = require('node:dns');
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// このリクエストは、グローバル設定とは独立して、4.4.4.4のサーバーを使用します。
resolver.resolve4('example.org', (err, addresses) => {
// ...
});
node:dns
モジュールの以下のメソッドが利用可能です。
resolver.getServers()
resolver.resolve()
resolver.resolve4()
resolver.resolve6()
resolver.resolveAny()
resolver.resolveCaa()
resolver.resolveCname()
resolver.resolveMx()
resolver.resolveNaptr()
resolver.resolveNs()
resolver.resolvePtr()
resolver.resolveSoa()
resolver.resolveSrv()
resolver.resolveTxt()
resolver.reverse()
resolver.setServers()
Resolver([options])
[履歴]
バージョン | 変更点 |
---|---|
v16.7.0, v14.18.0 | options オブジェクトで tries オプションを受け入れるようになりました。 |
v12.18.3 | コンストラクタで options オブジェクトを受け入れるようになりました。唯一サポートされるオプションは timeout です。 |
v8.3.0 | 追加: v8.3.0 |
新しいリゾルバーを作成します。
options
<Object>
resolver.cancel()
追加: v8.3.0
このリゾルバーによって行われたすべての未解決のDNSクエリをキャンセルします。対応するコールバックは、コードECANCELLED
のエラーで呼び出されます。
resolver.setLocalAddress([ipv4][, ipv6])
追加: v15.1.0, v14.17.0
リゾルバーインスタンスは、指定されたIPアドレスからリクエストを送信します。これにより、プログラムは、マルチホームシステムで使用する場合にアウトバウンドインターフェースを指定できます。
v4またはv6アドレスが指定されていない場合、デフォルトに設定され、オペレーティングシステムがローカルアドレスを自動的に選択します。
リゾルバーは、IPv4 DNSサーバーにリクエストを行う場合はv4ローカルアドレスを使用し、IPv6 DNSサーバーにリクエストを行う場合はv6ローカルアドレスを使用します。解決リクエストのrrtype
は、使用されるローカルアドレスに影響を与えません。
dns.getServers()
追加: v0.11.3
- 戻り値: <string[]>
現在DNS解決用に設定されているIPアドレス文字列の配列を、RFC 5952に従ってフォーマットして返します。文字列には、カスタムポートが使用されている場合、ポートセクションが含まれます。
[
'8.8.8.8',
'2001:4860:4860::8888',
'8.8.8.8:1053',
'[2001:4860:4860::8888]:1053',
]
dns.lookup(hostname[, options], callback)
[履歴]
バージョン | 変更点 |
---|---|
v22.1.0, v20.13.0 | verbatim オプションは非推奨となり、新しいorder オプションが推奨されるようになりました。 |
v18.4.0 | node:net との互換性のため、オプションオブジェクトを渡す場合、family オプションは文字列'IPv4' または文字列'IPv6' にすることができます。 |
v18.0.0 | 無効なコールバックをcallback 引数に渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v17.0.0 | verbatim オプションのデフォルト値がtrue になりました。 |
v8.5.0 | verbatim オプションがサポートされるようになりました。 |
v1.2.0 | all オプションがサポートされるようになりました。 |
v0.1.90 | 追加: v0.1.90 |
hostname
<string>family
<integer> | <string> レコードファミリー。4
、6
、または0
である必要があります。下位互換性の理由から、'IPv4'
および'IPv6'
はそれぞれ4
および6
として解釈されます。値0
は、IPv4またはIPv6アドレスのいずれかが返されることを示します。値0
が{ all: true }
(下記参照)とともに使用される場合、システムのDNSリゾルバーに応じて、IPv4アドレスとIPv6アドレスの一方または両方が返されます。デフォルト:0
。hints
<number> 1つ以上のサポートされているgetaddrinfo
フラグ。複数のフラグは、それらの値をビット単位のOR
で渡すことができます。all
<boolean>true
の場合、コールバックは解決されたすべてのアドレスを配列で返します。それ以外の場合は、単一のアドレスを返します。デフォルト:false
。order
<string>verbatim
の場合、解決されたアドレスはソートされずに返されます。ipv4first
の場合、解決されたアドレスはIPv6アドレスの前にIPv4アドレスを配置するようにソートされます。ipv6first
の場合、解決されたアドレスはIPv4アドレスの前にIPv6アドレスを配置するようにソートされます。デフォルト:verbatim
(アドレスは並べ替えられません)。デフォルト値は、dns.setDefaultResultOrder()
または--dns-result-order
を使用して構成できます。verbatim
<boolean>true
の場合、コールバックはDNSリゾルバーが返した順序でIPv4アドレスとIPv6アドレスを受信します。false
の場合、IPv4アドレスはIPv6アドレスの前に配置されます。このオプションはorder
に移行し非推奨となります。両方が指定されている場合、order
が優先されます。新しいコードでは、order
のみを使用する必要があります。デフォルト:true
(アドレスは並べ替えられません)。デフォルト値は、dns.setDefaultResultOrder()
または--dns-result-order
を使用して構成できます。
callback
<Function>
ホスト名(例:'nodejs.org'
)を最初に見つかったA(IPv4)またはAAAA(IPv6)レコードに解決します。すべてのoption
プロパティはオプションです。options
が整数の場合、4
または6
である必要があります。options
が指定されていない場合は、IPv4アドレスまたはIPv6アドレス、あるいはその両方が見つかった場合に返されます。
all
オプションがtrue
に設定されている場合、callback
の引数は(err, addresses)
に変更され、addresses
はプロパティaddress
とfamily
を持つオブジェクトの配列になります。
エラーが発生した場合、err
はError
オブジェクトであり、err.code
はエラーコードです。ホスト名が存在しない場合だけでなく、利用可能なファイルディスクリプタがないなど、ルックアップが他の方法で失敗した場合にも、err.code
が'ENOTFOUND'
に設定されることに注意してください。
dns.lookup()
は、必ずしもDNSプロトコルと関係があるわけではありません。実装は、名前をアドレスと関連付けたり、その逆を行うことができるオペレーティングシステムの機能を使用します。この実装は、Node.jsプログラムの動作に微妙ながら重要な影響を与える可能性があります。dns.lookup()
を使用する前に、実装に関する考慮事項のセクションを参照してください。
使用例:
import dns from 'node:dns';
const options = {
family: 6,
hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
dns.lookup('example.org', options, (err, address, family) =>
console.log('address: %j family: IPv%s', address, family));
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
// When options.all is true, the result will be an Array.
options.all = true;
dns.lookup('example.org', options, (err, addresses) =>
console.log('addresses: %j', addresses));
// addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
const dns = require('node:dns');
const options = {
family: 6,
hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
dns.lookup('example.org', options, (err, address, family) =>
console.log('address: %j family: IPv%s', address, family));
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
// When options.all is true, the result will be an Array.
options.all = true;
dns.lookup('example.org', options, (err, addresses) =>
console.log('addresses: %j', addresses));
// addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
このメソッドがutil.promisify()
されたバージョンとして呼び出され、all
がtrue
に設定されていない場合、address
およびfamily
プロパティを持つObject
のPromise
を返します。
サポートされる getaddrinfo フラグ
[履歴]
バージョン | 変更 |
---|---|
v13.13.0, v12.17.0 | dns.ALL フラグのサポートが追加されました。 |
以下のフラグは、ヒントとしてdns.lookup()
に渡すことができます。
dns.ADDRCONFIG
: 返されるアドレスの種類を、システムで構成されている非ループバックアドレスの種類に制限します。たとえば、現在のシステムに少なくとも1つのIPv4アドレスが構成されている場合にのみ、IPv4アドレスが返されます。dns.V4MAPPED
: IPv6ファミリが指定されたが、IPv6アドレスが見つからなかった場合、IPv4マップされたIPv6アドレスを返します。一部のオペレーティングシステム(例:FreeBSD 10.1)ではサポートされていません。dns.ALL
:dns.V4MAPPED
が指定されている場合、解決されたIPv6アドレスだけでなく、IPv4マップされたIPv6アドレスも返します。
dns.lookupService(address, port, callback)
[履歴]
バージョン | 変更 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v0.11.14 | 追加: v0.11.14 |
address
<string>port
<number>callback
<Function>
指定された address
および port
を、オペレーティングシステムの基盤となる getnameinfo
実装を使用して、ホスト名とサービスに解決します。
address
が有効なIPアドレスでない場合、TypeError
がスローされます。 port
は数値に強制変換されます。 有効なポートでない場合、TypeError
がスローされます。
エラーが発生した場合、err
は Error
オブジェクトであり、err.code
はエラーコードです。
import dns from 'node:dns';
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
console.log(hostname, service);
// Prints: localhost ssh
});
const dns = require('node:dns');
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
console.log(hostname, service);
// Prints: localhost ssh
});
このメソッドが util.promisify()
されたバージョンとして呼び出された場合、hostname
および service
プロパティを持つ Object
の Promise
を返します。
dns.resolve(hostname[, rrtype], callback)
[History]
Version | Changes |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなく ERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v0.1.27 | Added in: v0.1.27 |
hostname
<string> 解決するホスト名。rrtype
<string> リソースレコードタイプ。デフォルト:'A'
。callback
<Function>err
<Error>records
<string[]> | <Object[]> | <Object>
DNSプロトコルを使用して、ホスト名 (例: 'nodejs.org'
) をリソースレコードの配列に解決します。 callback
関数は (err, records)
の引数を持ちます。 成功すると、records
はリソースレコードの配列になります。 個々の結果のタイプと構造は、rrtype
によって異なります。
rrtype | records に含まれるもの | 結果の型 | 短縮メソッド |
---|---|---|---|
'A' | IPv4 アドレス (デフォルト) | <string> | dns.resolve4() |
'AAAA' | IPv6 アドレス | <string> | dns.resolve6() |
'ANY' | すべてのレコード | <Object> | dns.resolveAny() |
'CAA' | CA 認証レコード | <Object> | dns.resolveCaa() |
'CNAME' | 正規名レコード | <string> | dns.resolveCname() |
'MX' | メール交換レコード | <Object> | dns.resolveMx() |
'NAPTR' | 名前権限ポインタレコード | <Object> | dns.resolveNaptr() |
'NS' | ネームサーバレコード | <string> | dns.resolveNs() |
'PTR' | ポインタレコード | <string> | dns.resolvePtr() |
'SOA' | 権威レコードの開始 | <Object> | dns.resolveSoa() |
'SRV' | サービスレコード | <Object> | dns.resolveSrv() |
'TXT' | テキストレコード | <string[]> | dns.resolveTxt() |
エラーが発生した場合、err
は Error
オブジェクトとなり、err.code
は DNS エラーコード のいずれかになります。
dns.resolve4(hostname[, options], callback)
[履歴]
Version | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v7.2.0 | このメソッドはoptions 、特にoptions.ttl の引き渡しをサポートするようになりました。 |
v0.1.16 | Added in: v0.1.16 |
hostname
<string> 解決するホスト名。options
<Object>ttl
<boolean> 各レコードの Time-To-Live 値(TTL)を取得します。true
の場合、コールバックは文字列の配列ではなく、{ address: '1.2.3.4', ttl: 60 }
オブジェクトの配列をTTLを秒単位で表して受け取ります。
callback
<Function>err
<Error>addresses
<string[]> | <Object[]>
DNS プロトコルを使用して、hostname
の IPv4 アドレス (A
レコード) を解決します。 callback
関数に渡される addresses
引数には、IPv4 アドレスの配列が含まれます (例: ['74.125.79.104', '74.125.79.105', '74.125.79.106']
)。
dns.resolve6(hostname[, options], callback)
[履歴]
Version | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v7.2.0 | このメソッドはoptions 、特にoptions.ttl の引き渡しをサポートするようになりました。 |
v0.1.16 | Added in: v0.1.16 |
hostname
<string> 解決するホスト名。options
<Object>ttl
<boolean> 各レコードの Time-To-Live 値(TTL)を取得します。true
の場合、コールバックは文字列の配列ではなく、{ address: '0:1:2:3:4:5:6:7', ttl: 60 }
オブジェクトの配列をTTLを秒単位で表して受け取ります。
callback
<Function>err
<Error>addresses
<string[]> | <Object[]>
DNS プロトコルを使用して、hostname
の IPv6 アドレス (AAAA
レコード) を解決します。 callback
関数に渡される addresses
引数には、IPv6 アドレスの配列が含まれます。
dns.resolveAny(hostname, callback)
[History]
バージョン | 変更 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK の代わりに ERR_INVALID_ARG_TYPE がスローされるようになりました。 |
hostname
<string>callback
<Function>err
<Error>ret
<Object[]>
DNSプロトコルを使用して、すべてのレコード(ANY
または*
クエリとも呼ばれます)を解決します。callback
関数に渡されるret
引数は、さまざまなタイプのレコードを含む配列になります。各オブジェクトには、現在のレコードのタイプを示す type
プロパティがあります。また、type
によって、オブジェクトに追加のプロパティが存在します。
タイプ | プロパティ |
---|---|
'A' | address / ttl |
'AAAA' | address / ttl |
'CNAME' | value |
'MX' | dns.resolveMx() を参照してください。 |
'NAPTR' | dns.resolveNaptr() を参照してください。 |
'NS' | value |
'PTR' | value |
'SOA' | dns.resolveSoa() を参照してください。 |
'SRV' | dns.resolveSrv() を参照してください。 |
'TXT' | このタイプのレコードには、dns.resolveTxt() を参照する entries という配列プロパティが含まれています。例:{ entries: ['...'], type: 'TXT' } |
以下は、コールバックに渡される ret
オブジェクトの例です。
[ { type: 'A', address: '127.0.0.1', ttl: 299 },
{ type: 'CNAME', value: 'example.com' },
{ type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
{ type: 'NS', value: 'ns1.example.com' },
{ type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
{ type: 'SOA',
nsname: 'ns1.example.com',
hostmaster: 'admin.example.com',
serial: 156696742,
refresh: 900,
retry: 900,
expire: 1800,
minttl: 60 } ]
DNSサーバのオペレーターは、ANY
クエリに応答しないことを選択できます。dns.resolve4()
, dns.resolveMx()
などの個々のメソッドを呼び出す方が良い場合があります。詳細については、RFC 8482 を参照してください。
dns.resolveCname(hostname, callback)
[History]
Version | Changes |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなく ERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v0.3.2 | Added in: v0.3.2 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
DNSプロトコルを使用して、hostname
の CNAME
レコードを解決します。callback
関数に渡される addresses
引数には、hostname
で利用可能な正規名レコードの配列が含まれます (例: ['bar.example.com']
)。
dns.resolveCaa(hostname, callback)
[History]
Version | Changes |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなく ERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v15.0.0, v14.17.0 | Added in: v15.0.0, v14.17.0 |
hostname
<string>callback
<Function>err
<Error>records
<Object[]>
DNSプロトコルを使用して、hostname
の CAA
レコードを解決します。callback
関数に渡される addresses
引数には、hostname
で利用可能な認証局承認レコードの配列が含まれます (例: [{critical: 0, iodef: 'mailto:[email protected]'}, {critical: 128, issue: 'pki.example.com'}]
)。
dns.resolveMx(hostname, callback)
[History]
Version | Changes |
---|---|
v18.0.0 | callback 引数への無効なコールバックの渡しは、ERR_INVALID_CALLBACK の代わりにERR_INVALID_ARG_TYPE をスローするようになりました。 |
v0.1.27 | Added in: v0.1.27 |
hostname
<string>callback
<Function>err
<Error>addresses
<Object[]>
DNSプロトコルを使用して、hostname
のメール交換レコード(MX
レコード)を解決します。 callback
関数に渡されるaddresses
引数には、priority
とexchange
プロパティの両方を含むオブジェクトの配列が含まれます(例:[{priority: 10, exchange: 'mx.example.com'}, ...]
)。
dns.resolveNaptr(hostname, callback)
[History]
Version | Changes |
---|---|
v18.0.0 | callback 引数への無効なコールバックの渡しは、ERR_INVALID_CALLBACK の代わりにERR_INVALID_ARG_TYPE をスローするようになりました。 |
v0.9.12 | Added in: v0.9.12 |
hostname
<string>callback
<Function>err
<Error>addresses
<Object[]>
DNSプロトコルを使用して、hostname
の正規表現ベースのレコード(NAPTR
レコード)を解決します。 callback
関数に渡されるaddresses
引数には、次のプロパティを持つオブジェクトの配列が含まれます。
flags
service
regexp
replacement
order
preference
{
flags: 's',
service: 'SIP+D2U',
regexp: '',
replacement: '_sip._udp.example.com',
order: 30,
preference: 100
}
dns.resolveNs(hostname, callback)
[History]
Version | Changes |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE をスローするようになりました。 |
v0.1.90 | Added in: v0.1.90 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
DNSプロトコルを使用して、hostname
の名前サーバレコード(NS
レコード)を解決します。callback
関数に渡されるaddresses
引数には、hostname
で利用可能な名前サーバレコードの配列が含まれます(例:['ns1.example.com', 'ns2.example.com']
)。
dns.resolvePtr(hostname, callback)
[History]
Version | Changes |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE をスローするようになりました。 |
v6.0.0 | Added in: v6.0.0 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
DNSプロトコルを使用して、hostname
のポインタレコード(PTR
レコード)を解決します。callback
関数に渡されるaddresses
引数は、応答レコードを含む文字列の配列になります。
dns.resolveSoa(hostname, callback)
[History]
Version | Changes |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE をスローするようになりました。 |
v0.11.10 | Added in: v0.11.10 |
hostname
<string>callback
<Function>
DNSプロトコルを使用して、hostname
の権威の開始レコード(SOA
レコード)を解決します。callback
関数に渡されるaddress
引数は、次のプロパティを持つオブジェクトになります。
nsname
hostmaster
serial
refresh
retry
expire
minttl
{
nsname: 'ns.example.com',
hostmaster: 'root.example.com',
serial: 2013101809,
refresh: 10000,
retry: 2400,
expire: 604800,
minttl: 3600
}
dns.resolveSrv(hostname, callback)
[履歴]
バージョン | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなく ERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v0.1.27 | 追加: v0.1.27 |
hostname
<string>callback
<Function>err
<Error>addresses
<Object[]>
DNSプロトコルを使用して、hostname
のサービスレコード(SRV
レコード)を解決します。callback
関数に渡される addresses
引数は、次のプロパティを持つオブジェクトの配列になります。
priority
weight
port
name
{
priority: 10,
weight: 5,
port: 21223,
name: 'service.example.com'
}
dns.resolveTxt(hostname, callback)
[履歴]
バージョン | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなく ERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v0.1.27 | 追加: v0.1.27 |
hostname
<string>callback
<Function>err
<Error>records
<string[][]>
DNSプロトコルを使用して、hostname
のテキストクエリ(TXT
レコード)を解決します。callback
関数に渡される records
引数は、hostname
で利用可能なテキストレコードの2次元配列です(例:[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]
)。各サブ配列には、1つのレコードのTXTチャンクが含まれています。ユースケースに応じて、これらを結合することも、個別に処理することもできます。
dns.reverse(ip, callback)
Added in: v0.1.16
ip
<string>callback
<Function>err
<Error>hostnames
<string[]>
IPv4またはIPv6アドレスをホスト名の配列に解決する逆引きDNSクエリを実行します。
エラーが発生した場合、err
はError
オブジェクトで、err.code
はDNSエラーコードのいずれかです。
dns.setDefaultResultOrder(order)
[履歴]
バージョン | 変更点 |
---|---|
v22.1.0, v20.13.0 | ipv6first 値がサポートされるようになりました。 |
v17.0.0 | デフォルト値を verbatim に変更しました。 |
v16.4.0, v14.18.0 | Added in: v16.4.0, v14.18.0 |
order
<string> は、'ipv4first'
、'ipv6first'
、または'verbatim'
である必要があります。
dns.lookup()
および dnsPromises.lookup()
の order
のデフォルト値を設定します。値は次のいずれかになります。
ipv4first
: デフォルトのorder
をipv4first
に設定します。ipv6first
: デフォルトのorder
をipv6first
に設定します。verbatim
: デフォルトのorder
をverbatim
に設定します。
デフォルトは verbatim
であり、dns.setDefaultResultOrder()
は --dns-result-order
よりも優先度が高くなります。ワーカー スレッド を使用する場合、メイン スレッドからの dns.setDefaultResultOrder()
はワーカーのデフォルトの DNS 順序には影響しません。
dns.getDefaultResultOrder()
[履歴]
バージョン | 変更点 |
---|---|
v22.1.0, v20.13.0 | ipv6first 値がサポートされるようになりました。 |
v20.1.0, v18.17.0 | Added in: v20.1.0, v18.17.0 |
dns.lookup()
および dnsPromises.lookup()
の order
のデフォルト値を取得します。値は次のいずれかになります。
ipv4first
:order
のデフォルトがipv4first
である場合。ipv6first
:order
のデフォルトがipv6first
である場合。verbatim
:order
のデフォルトがverbatim
である場合。
dns.setServers(servers)
追加: v0.11.3
servers
<string[]> RFC 5952形式のアドレスの配列
DNS解決の実行時に使用するサーバーのIPアドレスとポートを設定します。servers
引数は、RFC 5952形式のアドレスの配列です。ポートがIANAのデフォルトDNSポート(53)である場合、省略できます。
dns.setServers([
'8.8.8.8',
'[2001:4860:4860::8888]',
'8.8.8.8:1053',
'[2001:4860:4860::8888]:1053',
]);
無効なアドレスが指定された場合、エラーがスローされます。
dns.setServers()
メソッドは、DNSクエリが進行中の場合は呼び出さないでください。
dns.setServers()
メソッドは、dns.resolve()
、dns.resolve*()
、およびdns.reverse()
にのみ影響します(特に、dns.lookup()
には影響しません)。
このメソッドは、resolve.confによく似た働きをします。つまり、提供された最初のサーバーでの解決を試みた結果、NOTFOUND
エラーが発生した場合、resolve()
メソッドは、提供された後続のサーバーでの解決を試みません。フォールバックDNSサーバーは、以前のサーバーがタイムアウトするか、その他のエラーが発生した場合にのみ使用されます。
DNS promises API
[履歴]
バージョン | 変更点 |
---|---|
v15.0.0 | require('dns/promises') として公開。 |
v11.14.0, v10.17.0 | このAPIは実験的ではなくなりました。 |
v10.6.0 | 追加: v10.6.0 |
dns.promises
APIは、コールバックを使用する代わりにPromise
オブジェクトを返す、代替の非同期DNSメソッドのセットを提供します。APIには、require('node:dns').promises
またはrequire('node:dns/promises')
を介してアクセスできます。
クラス: dnsPromises.Resolver
追加: v10.6.0
DNSリクエストのための独立したリゾルバー。
新しいリゾルバーを作成すると、デフォルトのサーバー設定が使用されます。resolver.setServers()
を使用してリゾルバーに使用するサーバーを設定しても、他のリゾルバーには影響しません。
import { Resolver } from 'node:dns/promises';
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// このリクエストは、グローバル設定とは無関係に、4.4.4.4のサーバーを使用します。
const addresses = await resolver.resolve4('example.org');
const { Resolver } = require('node:dns').promises;
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// このリクエストは、グローバル設定とは無関係に、4.4.4.4のサーバーを使用します。
resolver.resolve4('example.org').then((addresses) => {
// ...
});
// または、同じコードをasync-awaitスタイルで記述できます。
(async function() {
const addresses = await resolver.resolve4('example.org');
})();
dnsPromises
APIの次のメソッドが利用可能です。
resolver.getServers()
resolver.resolve()
resolver.resolve4()
resolver.resolve6()
resolver.resolveAny()
resolver.resolveCaa()
resolver.resolveCname()
resolver.resolveMx()
resolver.resolveNaptr()
resolver.resolveNs()
resolver.resolvePtr()
resolver.resolveSoa()
resolver.resolveSrv()
resolver.resolveTxt()
resolver.reverse()
resolver.setServers()
resolver.cancel()
追加: v15.3.0, v14.17.0
このリゾルバーによって行われた未処理の DNS クエリをすべてキャンセルします。対応する Promise は、コード ECANCELLED
のエラーで reject されます。
dnsPromises.getServers()
追加: v10.6.0
- 戻り値: <string[]>
現在 DNS 解決に設定されている IP アドレスの文字列の配列を、RFC 5952 に従ってフォーマットして返します。カスタムポートが使用されている場合、文字列にはポートセクションが含まれます。
[
'8.8.8.8',
'2001:4860:4860::8888',
'8.8.8.8:1053',
'[2001:4860:4860::8888]:1053',
]
dnsPromises.lookup(hostname[, options])
[履歴]
バージョン | 変更点 |
---|---|
v22.1.0, v20.13.0 | verbatim オプションは非推奨となり、新しい order オプションが推奨されるようになりました。 |
v10.6.0 | 追加: v10.6.0 |
hostname
<string>options
<integer> | <Object>family
<integer> レコードファミリ。4
、6
、または0
である必要があります。 値0
は、IPv4 または IPv6 アドレスのいずれかが返されることを示します。 値0
が{ all: true }
(下記参照) と共に使用される場合、システムの DNS リゾルバーに応じて、IPv4 と IPv6 アドレスのいずれかまたは両方が返されます。 デフォルト:0
。hints
<number> 1 つ以上の サポートされているgetaddrinfo
フラグ。 複数のフラグを渡すには、それらの値をビット単位でOR
します。all
<boolean>true
の場合、Promise
は配列内のすべてのアドレスで解決されます。 それ以外の場合は、単一のアドレスを返します。 デフォルト:false
。order
<string>verbatim
の場合、Promise
は DNS リゾルバーが返した順序で IPv4 および IPv6 アドレスで解決されます。ipv4first
の場合、IPv4 アドレスは IPv6 アドレスの前に配置されます。ipv6first
の場合、IPv6 アドレスは IPv4 アドレスの前に配置されます。 デフォルト:verbatim
(アドレスは並べ替えられません)。 デフォルト値は、dns.setDefaultResultOrder()
または--dns-result-order
を使用して構成できます。 新しいコードでは、{ order: 'verbatim' }
を使用する必要があります。verbatim
<boolean>true
の場合、Promise
は DNS リゾルバーが返した順序で IPv4 および IPv6 アドレスで解決されます。false
の場合、IPv4 アドレスは IPv6 アドレスの前に配置されます。 このオプションは非推奨となり、order
が推奨されるようになります。 両方が指定されている場合、order
の方が優先されます。 新しいコードでは、order
のみを使用する必要があります。 デフォルト: 現在はfalse
(アドレスは並べ替えられます) ですが、そう遠くない将来に変更される予定です。 デフォルト値は、dns.setDefaultResultOrder()
または--dns-result-order
を使用して構成できます。
ホスト名 (例: 'nodejs.org'
) を最初に見つかった A (IPv4) または AAAA (IPv6) レコードに解決します。 すべての option
プロパティはオプションです。 options
が整数の場合、4
または 6
である必要があります。options
が提供されていない場合は、IPv4 または IPv6 アドレス、またはその両方が見つかった場合に返されます。
all
オプションが true
に設定されている場合、Promise
は addresses
が address
および family
プロパティを持つオブジェクトの配列である状態で解決されます。
エラーが発生した場合、Promise
は Error
オブジェクトで reject されます。ここで、err.code
はエラーコードです。 ホスト名が存在しない場合だけでなく、使用可能なファイル記述子がないなど、ルックアップが他の方法で失敗した場合にも、err.code
が 'ENOTFOUND'
に設定されることに注意してください。
dnsPromises.lookup()
は、必ずしも DNS プロトコルと何らかの関係があるとは限りません。 この実装では、名前をアドレスに関連付けたり、その逆を行ったりできるオペレーティングシステムの機能を使用します。 この実装は、Node.js プログラムの動作に微妙ではあるものの重要な影響を与える可能性があります。 dnsPromises.lookup()
を使用する前に、実装に関する考慮事項のセクションを参照してください。
使用例:
import dns from 'node:dns';
const dnsPromises = dns.promises;
const options = {
family: 6,
hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
await dnsPromises.lookup('example.org', options).then((result) => {
console.log('address: %j family: IPv%s', result.address, result.family);
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
});
// When options.all is true, the result will be an Array.
options.all = true;
await dnsPromises.lookup('example.org', options).then((result) => {
console.log('addresses: %j', result);
// addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
});
const dns = require('node:dns');
const dnsPromises = dns.promises;
const options = {
family: 6,
hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
dnsPromises.lookup('example.org', options).then((result) => {
console.log('address: %j family: IPv%s', result.address, result.family);
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
});
// When options.all is true, the result will be an Array.
options.all = true;
dnsPromises.lookup('example.org', options).then((result) => {
console.log('addresses: %j', result);
// addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
});
dnsPromises.lookupService(address, port)
Added in: v10.6.0
オペレーティングシステムの基盤となる getnameinfo
実装を使用して、指定された address
と port
をホスト名とサービスに解決します。
address
が有効なIPアドレスでない場合、TypeError
がスローされます。port
は数値に強制変換されます。それが有効なポートでない場合、TypeError
がスローされます。
エラーが発生した場合、Promise
は Error
オブジェクトで拒否され、err.code
はエラーコードになります。
import dnsPromises from 'node:dns/promises';
const result = await dnsPromises.lookupService('127.0.0.1', 22);
console.log(result.hostname, result.service); // Prints: localhost ssh
const dnsPromises = require('node:dns').promises;
dnsPromises.lookupService('127.0.0.1', 22).then((result) => {
console.log(result.hostname, result.service);
// Prints: localhost ssh
});
dnsPromises.resolve(hostname[, rrtype])
Added in: v10.6.0
DNSプロトコルを使用して、ホスト名(例:'nodejs.org'
)をリソースレコードの配列に解決します。成功すると、Promise
はリソースレコードの配列で解決されます。個々の結果の型と構造は、rrtype
に基づいて異なります。
rrtype | records に含まれるもの | 結果の型 | 短縮メソッド |
---|---|---|---|
'A' | IPv4アドレス(デフォルト) | <string> | dnsPromises.resolve4() |
'AAAA' | IPv6アドレス | <string> | dnsPromises.resolve6() |
'ANY' | 全てのレコード | <Object> | dnsPromises.resolveAny() |
'CAA' | CA 認証レコード | <Object> | dnsPromises.resolveCaa() |
'CNAME' | 正規名レコード | <string> | dnsPromises.resolveCname() |
'MX' | メール交換レコード | <Object> | dnsPromises.resolveMx() |
'NAPTR' | 名前権威ポインターレコード | <Object> | dnsPromises.resolveNaptr() |
'NS' | ネームサーバーレコード | <string> | dnsPromises.resolveNs() |
'PTR' | ポインターレコード | <string> | dnsPromises.resolvePtr() |
'SOA' | 権威レコードの開始 | <Object> | dnsPromises.resolveSoa() |
'SRV' | サービスレコード | <Object> | dnsPromises.resolveSrv() |
'TXT' | テキストレコード | <string[]> | dnsPromises.resolveTxt() |
エラーが発生した場合、Promise
は Error
オブジェクトで拒否され、err.code
は DNSエラーコード のいずれかになります。
dnsPromises.resolve4(hostname[, options])
Added in: v10.6.0
hostname
<string> 解決するホスト名。options
<Object>ttl
<boolean> 各レコードの Time-To-Live 値(TTL)を取得します。true
の場合、Promise
は文字列の配列ではなく、{ address: '1.2.3.4', ttl: 60 }
オブジェクトの配列で解決されます。TTL は秒単位で表現されます。
DNSプロトコルを使用して、hostname
の IPv4 アドレス(A
レコード)を解決します。 成功すると、Promise
は IPv4 アドレスの配列(例:['74.125.79.104', '74.125.79.105', '74.125.79.106']
)で解決されます。
dnsPromises.resolve6(hostname[, options])
Added in: v10.6.0
hostname
<string> 解決するホスト名。options
<Object>ttl
<boolean> 各レコードの Time-To-Live 値(TTL)を取得します。true
の場合、Promise
は文字列の配列ではなく、{ address: '0:1:2:3:4:5:6:7', ttl: 60 }
オブジェクトの配列で解決されます。TTL は秒単位で表現されます。
DNSプロトコルを使用して、hostname
の IPv6 アドレス(AAAA
レコード)を解決します。 成功すると、Promise
は IPv6 アドレスの配列で解決されます。
dnsPromises.resolveAny(hostname)
Added in: v10.6.0
hostname
<string>
DNSプロトコルを使用して、すべてのレコード(ANY
または *
クエリとも呼ばれます)を解決します。 成功すると、Promise
はさまざまな型のレコードを含む配列で解決されます。 各オブジェクトには、現在のレコードの型を示す type
プロパティがあります。 また、type
に応じて、オブジェクトに追加のプロパティが存在します。
Type | Properties |
---|---|
'A' | address / ttl |
'AAAA' | address / ttl |
'CNAME' | value |
'MX' | dnsPromises.resolveMx() を参照 |
'NAPTR' | dnsPromises.resolveNaptr() を参照 |
'NS' | value |
'PTR' | value |
'SOA' | dnsPromises.resolveSoa() を参照 |
'SRV' | dnsPromises.resolveSrv() を参照 |
'TXT' | このタイプのレコードには entries という配列プロパティが含まれており、dnsPromises.resolveTxt() を参照します。たとえば、{ entries: ['...'], type: 'TXT' } |
結果オブジェクトの例を次に示します。 |
[ { type: 'A', address: '127.0.0.1', ttl: 299 },
{ type: 'CNAME', value: 'example.com' },
{ type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
{ type: 'NS', value: 'ns1.example.com' },
{ type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
{ type: 'SOA',
nsname: 'ns1.example.com',
hostmaster: 'admin.example.com',
serial: 156696742,
refresh: 900,
retry: 900,
expire: 1800,
minttl: 60 } ]
dnsPromises.resolveCaa(hostname)
Added in: v15.0.0, v14.17.0
hostname
<string>
DNSプロトコルを使用して、hostname
の CAA
レコードを解決します。成功すると、Promise
は hostname
で利用可能な認証局承認レコードを含むオブジェクトの配列で解決されます(例: [{critical: 0, iodef: 'mailto:[email protected]'},{critical: 128, issue: 'pki.example.com'}]
)。
dnsPromises.resolveCname(hostname)
Added in: v10.6.0
hostname
<string>
DNSプロトコルを使用して、hostname
の CNAME
レコードを解決します。成功すると、Promise
は hostname
で利用可能な正規名レコードの配列で解決されます(例: ['bar.example.com']
)。
dnsPromises.resolveMx(hostname)
Added in: v10.6.0
hostname
<string>
DNSプロトコルを使用して、hostname
のメール交換レコード(MX
レコード)を解決します。成功すると、Promise
は priority
と exchange
プロパティの両方を含むオブジェクトの配列で解決されます(例: [{priority: 10, exchange: 'mx.example.com'}, ...]
)。
dnsPromises.resolveNaptr(hostname)
Added in: v10.6.0
hostname
<string>
DNSプロトコルを使用して、hostname
の正規表現ベースのレコード(NAPTR
レコード)を解決します。成功すると、Promise
は以下のプロパティを持つオブジェクトの配列で解決されます。
flags
service
regexp
replacement
order
preference
{
flags: 's',
service: 'SIP+D2U',
regexp: '',
replacement: '_sip._udp.example.com',
order: 30,
preference: 100
}
dnsPromises.resolveNs(hostname)
Added in: v10.6.0
hostname
<string>
DNSプロトコルを使用して、hostname
のネームサーバーレコード(NS
レコード)を解決します。成功すると、Promise
は hostname
で利用可能なネームサーバーレコードの配列で解決されます(例: ['ns1.example.com', 'ns2.example.com']
)。
dnsPromises.resolvePtr(hostname)
Added in: v10.6.0
hostname
<string>
DNSプロトコルを使用して、hostname
のポインターレコード(PTR
レコード)を解決します。成功すると、応答レコードを含む文字列の配列で Promise
が解決されます。
dnsPromises.resolveSoa(hostname)
Added in: v10.6.0
hostname
<string>
DNSプロトコルを使用して、hostname
の権威レコードの開始(SOA
レコード)を解決します。成功すると、Promise
は次のプロパティを持つオブジェクトで解決されます。
nsname
hostmaster
serial
refresh
retry
expire
minttl
{
nsname: 'ns.example.com',
hostmaster: 'root.example.com',
serial: 2013101809,
refresh: 10000,
retry: 2400,
expire: 604800,
minttl: 3600
}
dnsPromises.resolveSrv(hostname)
Added in: v10.6.0
hostname
<string>
DNSプロトコルを使用して、hostname
のサービスレコード(SRV
レコード)を解決します。成功すると、Promise
は次のプロパティを持つオブジェクトの配列で解決されます。
priority
weight
port
name
{
priority: 10,
weight: 5,
port: 21223,
name: 'service.example.com'
}
dnsPromises.resolveTxt(hostname)
Added in: v10.6.0
hostname
<string>
DNSプロトコルを使用して、hostname
のテキストクエリ(TXT
レコード)を解決します。成功すると、Promise
は hostname
で利用可能なテキストレコードの二次元配列で解決されます(例:[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]
)。各サブ配列には、1つのレコードの TXT チャンクが含まれています。ユースケースに応じて、これらを結合するか、個別に扱うことができます。
dnsPromises.reverse(ip)
追加: v10.6.0
ip
<string>
IPv4またはIPv6アドレスをホスト名の配列に解決する逆引きDNSクエリを実行します。
エラーが発生した場合、Promise
はError
オブジェクトで拒否され、err.code
はDNSエラーコードのいずれかになります。
dnsPromises.setDefaultResultOrder(order)
[履歴]
バージョン | 変更点 |
---|---|
v22.1.0, v20.13.0 | ipv6first 値がサポートされるようになりました。 |
v17.0.0 | デフォルト値をverbatim に変更しました。 |
v16.4.0, v14.18.0 | 追加: v16.4.0, v14.18.0 |
order
<string> は'ipv4first'
、'ipv6first'
、または'verbatim'
である必要があります。
dns.lookup()
および dnsPromises.lookup()
の order
のデフォルト値を設定します。 値は次のいずれかになります。
ipv4first
: デフォルトのorder
をipv4first
に設定します。ipv6first
: デフォルトのorder
をipv6first
に設定します。verbatim
: デフォルトのorder
をverbatim
に設定します。
デフォルトは verbatim
で、dnsPromises.setDefaultResultOrder()
は --dns-result-order
よりも優先度が高くなっています。ワーカー スレッド を使用する場合、メインスレッドからの dnsPromises.setDefaultResultOrder()
はワーカーのデフォルトの DNS 順序には影響しません。
dnsPromises.getDefaultResultOrder()
追加: v20.1.0, v18.17.0
dnsOrder
の値を取得します。
dnsPromises.setServers(servers)
追加: v10.6.0
servers
<string[]> RFC 5952 形式のアドレスの配列
DNS解決を実行するときに使用されるサーバーのIPアドレスとポートを設定します。servers
引数はRFC 5952形式のアドレスの配列です。ポートがIANAのデフォルトDNSポート(53)の場合、省略できます。
dnsPromises.setServers([
'8.8.8.8',
'[2001:4860:4860::8888]',
'8.8.8.8:1053',
'[2001:4860:4860::8888]:1053',
]);
無効なアドレスが指定された場合、エラーがスローされます。
dnsPromises.setServers()
メソッドは、DNSクエリの進行中に呼び出すことはできません。
このメソッドは、resolve.confと非常によく似ています。つまり、最初に指定されたサーバーで解決しようとした結果、NOTFOUND
エラーが発生した場合、resolve()
メソッドは、後続のサーバーで解決しようとしません。フォールバックDNSサーバーは、以前のサーバーがタイムアウトするか、他のエラーが発生した場合にのみ使用されます。
エラーコード
各 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 クエリがキャンセルされました。
dnsPromises
API も、上記の例えば dnsPromises.NODATA
のように、上記のエラーコードをエクスポートします。
実装に関する考慮事項
dns.lookup()
とさまざまな dns.resolve*()/dns.reverse()
関数は、ネットワーク名とネットワークアドレス (またはその逆) を関連付けるという同じ目的を持っていますが、その動作は大きく異なります。 これらの違いは、Node.js プログラムの動作に微妙ながらも重大な影響を与える可能性があります。
dns.lookup()
内部的には、dns.lookup()
は、他のほとんどのプログラムと同じオペレーティングシステムの機能を使用します。 たとえば、dns.lookup()
は、ほとんどの場合、ping
コマンドと同じように特定の名前を解決します。 ほとんどの POSIX のようなオペレーティングシステムでは、dns.lookup()
関数の動作は、nsswitch.conf(5)
および/または resolv.conf(5)
の設定を変更することで変更できますが、これらのファイルを変更すると、同じオペレーティングシステムで実行されている他のすべてのプログラムの動作が変更されます。
dns.lookup()
の呼び出しは JavaScript の観点からは非同期になりますが、libuv のスレッドプールで実行される getaddrinfo(3)
への同期呼び出しとして実装されます。 これは、一部のアプリケーションに驚くほどネガティブなパフォーマンスの影響を与える可能性があります。詳細については、UV_THREADPOOL_SIZE
のドキュメントを参照してください。
さまざまなネットワーキング API が、ホスト名を解決するために内部的に dns.lookup()
を呼び出します。 それが問題になる場合は、dns.resolve()
を使用してホスト名をアドレスに解決し、ホスト名の代わりにアドレスを使用することを検討してください。 また、一部のネットワーキング API (例えば socket.connect()
や dgram.createSocket()
) では、デフォルトのリゾルバーである dns.lookup()
を置き換えることができます。
dns.resolve()
, dns.resolve*()
, および dns.reverse()
これらの関数は、dns.lookup()
とはかなり異なる方法で実装されています。これらは getaddrinfo(3)
を使用せず、常にネットワーク上で DNS クエリを実行します。このネットワーク通信は常に非同期で行われ、libuv のスレッドプールは使用しません。
その結果、これらの関数は、dns.lookup()
が持つ可能性がある、libuv のスレッドプールで発生する他の処理に同じような悪影響を与えることはありません。
これらは、dns.lookup()
が使用するのと同じ設定ファイルセットを使用しません。たとえば、/etc/hosts
の設定は使用しません。