文章永久连接:https://tech.souyunku.com/?p=5472
Node.js DNS 模块用于解析域名
引入模块
var dns = require("dns")
DNS 模块方法
方法 && 描述 |
---|
dns.lookup(hostname[, options], callback)
将域名(比如 ‘souyunku.cn’)解析为第一条找到的记录 A (IPV4)或 AAAA(IPV6)。参数 options可以是一个对象或整数。如果没有提供 options,IP v4 和 v6 地址都可以。如果 options 是整数,则必须是 4 或 6 |
dns.lookupService(address, port, callback)
使用 getnameinfo 解析传入的地址和端口为域名和服务 |
dns.resolve(hostname[, rrtype], callback)
将一个域名(如 ‘souyunku.cn’)解析为一个 rrtype 指定记录类型的数组 |
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)
和 dns.resolve4() 类似, 仅能查询 IPv6( AAAA 查询) |
dns.resolveMx(hostname, callback)
和 dns.resolve() 类似, 仅能查询邮件交换(MX 记录)。 |
dns.resolveTxt(hostname, callback)
和 dns.resolve() 类似, 仅能进行文本查询 (TXT 记录)。 addresses 是 2-d 文本记录数组。(比如,[ [‘v=spf1 ip4:0.0.0.0 ‘, ‘~all’ ] ])。 每个子数组包含一条记录的 TXT 块。根据使用情况可以连接在一起,也可单独使用 |
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 记录)。 |
dns.resolveNs(hostname, callback)
和 dns.resolve() 类似, 仅能进行域名服务器记录查询(NS 记录)。 addresses 是域名服务器记录数组(hostname 可以使用) (比如, [‘ns1.example.com’, ‘ns2.example.com’])。 |
dns.resolveCname(hostname, callback)
和 dns.resolve() 类似, 仅能进行别名记录查询 (CNAME记录)。addresses 是对 hostname 可用的别名记录数组 (比如,, [‘bar.example.com’])。 |
dns.reverse(ip, callback)
反向解析 IP 地址,指向该 IP 地址的域名数组 |
dns.getServers()
返回一个用于当前解析的 IP 地址数组的字符串 |
dns.setServers(servers)
指定一组 IP 地址作为解析服务器 |
rrtypes
以下列出了 dns.resolve() 方法中有效的 rrtypes 值
值 | 说明 |
---|---|
‘A’ | IPV4 地址, 默认 |
‘AAAA’ | IPV6 地址 |
‘MX’ | 邮件交换记录 |
‘TXT’ | text 记录 |
‘SRV’ | SRV 记录 |
‘PTR’ | 用来反向 IP 查找 |
‘NS’ | 域名服务器记录 |
‘CNAME’ | 别名记录 |
‘SOA’ | 授权记录的初始值 |
错误码
每次 DNS 查询都可能返回以下错误码
错误 | 描述 |
---|---|
dns.NODATA | 无数据响应 |
dns.FORMERR | 查询格式错误 |
dns.SERVFAIL | 常规失败 |
dns.NOTFOUND | 没有找到域名 |
dns.NOTIMP | 未实现请求的操作 |
dns.REFUSED | 拒绝查询 |
dns.BADQUERY | 查询格式错误 |
dns.BADNAME | 域名格式错误 |
dns.BADFAMILY | 地址协议不支持 |
dns.BADRESP | 回复格式错误 |
dns.CONNREFUSED | 无法连接到 DNS 服务器 |
dns.TIMEOUT | 连接 DNS 服务器超时 |
dns.EOF | 文件末端 |
dns.FILE | 读文件错误 |
dns.NOMEM | 内存溢出 |
dns.DESTRUCTION | 通道被摧毁 |
dns.BADSTR | 字符串格式错误 |
dns.BADFLAGS | 非法标识符 |
dns.NONAME | 所给主机不是数字 |
dns.BADHINTS | 非法HINTS标识符 |
dns.NOTINITIALIZED | c c-ares 库尚未初始化 |
dns.LOADIPHLPAPI | 加载 iphlpapi.dll 出错 |
dns.ADDRGETNETWORKPARAMS | 无法找到 GetNetworkParams 函数 |
dns.CANCELLED | 取消 DNS 查询 |
范例
main.js
/*
* filename: main.js
* author: 搜云库技术团队(tech.souyunku.com)
* Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
*/
var dns = require('dns');
dns.lookup('www.github.com', function onLookup(err, address, family) {
console.log('ip 地址:', address);
dns.reverse(address, function (err, hostnames) {
if (err) {
console.log(err.stack);
}
console.log('反向解析 '+address+': '+JSON.stringify(hostnames));
});
});
运行以上 Node.js 脚本,输出结果如下
$ node main.js
ip 地址: 192.30.255.112
反向解析 192.30.255.112: ["www.github.com"]
干货推荐
附录:Node.js 教程:系列文章
- 一、Node.js 基础教程
- 二、Node.js 环境配置
- 三、Node.js 创建第一个应用
- 四、Node.js NPM 使用介绍
- 五、Node.js 使用淘宝 NPM 镜像
- 六、Node.js REPL ( 交互式解释器 )
- 七、Node.js 回调函数
- 八、Node.js 事件循环
- 九、Node.js EventEmitter
- 十、Node.js Buffer(缓冲区)
- 十一、Node.js Stream (流)
- 十二、Node.js 模块系统
- 十三、Node.js 函数
- 十四、Node.js 开发 URL 路由
- 十五、Node.js 全局对象
- 十六、Node.js 常用工具
- 十七、Node.js 文件系统( fs 模块 )
- 十八、Node.js GET-POST 请求
- 十九、Node.js 内置模块
- 二十、Node.js WEB 模块
- 二十一、Node.js Express 框架
- 二十二、Node.js RESTful API
- 二十三、Node.js 多进程
- 二十四、Node.js JXcore 打包
- 二十五、Node.js 访问 MySQL 数据库
- 二十六、Node.js 访问 MongoDB
- 二十七、Node.js OS 模块
- 【当前读到】二十八、Node.js DNS 模块
- 二十九、Node.js Domain 模块
- 三十、Node.js Path 模块
- 三十一、Node.js Net 模块