本篇文章給大家詳細介紹了Node.js中DNS模組的相關知識點,以及相關的實例程式碼做了分享,有興趣的朋友參考下。
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位址
#4. 使用lookup方法查詢IP位址
5. 使用reverse方法反向解析IP位址
6. DNS模組中的各種錯誤代碼
EFORMERR:DNS伺服器發現客戶端請求查詢時使用了格式錯誤的查詢參數
ESERVFAIL:DNS伺服器執行查詢操作失敗
ENOTFOUND:未發現任何網域名稱
ENOTIMP:DNS伺服器不能進行客戶端所要求的查詢操作
EREFUSED: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' ] });
以上是在Node.js中如何使用DNS模組(詳細教學)的詳細內容。更多資訊請關注PHP中文網其他相關文章!