Node.js中DNS模組學習總結,node.jsdns

來源:互聯網
上載者:User

Node.js中DNS模組學習總結,node.jsdns

1. DNS

在Node.js中,提供DNS模組,以實現網域名稱尋找及網域名稱解析的處理。

  • 在DNS模組中,提供了三個主方法及一系列便捷方法。
  • resolve方法:用於將一個網域名稱解析為一組DNS記錄。
  • reverse方法: 用於將IP地址轉換為一組網域名稱。
  • lookup方法: 用於將一個網域名稱轉換成IP地址。
  • DNS模組中的其餘便捷方法均為resolve方法的一種便捷形式。

2. 使用resolve方法將網域名稱解析為DNS記錄

`DNS.resolve(domain, [rrtype], callback(err, address){...})`

domain參數為一個字串,用於指定需要被解析的網域名稱,可以包括子網域名稱。
rrtypr參數為一個字串,用於指定需要擷取的記錄類型,可指定的記錄類型如下。

  • A,該參數值為預設值,當記錄類型為A時,該記錄將一個IPv4地址映射為一個網域名稱。
  • AAAA,當記錄類型為AAAA時,該記錄將一個IPv6地址映射為一個網域名稱。
  • CNAME,當記錄類型為CNAME時,表示該記錄為一個網域名稱的別名記錄,例如,一個www.example.com網域名稱記錄也許為一個example.com網域名稱記錄額別名記錄。
  • MX,MX記錄指向一個使用SMTP的域中的郵件伺服器,例如,當你想person@domain.com郵件地址寄送電子郵件時,domain.com域的MX記錄中儲存了發送該郵件時的郵件伺服器地址。
  • TXT,TXT記錄是為該網域名稱附加的描述記錄。
  • SRV,SRV記錄用於為一個特定域中所有可用服務提供資訊。
  • PTR,PTR記錄用於反向位址解析,該記錄將一個網域名稱映射為一個IPv4地址。
  • NS,NS(Name Server)記錄是網域名稱伺服器記錄,用來指定該網域名稱由哪個DNS伺服器進行解析。

回呼函數有兩個參數,err是網域名稱解析失敗時觸發的錯誤對象,addresses參數為一個數組,其中存放了所有擷取到的DNS記錄。

3. 為resolve方法定製的各種便捷方法

  • DNS.resolve4(domain, callback),擷取IPv4地址
  • DNS.resolve6(domain, callback),擷取IPv6地址
  • DNS.resolveMx(domain, callback),擷取MX記錄,郵件交換伺服器記錄
  • DNS.resolveTxt(domain, callback),擷取TXT記錄,網域名稱附加的描述記錄
  • DNS.resolveSrv(domain, callback),擷取SRV記錄,服務記錄
  • DNS.resolveNs(domain, callback),擷取NS記錄,網域名稱伺服器記錄
  • DNS.resolveCname(domain, callback),擷取別名記錄

4. 使用lookup方法查詢IP地址

當使用resolve4方法或者resolve6方法時,由於callback參數值回呼函數中的addresses參數值數組中存放著所有擷取到的IPv4地址或IPv6地址。因此DNS模組中提供了一個擷取第一個被發現的IPv4地址或者IPv6地址的lookup方法

`DNS.lookup(domain, [family], callback(err, addresses, family){...})`

  • domain參數為一個字串,用於指定需要解析的網域名稱
  • family參數值為一個整數值,用於指定需要擷取的IP地址類型,可指定的參數值為4或6,預設參數值為null,表示既可以擷取IPv4,又可以擷取IPv6
  • 回呼函數err參數值為擷取地址失敗時觸發的錯誤對象,當網域名稱不存在或查詢失敗時該錯誤對象的code屬性值為ENOENT
  • addresses參數值為一個字串,為擷取到的IP地址
  • family參數值為4時,表示為一個IPv4地址,為6時,表示為一個IPv6地址。

5. 使用reverse方法反向解析IP地址

在DNS模組中,使用reverse方法將一個IP地址反向解析為一組與該IP地址綁定的網域名稱

`DNS.reverse(ip, callback(err, domains){...})`

  • ip參數值為一個字串,用於指定需要解析的IP地址
  • 回呼函數的err為反向解析地址失敗後的錯誤對象
  • domains參數值為一個數組,存放了所有擷取到的網域名稱

