什么是DNS的正向解析与反向解析?代码实现?
DNS采用C/S機制。實現(xiàn)域名與IP地址轉(zhuǎn)換。DNS服務(wù)器用于存儲資源記錄并提供名稱查詢服務(wù),DNS客戶端也稱解析程序,用來插敘服務(wù)器并獲取名稱解析信息。
正向解析與反向解析
按照DNS查詢目的,可將DNS解析分為以下兩種類型。
- 正向解析
根據(jù)計算機的DNS名稱(即域名)解析出相應(yīng)的IP地址。
大部分DNS解析都是正向解析,即根據(jù)DNS域名查詢對應(yīng)的IP地址及其他相關(guān)信息。正向解析又稱標準查詢。正向解析記錄存儲在正向解析區(qū)域文件中。
- 反向解析
根據(jù)計算機的IP地址解析其DNS名稱,多用來為服務(wù)器進行身份驗證。
有時我們也會用到反向解析,即通過IP地址查詢對應(yīng)的域名,最典型的就是判斷IP地址所對應(yīng)的域名是否合法。由于反向解析的特殊性,RFC 1304規(guī)定了固定格式的反向解析區(qū)域后綴格式in-addr.arpa
與DNS名稱不同,當IP地址從左到右讀時,它們是以相反的方式解釋的,所以對每個8位字節(jié)值需要使用域的反序,因此建立 in-addr-arpa。
反向解析區(qū)域文件與正向解析區(qū)域文件格式相同,只是其主要內(nèi)容是用于建立IP地址到DNS域名的轉(zhuǎn)換記錄,即PTR資源指針記錄。PTR資源指針記錄和A資源記錄正好相反,它是將IP地址解析成DNS域名的資源記錄。
域名解析的具體過程
域名系統(tǒng) (DNS) 旨在將主機名解析為 IP 地址。 將名稱解析為 IP 地址的過程稱為“正向解析”。 DNS 樹被組織成一個倒置的樹結(jié)構(gòu),地址的最不具體的部分在頂部,地址的最具體的部分在底部。
我們知道DNS服務(wù)器里面有兩個區(qū)域,即“正向查找區(qū)域”和“反向查找區(qū)域”,正向查找區(qū)域就是我們通常所說的域名解析,反向查找區(qū)域即是所說的IP反向解析,我們下面來解析上圖的域名解析過程。
- 當客戶機提出查詢請求時,首先在本地計算機的緩存中查找。如果在本地無法獲得查詢信息,則將查詢請求發(fā)給DNS服務(wù)器。
- 首先客戶機將域名查詢請求發(fā)送到本地DNS服務(wù)器,當本地DNS服務(wù)器接到查詢后,首先在該服務(wù)器管理的區(qū)域的記錄中查找,如果找到該記錄,則利用此記錄進行解析;如果沒有區(qū)域信息可以滿足查詢要求,服務(wù)器在本地的緩存中查找。
- 如果本地服務(wù)器不能在本地找到客戶機查詢的信息,將客戶機請求發(fā)送到根域名DNS服務(wù)器。
- 根域名服務(wù)器負責解析客戶機請求的根域部分,它將包含下一級域名信息的DNS服務(wù)器地址返回給客戶機的DNS服務(wù)器地址。
- 客戶機的DNS服務(wù)器利用根域名服務(wù)器解析的地址訪問下一級DNS服務(wù)器,得到再下一級域我的DNS服務(wù)器地址。
- 按照上述遞歸方法逐級接近查詢目標,最后在有目標域名的DNS服務(wù)器上找到相應(yīng)IP地址信息。
- 客戶機的本地DNS服務(wù)器將遞歸查詢結(jié)果返回客戶機。
- 客戶機利用從本地DNS服務(wù)器查詢得到的IP訪問目標主機,就完成了一個解析過程。
正向解析可以通過主機名獲取其對應(yīng)的廣域網(wǎng)IP地址,使用 nslookup 命令在 Linux上輸入
nslookup 【domain】
從返回的信息中可以看到正向解析的結(jié)果。
如何做反向DNS?
我們可以通過命令來執(zhí)行反向 DNS 查找
1、使用 nslookup 命令
2、使用 dig 命令
3、使用 rDNS 查找工具
反向 DNS 查找命令
nslooup命令
nslookup最簡單的用法是查詢域名對應(yīng)的IP地址,也可以使用IP地址查找域名,例如:
nslookup [ip_address]
使用nslookup可以輸出返回指定 IP 地址的域名。
由于在域名系統(tǒng)中,一個IP地址可以對應(yīng)多個域名,因此從IP出發(fā)去找域名,理論上應(yīng)該遍歷整個域名樹,但這在Internet上是不現(xiàn)實的。為了完成逆向域名解析,系統(tǒng)提供一個特別域,該特別域稱為逆向解析域in-addr.arpa。
在 IPv6 中,PTR 記錄將 rDNS 條目存儲在 .ip6.arpa 域中,而不是 .in-addr.arpa。
dig命令
Linux下解析域名除了使用nslookup之外,還可以使用dig命令來解析域名,dig命令可以得到更多的域名信息。
dig命令是一個用于詢問 DNS 域名服務(wù)器的靈活的工具。常見使用:
dig -x [ip_address]
更多關(guān)于dig命令,可以查找man手冊。
dig -x 8.8.8.8
輸出顯示指定 IP 地址的域名。
DNS反向解析實現(xiàn)
int main(int argc, char* argv[]) {int ret = 0;DNS_QUERY query;/* 只接受一個命令行參數(shù) */if (argc != 2 || (argc == 2 && argv[1][0] == '-')) {fprintf(stderr, "usage: %s [DOMAIN | IP]\n\n", argv[0]);return -1;}/* 從傳遞的域(或 IP)創(chuàng)建 DNS_QUERY */query = createQuery(argv[1]);/* DNS 查詢的十六進制轉(zhuǎn)儲 */printf("\nDNS Query (%i bytes):\n", query.len);if (query.len == 0)return -1;hexDump(query.bytes, query.len);ret = dnsLookup(&query);if (ret == -1){printf("dnsLookup fail!!!\n");return -1;}printf("\n");return 0; }編譯運行
總結(jié)
反向 DNS 是從 IP 地址對域名的 DNS 查找。 常規(guī) DNS 請求從域名解析 IP 地址,而 rDNS 則相反,因此名稱相反。
域名是為了方便記憶而專門建立的一套地址轉(zhuǎn)換系統(tǒng),要訪問一臺互聯(lián)網(wǎng)上的服務(wù)器,最終還必須通過IP地址來實現(xiàn),域名解析就是將域名重新轉(zhuǎn)換為IP地址的過程。這一過程通過域名解析系統(tǒng)DNS來完成。
歡迎關(guān)注微信公眾號【程序猿編碼】,需要DNS反向源碼的添加本人微信號(c17865354792)
總結(jié)
以上是生活随笔為你收集整理的什么是DNS的正向解析与反向解析?代码实现?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编解码学习笔记(七):微软Windows
- 下一篇: git首次拉取项目