Node.js dns 模块

  • dns 模块

    Node.js dns 模块用于执行实际的DNS查找以及使用底层操作系统名称解析功能。此模块提供异步网络包装器,可以使用以下语法导入。
    
    var dns = require("dns")
    
  • 方法

    方法 说明
    dns.lookup(hostname[, options], callback) 将主机名(例如“ google.com”)解析为第一个找到的A(IPv4)或AAAA(IPv6)记录。选项可以是一个对象或整数。如果未提供选项,则IP v4和v6地址均有效。如果options为整数,则必须为4或6。
    dns.lookupService(address, port, callback) 使用getnameinfo将给定的地址和端口解析为主机名和服务。
    dns.resolve(hostname[, rrtype], callback) 将主机名(例如“ google.com”)解析为rrtype指定的记录类型的数组。
    dns.resolve4(hostname, callback) 与dns.resolve()相同,但仅适用于IPv4查询(A记录)。地址是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()相同,但仅用于邮件交换查询(MX记录)。
    dns.resolveTxt(hostname, callback) 与dns.resolve()相同,但仅用于文本查询(TXT记录)。地址是可用于主机名的文本记录的二维数组(例如[['v = spf1 ip4:0.0.0.0','〜all']])。每个子数组包含一个记录的TXT块。根据使用情况,它们可以连接在一起或分开处理。
    dns.resolveSrv(hostname, callback) 与dns.resolve()相同,但仅用于服务记录(SRV记录)。地址是可用于主机名的SRV记录的数组。 SRV记录的属性是优先级,权重,端口和名称(例如[{{'priority“:10,'weight':5,'port':21223,'name':'service.example.com'},。 ..])。
    dns.resolveSoa(hostname, callback) 与dns.resolve()相同,但仅用于授权记录查询(SOA记录)的启动。
    dns.resolveNs(hostname, callback) 与dns.resolve()相同,但仅用于名称服务器记录(NS记录)。地址是可用于主机名的名称服务器记录的数组(例如['ns1.example.com','ns2.example.com'])。
    dns.resolveCname(hostname, callback) 与dns.resolve()相同,但仅适用于规范名称记录(CNAME记录)。地址是可用于主机名的规范名称记录的数组(例如['bar.example.com'])。
    dns.reverse(ip, callback) 反向将IP地址解析为主机名数组。
    dns.getServers() 返回IP地址数组作为当前用于解析的字符串。
    dns.setServers(servers) 给定IP地址数组作为字符串,请将它们设置为用于解析的服务器。
  • rrtypes

    以下是dns.resolve()方法使用的有效rrtype列表-
    rrtypes 说明
    A IPV4地址,默认
    AAAA IPV6地址
    MX 邮件交换记录
    TXT 文本记录
    SRV SRV记录
    PTR 用于反向IP查找
    NS 名称服务器记录
    CNAME 规范名称记录
    SOA 权限记录开始
  • 错误代码

    每个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查询已取消
  • 示例

    使用以下代码创建一个名为main.js的js文件-
    
    var dns = require('dns');
    
    dns.lookup('www.google.com', function onLookup(err, address, family) {
       console.log('address:', address);
       dns.reverse(address, function (err, hostnames) {
          if (err) {
             console.log(err.stack);
          }
    
          console.log('reverse for ' + address + ': ' + JSON.stringify(hostnames));
       });  
    });
    
    尝试一下
    现在运行main.js以查看结果-
    
    $ node main.js
    
    验证输出。
    
    address: 199.59.148.140
    reverse for 199.59.148.140: ["r-199-59-148-140.twttr.com"]