DNS
[Stable: 2 - Stable]
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[]>
RFC 5952 に従ってフォーマットされた、現在 DNS 解決に構成されている IP アドレス文字列の配列を返します。カスタムポートが使用されている場合、文字列にはポートセクションが含まれます。
;['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
の場合、解決されたアドレスは IPv4 アドレスを IPv6 アドレスの前に配置してソートされます。ipv6first
の場合、解決されたアドレスは IPv6 アドレスを IPv4 アドレスの前に配置してソートされます。デフォルト: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
// options.all が true の場合、結果は配列になります。
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
// options.all が true の場合、結果は配列になります。
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)
[履歴]
バージョン | 変更 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v0.1.27 | 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 エラーコードの 1 つになります。
dns.resolve4(hostname[, options], callback)
[履歴]
バージョン | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK の代わりに ERR_INVALID_ARG_TYPE をスローするようになりました。 |
v7.2.0 | このメソッドは、options 、特に options.ttl を渡すことをサポートするようになりました。 |
v0.1.16 | 追加: v0.1.16 |
hostname
<string> 解決するホスト名。options
<Object>ttl
<boolean> 各レコードの Time-To-Live (TTL) 値を取得します。true
の場合、コールバックは文字列の配列ではなく、秒単位で表される TTL を持つ{ address: '1.2.3.4', ttl: 60 }
オブジェクトの配列を受け取ります。
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)
[履歴]
バージョン | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK の代わりに ERR_INVALID_ARG_TYPE をスローするようになりました。 |
v7.2.0 | このメソッドは、options 、特に options.ttl を渡すことをサポートするようになりました。 |
v0.1.16 | 追加: v0.1.16 |
hostname
<string> 解決するホスト名。options
<Object>ttl
<boolean> 各レコードの Time-To-Live (TTL) 値を取得します。true
の場合、コールバックは文字列の配列ではなく、秒単位で表される TTL を持つ{ address: '0:1:2:3:4:5:6:7', ttl: 60 }
オブジェクトの配列を受け取ります。
callback
<Function>err
<Error>addresses
<string[]> | <Object[]>
DNS プロトコルを使用して、hostname
の IPv6 アドレス (AAAA
レコード) を解決します。callback
関数に渡される addresses
引数には、IPv6 アドレスの配列が含まれます。
dns.resolveAny(hostname, callback)
[履歴]
バージョン | 変更 |
---|---|
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)
[履歴]
バージョン | 変更 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK の代わりに ERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v0.3.2 | 追加: v0.3.2 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
hostname
の CNAME
レコードを解決するために DNS プロトコルを使用します。callback
関数に渡される addresses
引数には、hostname
で利用可能な正規名レコードの配列が含まれます(例:['bar.example.com']
)。
dns.resolveCaa(hostname, callback)
[履歴]
バージョン | 変更 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK の代わりに ERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v15.0.0, v14.17.0 | 追加: v15.0.0, v14.17.0 |
hostname
<string>callback
<Function>err
<Error>records
<Object[]>
hostname
の CAA
レコードを解決するために DNS プロトコルを使用します。callback
関数に渡される addresses
引数には、hostname
で利用可能な認証局認証レコードの配列が含まれます(例:[{critical: 0, iodef: 'mailto:[email protected]'}, {critical: 128, issue: 'pki.example.com'}]
)。
dns.resolveMx(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
のメール交換レコード(MX
レコード)を解決します。 callback
関数に渡される addresses
引数には、priority
と exchange
プロパティの両方を含むオブジェクトの配列が含まれます(例:[{priority: 10, exchange: 'mx.example.com'}, ...]
)。
dns.resolveNaptr(hostname, callback)
[履歴]
バージョン | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK の代わりに ERR_INVALID_ARG_TYPE をスローするようになりました。 |
v0.9.12 | 追加: 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)
[履歴]
バージョン | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE をスローするようになりました。 |
v0.1.90 | 追加: 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)
[履歴]
バージョン | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE をスローするようになりました。 |
v6.0.0 | 追加: v6.0.0 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
DNS プロトコルを使用して、hostname
のポインターレコード(PTR
レコード)を解決します。 callback
関数に渡されるaddresses
引数は、応答レコードを含む文字列の配列になります。
dns.resolveSoa(hostname, callback)
[履歴]
バージョン | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK ではなくERR_INVALID_ARG_TYPE をスローするようになりました。 |
v0.11.10 | 追加: 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)
追加: 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 | 追加: 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 | 追加: 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 クエリが進行中の間は、dns.setServers()
メソッドを呼び出してはいけません。
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
のエラーで拒否されます。
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
は、プロパティ address
および family
を持つオブジェクトの配列である addresses
で解決されます。
エラーが発生した場合、Promise
は Error
オブジェクトで拒否され、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
})
// options.all が true の場合、結果は配列になります。
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
})
// options.all が true の場合、結果は配列になります。
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)
追加: v10.6.0
与えられた address
と port
を、オペレーティングシステムの基盤となる getnameinfo
の実装を使用して、ホスト名とサービスに解決します。
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])
追加: 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])
追加: v10.6.0
hostname
<string> 解決するホスト名。options
<Object>ttl
<boolean> 各レコードの Time-To-Live (TTL) 値を取得します。true
の場合、Promise
は文字列の配列ではなく、秒単位で TTL が表された{ address: '1.2.3.4', ttl: 60 }
オブジェクトの配列で解決されます。
DNS プロトコルを使用して、hostname
の IPv4 アドレス(A
レコード)を解決します。成功すると、Promise
は IPv4 アドレスの配列 (例: ['74.125.79.104', '74.125.79.105', '74.125.79.106']
) で解決されます。
dnsPromises.resolve6(hostname[, options])
追加: v10.6.0
hostname
<string> 解決するホスト名。options
<Object>ttl
<boolean> 各レコードの Time-To-Live (TTL) 値を取得します。true
の場合、Promise
は文字列の配列ではなく、秒単位で TTL が表された{ address: '0:1:2:3:4:5:6:7', ttl: 60 }
オブジェクトの配列で解決されます。
DNS プロトコルを使用して、hostname
の IPv6 アドレス(AAAA
レコード)を解決します。成功すると、Promise
は IPv6 アドレスの配列で解決されます。
dnsPromises.resolveAny(hostname)
追加: v10.6.0
hostname
<string>
DNS プロトコルを使用して、すべてのレコード ( ANY
または *
クエリとしても知られています) を解決します。成功すると、Promise
はさまざまな種類のレコードを含む配列で解決されます。各オブジェクトには、現在のレコードのタイプを示す type
プロパティがあります。また、type
に応じて、オブジェクトには追加のプロパティが存在します。
タイプ | プロパティ |
---|---|
'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' | このタイプのレコードには、dnsPromises.resolveTxt() を参照する entries という配列プロパティが含まれています。例: { 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)
追加: 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)
追加: v10.6.0
hostname
<string>
DNS プロトコルを使用して、hostname
の CNAME
レコードを解決します。成功すると、Promise
は、hostname
で利用可能な正規名レコードの配列で解決されます (例: ['bar.example.com']
)。
dnsPromises.resolveMx(hostname)
追加: v10.6.0
hostname
<string>
DNS プロトコルを使用して、hostname
のメール交換レコード (MX
レコード) を解決します。成功すると、Promise
は、priority
と exchange
プロパティの両方を含むオブジェクトの配列で解決されます (例: [{priority: 10, exchange: 'mx.example.com'}, ... ]
)。
dnsPromises.resolveNaptr(hostname)
追加: 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)
追加: 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
で利用可能なテキストレコードの 2 次元配列(例:[ ['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'])
無効なアドレスが指定された場合はエラーがスローされます。
DNS クエリが進行中の間は、dnsPromises.setServers()
メソッドを呼び出さないでください。
このメソッドは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
の設定を使用しません。