6. DNS模組中的各種錯誤碼

err參數值為執行各種解析或反向解析操作時觸發的錯誤對象,可根據該錯誤對象的code屬性值,即觸發的錯誤代號判斷出發了什麼錯誤

  • ENODATA:DNS伺服器返回一個沒有資料的查詢結果
  • EFORMERR:DNS伺服器發現用戶端請求查詢時使用了格式錯誤的查詢參數
  • ESERVFAIL:DNS伺服器執行查詢操作失敗
  • ENOTFOUND:未發現任何網域名稱
  • ENOTIMP:DNS伺服器不能進行用戶端所請求的查詢操作
  • EREFUSED:DNS伺服器拒絕進行查詢操作
  • EBADQUERY:格式錯誤的DNS查詢
  • EBADNAME:網域名稱格式錯誤
  • EBADFAMILY:不支援的IP地址類型
  • EBADRESP:DNS回覆的格式錯誤
  • ECONNREFUSED:不能建立與DNS伺服器之間的串連
  • ETIMEOUT:與DNS伺服器之間建立連線逾時
  • EEOF:已到達檔案底部
  • EFILE:讀取檔案失敗
  • ENOMEM:沒有足夠的記憶體空間
  • EDESTRUCTION:通道已經被銷毀
  • EBADSTR:字串格式錯誤
  • EBADFLAGS:指定了錯誤的判斷標誌
  • ENONAME:指定的主機名稱不是數值格式的
  • EBADHINTS:指定的提示標誌無效
  • ENOTINITIALIZED:c-ares類庫初始化工作尚未完成
  • ELOADIPHLPAPI:載入iphlpapi.dll時觸發了一個錯誤
  • EADDREGETNETWORKPARAMS:未發現GetNetworkParams函數
  • ECANCELLED:DNS查詢操作被取消

7. DNS模組的基本使用

const dns = require('dns');let url = 'www.qq.com';dns.resolve(url, 'A', (err, addresses) => {  console.log(addresses);  // IPv4地址 [ '103.7.30.123' ]});dns.resolve(url, 'AAAA', (err, addresses) => {  console.log(addresses);  // IPv6地址 [ '240e:e1:8100:28::2:16' ]});dns.resolveMx('qq.com', (err, addresses) => {  console.log(addresses);  // 郵件交換伺服器記錄  // [ { exchange: 'mx2.qq.com', priority: 20 },  //  { exchange: 'mx1.qq.com', priority: 30 },  //  { exchange: 'mx3.qq.com', priority: 10 } ]  });dns.resolveTxt('qq.com', (err, addresses) => {  console.log(addresses);  // 網域名稱附加的描述記錄  // [ [ 'v=spf1 include:spf.mail.qq.com -all' ] ]});dns.resolveSrv('www.baidu.com', (err, addresses) => {  console.log(addresses);  // 服務記錄  // []});dns.resolveNs('www.github.com', (err, addresses) => {  console.log(addresses);  // 網域名稱伺服器記錄  // [ 'ns-421.awsdns-52.com',  // 'ns-520.awsdns-01.net',  // 'ns1.p16.dynect.net',  // 'ns2.p16.dynect.net',  // 'ns3.p16.dynect.net',  // 'ns4.p16.dynect.net',  // 'ns-1283.awsdns-32.org',  // 'ns-1707.awsdns-21.co.uk' ]});dns.resolveCname('www.163.com', (err, addresses) => {  console.log(addresses);  // 擷取別名記錄  // [ 'www.163.com.lxdns.com' ]});dns.lookup('google.com', 4, (err, address, family) => {  // 查詢IP地址  // address,查詢到的地址  // family,IPv4或IPv6  console.log(address);// 172.217.27.142  console.log(family);// 4});dns.lookup('google.com', 6, (err, address, family) => {  console.log(address);// 2404:6800:4008:803::200e  console.log(family);// 6});dns.reverse('203.188.200.67', (err, domain) => {  // 反向解析IP地址  console.log(domain);  // [ 'media-router-fp1.prod.media.vip.tp2.yahoo.com' ]});

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.