Node.js 的 dns
模块提供了用于解析域名系统 (DNS) 的功能。这包括查询 DNS 服务器以获取 IP 地址、MX 记录等信息。dns
模块是 Node.js 的内置模块之一,无需额外安装即可使用。
引入 dns
模块
const dns = require('dns');
dns
模块常用方法
1. dns.lookup(hostname, [options], callback)
用于查找给定的主机名对应的 IP 地址。
hostname
: 要查询的主机名。options
: 可选对象,可以包含family
属性来指定 IP 版本(4 或 6)。callback
: 回调函数,接受(err, address, family)
参数。
dns.lookup('www.example.com', (err, address, family) => {
if (err) throw err;
console.log(`Address: ${address} (Family: ${family})`);
});
2. dns.resolve4(hostname, callback)
查询给定主机名的 IPv4 地址。
hostname
: 要查询的主机名。callback
: 回调函数,接受(err, addresses)
参数。
dns.resolve4('www.example.com', (err, addresses) => {
if (err) throw err;
console.log(`IPv4 Addresses: ${addresses.join(', ')}`);
});
3. dns.resolve6(hostname, callback)
查询给定主机名的 IPv6 地址。
hostname
: 要查询的主机名。callback
: 回调函数,接受(err, addresses)
参数。
dns.resolve6('www.example.com', (err, addresses) => {
if (err) throw err;
console.log(`IPv6 Addresses: ${addresses.join(', ')}`);
});
4. dns.resolveMx(hostname, callback)
查询给定主机名的 MX (邮件交换) 记录。
hostname
: 要查询的主机名。callback
: 回调函数,接受(err, addresses)
参数,其中addresses
是一个对象数组,每个对象包含priority
和exchange
属性。
dns.resolveMx('example.com', (err, addresses) => {
if (err) throw err;
addresses.forEach(mx => {
console.log(`Priority: ${mx.priority}, Exchange: ${mx.exchange}`);
});
});
5. dns.resolveNaptr(hostname, callback)
查询给定主机名的 NAPTR (命名权威指针) 记录。
hostname
: 要查询的主机名。callback
: 回调函数,接受(err, addresses)
参数,其中addresses
是一个对象数组,每个对象包含order
,preference
,flags
,service
,regexp
, 和replacement
属性。
dns.resolveNaptr('example.com', (err, addresses) => {
if (err) throw err;
addresses.forEach(naptr => {
console.log(`Order: ${naptr.order}, Flags: ${naptr.flags}, Replacement: ${naptr.replacement}`);
});
});
6. dns.resolveSrv(hostname, callback)
查询给定主机名的 SRV (服务) 记录。
hostname
: 要查询的主机名。callback
: 回调函数,接受(err, addresses)
参数,其中addresses
是一个对象数组,每个对象包含priority
,weight
,port
, 和name
属性。
dns.resolveSrv('_http._tcp.example.com', (err, addresses) => {
if (err) throw err;
addresses.forEach(srv => {
console.log(`Priority: ${srv.priority}, Port: ${srv.port}, Name: ${srv.name}`);
});
});
7. dns.resolveTxt(hostname, callback)
查询给定主机名的 TXT (文本) 记录。
hostname
: 要查询的主机名。callback
: 回调函数,接受(err, addresses)
参数,其中addresses
是一个字符串数组。
dns.resolveTxt('example.com', (err, txtRecords) => {
if (err) throw err;
txtRecords.forEach(record => {
console.log(`TXT Record: ${record}`);
});
});
8. dns.promises
Node.js v10.0.0 及以后的版本支持 dns.promises
对象,该对象提供了基于 Promise 的方法。
dns.promises.lookup('www.example.com')
.then(({ address, family }) => {
console.log(`Address: ${address} (Family: ${family})`);
})
.catch(err => {
console.error(err);
});
示例:查询 DNS 信息
下面是一个示例脚本,它使用 dns
模块查询 example.com
的 DNS 信息。
const dns = require('dns');
// 查询 IPv4 地址
dns.resolve4('www.example.com', (err, addresses) => {
if (err) throw err;
console.log(`IPv4 Addresses: ${addresses.join(', ')}`);
});
// 查询 IPv6 地址
dns.resolve6('www.example.com', (err, addresses) => {
if (err) throw err;
console.log(`IPv6 Addresses: ${addresses.join(', ')}`);
});
// 查询 MX 记录
dns.resolveMx('example.com', (err, addresses) => {
if (err) throw err;
addresses.forEach(mx => {
console.log(`MX Record: Priority: ${mx.priority}, Exchange: ${mx.exchange}`);
});
});
// 查询 SRV 记录
dns.resolveSrv('_http._tcp.example.com', (err, addresses) => {
if (err) throw err;
addresses.forEach(srv => {
console.log(`SRV Record: Priority: ${srv.priority}, Weight: ${srv.weight}, Port: ${srv.port}, Name: ${srv.name}`);
});
});
// 查询 TXT 记录
dns.resolveTxt('example.com', (err, txtRecords) => {
if (err) throw err;
txtRecords.forEach(record => {
console.log(`TXT Record: ${record}`);
});
});
总结
dns
模块提供了多种方法来查询 DNS 信息,这对于网络编程和域名解析非常有用。如果你需要进一步的信息或者有其他问题,请随时告诉我!