DNS反向查詢大概的一個定義就是:
從 IP 地址獲取 PTR 記錄。也就是說,經過使用一些網絡工具能夠將 IP 地址轉換爲主機名。 實際上,PRT 表明 POINTER,在 DNS 系統有惟一性,將 IP 地址與規範化的主機名聯繫起來。PTR 記錄實際上是 NDS 系統的一部分,可是由專門的區域文件組成的,使用的是傳統的 in-addr.arpa 格式。php
最簡單的理解就是使用一個在線服務來查詢一個IP對應的域名服務
html
原理就是 dig -x ippython
➜ ~ dig -x 192.30.252.153 ... ;; ANSWER SECTION: 153.252.30.192.in-addr.arpa. 3505 IN PTR lb-192-30-252-153-iad.github.com. ...
反向查詢的一個應用,是能夠防止垃圾郵件,即驗證發送郵件的IP地址,是否真的有它所聲稱的域名,若是反向查詢和聲稱不一致,那麼就能夠認爲有風險。git
注意:
反向查詢是根據一個資源記錄查詢域名,不必定是IP。這個資源記錄多是A記錄,也多是CNAME記錄或者MX記錄(見「DNS開源服務器BIND最小配置詳解」),而PTR記錄用於從IP地址反查域名。github
rDNS的最初用途:經過traceroute,ping和SMTP電子郵件的「Received:」跟蹤標題字段進行網絡故障排除,網站跟蹤用戶(特別是在Internet論壇上)等。服務器
一種電子郵件反垃圾郵件技術:檢查rDNS中的域名是否可能來自撥號用戶,或動態分配的地址不太可能被合法郵件服務器使用。這些IP地址的全部者一般會爲其分配通用的rDNS名稱,例如「1-2-3-4-dynamic-ip.example.com」。一些反垃圾郵件過濾器假設來自這些地址的電子郵件多是垃圾郵件,並可能拒絕鏈接。網絡
向確認反向DNS(FCrDNS)驗證能夠建立驗證的形式示出了域名的全部者,而且已經在給定IP地址的服務器的全部者之間的關係有效。雖然不是很正全面,但這種驗證足夠強大,常常用於白名單目的,由於垃圾郵件製造者和釣魚者在使用殭屍計算機僞造域記錄時一般沒法實現前向驗證。socket
系統日誌記錄或監視工具一般會接收僅由IP地址指定的相關設備的條目。爲了提供更多可用的數據,這些程序一般在寫入日誌以前執行反向查找,從而寫入名稱而不是IP地址。函數
從使用場景中也能發現這個技術點也是攻守雙方博弈的戰場,防守方經過反向查詢來確認攻擊方的信息,而攻擊方爲了隱藏本身的信息,也會讓反向查詢獲得的域名並非真實的,由於攻擊者會在反向查找的記錄中插入僞造的數據,達到迷惑的做用。工具
爲了增強理解,我寫了段py代碼來幫助理解
import sys import socket try: # gethostbyaddr的做用是經過IPv4的地址來獲取主機信息,並放在hostent結構體中 result = socket.gethostbyaddr(sys.argv[1]) # 顯示查找到的主機名 print("Primary hostname: " + result[0]) # 顯示還返回的可用地址列表 print("Addresses: ") for item in result[2]: print(" " + item) except socket.error as e: print("Failed to look up hostname:", e)
運行:查詢 127.0.0.1 ,獲得了域名
(python3) ➜ dns_anti_found python foundip.py 127.0.0.1 Primary hostname: localhost Addresses: 127.0.0.1
運行:查詢百度的ip 115.239.211.110,發現是Unknown host
(python3) ➜ dns_anti_found python foundip.py 115.239.211.110 Failed to look up hostname: [Errno 1] Unknown host
我猜想,不是每個IP地址都存在反向的映射(事實上不少IP地址就沒有對應的域名),後面查了一下,發現這個猜想是錯誤的,
手動在/etc/hosts下增長一下映射
發現域名能夠查詢出來了
查詢網上資料以後,得出結論,要使用socket.gethostXxx( )函數,本地要有反向解析的服務。若是你使用的不是服務器,是沒有反向解析服務的,若是你使用本地電腦,確定沒有域名解析服服務。那麼 本地的/etc/hosts就會提供DNS服務。你添加上記錄,那麼能查詢出來,你沒添加上去,那麼就什麼都沒有,只能報錯了。
http://www.javashuo.com/article/p-ydbwqcdj-mp.html
https://www.dnsqueries.com/zh/reverse_lookup.php
https://blog.csdn.net/t_tzz/article/details/79779226