摘要:在中,提供模塊,以實現域名查找及域名解析的處理。方法用于將一個域名解析為一組記錄。記錄是域名服務器記錄,用來指定該域名由哪個服務器進行解析。回調函數有兩個參數,是域名解析失敗時觸發的錯誤對象,參數為一個數組,其中存放了所有獲取到的記錄。
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" ] });
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92996.html
摘要:模塊轉換為編碼模塊內部使用類庫以將域名從地方語言所采用的各種編碼轉換為可用于服務器的編碼因為操作系統的核心都是英文服務器的解析也是由英文代碼交換所以服務器并不支持直接的使用地方語言的域名解析所有地方語言域名的解析都需要轉成編碼然后由服務器解 1. punycode punycode模塊轉換為punycode編碼 punycode模塊內部使用punycode.js類庫,以將域名從地方...
摘要:域套接字使用或指定請求方法的字符串。請求路徑包含非法字符時拋出異常。保持資源池周圍的套接字在未來被用于其它請求。默認值為當使用的時候,通過正在保持活動的套接字發送包的頻繁程度。 文章來源:小青年原創發布時間:2016-09-29關鍵詞:JavaScript,nodejs,http,url ,Query String,爬蟲轉載需標注本文原始地址: http://zhaomenghuan....
摘要:的網站仍然使用有漏洞庫上周發布了開源社區安全現狀報告,發現隨著開源社區的日漸活躍,開源代碼中包含的安全漏洞以及影響的范圍也在不斷擴大。與應用安全是流行的服務端框架,本文即是介紹如何使用以及其他的框架來增強應用的安全性。 showImg(https://segmentfault.com/img/remote/1460000012181337?w=1240&h=826); 前端每周清單專注...
前言 在若干次前的一場面試,面試官看我做過python爬蟲/后端 的工作,順帶問了我些后端相關的問題:你覺得什么是后端? 送命題。當時腦瓦特了,答曰:邏輯處理和數據增刪改查。。。 showImg(https://user-gold-cdn.xitu.io/2019/4/24/16a4ed4fc8c18078); 當場被懟得體無完膚,羞愧難當。事后再反思這問題,結合資料總結了一下。發現自己學過的Re...
摘要:前端日報精選現代瀏覽器性能優化篇談談算法第一章學習筆記實現里為什么會有,我們做了一款極客時間中文第期浮點數陷阱及解法譯調度器入門掘金譯定位掘金布局說可能是最全的特性及其在實際應用中的表現掘金簡單的繼承眾成翻譯中的正則表達 2017-10-17 前端日報 精選 現代瀏覽器性能優化-JS篇談談 HTTPS《算法》第一章學習筆記js實現JS 里為什么會有 thisHi,我們做了一款 極客時間...
閱讀 1711·2021-11-11 10:58
閱讀 4184·2021-09-09 09:33
閱讀 1257·2021-08-18 10:23
閱讀 1548·2019-08-30 15:52
閱讀 1624·2019-08-30 11:06
閱讀 1867·2019-08-29 14:03
閱讀 1507·2019-08-26 14:06
閱讀 2943·2019-08-26 10:39