Python模塊域名dnspython解析
dnspython是python實(shí)現(xiàn)的一個(gè)DNS工具包,它支持記錄類型、查詢、傳輸并動(dòng)態(tài)更新ZONE信息等等。據(jù)說dnspython可以代替dig、nslookup等工具。下面我們就來介紹dnspython模塊的使用。
dnspython源碼安裝
這里介紹一下dnspython模塊的安裝,采用源碼的安裝方式,目前使用的版本是1.16.0
如下安裝:
wget https://www.dnspython.org/kits/1.16.0/dnspython-1.16.0.tar.gz
tar -zxvf dnspython-1.16.0.tar.gz
cd dnspython-1.16.0 python setup.py install
看到紅框的信息說明安裝完成了。
好了,開始進(jìn)入今天的正題,python模塊的講解。
python模塊域名解析方法講解
平常測試DNS的時(shí)候,有些操作手動(dòng)處理不方便,需要寫個(gè)腳本來實(shí)現(xiàn),這是就會(huì)想到使用dnspython模塊,它提供了大量的DNS處理方法,我們知道最常用的方法就是域名查詢,dnspyhton庫提供一個(gè)解析器類(resolver),我們可以使用它query方法實(shí)現(xiàn)域名查詢功能。這里要說一下query:
query(self, qname, rdtype = 1, rdclass = 1, tcp = False, source = None, raise_on_no_answer = True, source_port = 0)
qname:查詢的域名。
rdtype :指定RR資源的類型
全部的rdtype類型為:
常用的有以下幾種:
A記錄:將主機(jī)名轉(zhuǎn)換成IP地址
MX記錄:郵件交換記錄,定義郵件服務(wù)器的域名
CNAME記錄:別名記錄,實(shí)現(xiàn)域名間的映射
NS記錄:標(biāo)記區(qū)域的域名服務(wù)器及授權(quán)子域
PTR記錄:反向解析,與A記錄相反,將IP地址轉(zhuǎn)換為主機(jī)名
SOA記錄:SOA標(biāo)記,一個(gè)起始授權(quán)區(qū)的定義
rdclass: 指定網(wǎng)絡(luò)類型,可選的值為CH、IN。其中IN為默認(rèn)的,使用最廣泛。
tcp :指定查詢是否啟動(dòng)TCP協(xié)議,默認(rèn)不啟動(dòng)。
source與source_port:指定的查詢?cè)吹刂放c端口。
raise_on_no_answer :指定查詢無應(yīng)答時(shí)是否觸發(fā)異常,默認(rèn)為True。
下面我們開始對(duì)常見解析類型進(jìn)行說明。
解析類型說明
A記錄
#!/usr/local/bin/python38 # -*- coding: utf-8 -*- import dns.resolver domain = input('Please input an domain: ') #輸入域名地址 A = dns.resolver.query(domain, 'A') #查詢記錄為A記錄 for i in A.response.answer: for j in i.items: if j.rdtype == 1: #加判斷,不然會(huì)出現(xiàn)AttributeError: 'CNAME' object has no attribute 'address' print(j.address)
運(yùn)行代碼查看結(jié)果,這里以www.baidu.com域名為例:
這樣子我們就將www.baidu.com的域名解析出來了。 來看看效果:
MZ記錄
#!/usr/local/bin/python38 # -*- coding: utf-8 -*- import dns.resolver domain = input('Input an domain : ') MX = dns.resolver.query(domain, 'MX') # 指定解析類型為MX記錄 for i in MX: # 遍歷回應(yīng)結(jié)果 print('MX preference =', i.preference, 'mail exchanger =', i.exchange)
運(yùn)行代碼查看結(jié)果,這里以qq.com域名為例:
其中我們可以看到preference值(優(yōu)先級(jí))和exchange值(交換地址),其中優(yōu)先級(jí)默認(rèn)為10,MX記錄可以通過設(shè)置優(yōu)先級(jí)實(shí)現(xiàn)主輔服務(wù)器設(shè)置,”優(yōu)先級(jí)”中的數(shù)字越小表示級(jí)別越高,“優(yōu)先級(jí)”僅對(duì)MX記錄有效。
NS記錄
NS(Name Server)域名服務(wù)器記錄。用來表明由哪臺(tái)服務(wù)器對(duì)該域名進(jìn)行解析。在注冊(cè)域名時(shí),總有默認(rèn)的DNS服務(wù)器,每個(gè)注冊(cè)的域名都是由一個(gè)DNS域名服務(wù)器來進(jìn)行解析的。
下面實(shí)現(xiàn)NS記錄查詢方法:
#!/usr/local/bin/python38 import dns.resolver domain = input('Input an domain : ') NS = dns.resolver.query(domain, 'NS') for i in NS.response.answer: for j in i.items: print(j.to_text())
運(yùn)行結(jié)果如下:
只限輸入一級(jí)域名,如baidu.com。如果輸入二級(jí)或多級(jí)域名,如:www.baidu.com,則是錯(cuò)誤的,我們可以試一下,驗(yàn)證問題:
CNAME記錄
使用CNAME時(shí),CNAME的目標(biāo)主機(jī)地址只能使用主機(jī)名,不能使用IP地址。主機(jī)名前不能有任何其他前綴,如:http://等是不被允許的。
來看看下面代碼實(shí)現(xiàn)CNAME記錄方法:
#!/usr/local/bin/python38 import dns.resolver domain = input('Input an domain: ') CNAME = dns.resolver.query(domain,'CNAME') for i in CNAME.response.answer: for j in i.items: print(j.to_text())
運(yùn)行結(jié)果如下:
運(yùn)行結(jié)果出現(xiàn)www.a.shifen.com域名,這個(gè)域名就是www.baidu.com的別名指向。相當(dāng)于用子域名來代替ip地址,優(yōu)點(diǎn)是如果ip地址變化,只需要改動(dòng)子域名的解析,而不需要逐一改變ip地址解析。
DNS域名輪詢業(yè)務(wù)監(jiān)控
大部分的DNS解析器都是一個(gè)域名對(duì)應(yīng)一個(gè)IP地址,但是通過DNS輪詢技術(shù)可以做到一個(gè)域名對(duì)應(yīng)多個(gè)IP,從而實(shí)現(xiàn)最簡單高效的負(fù)載平衡,不過此方最大的弊端是目標(biāo)主機(jī)不可用時(shí)無法被自動(dòng)剔除,因此做好業(yè)務(wù)主機(jī)的服務(wù)可用監(jiān)控至關(guān)重要。
下面我們來實(shí)現(xiàn)域名的解析,獲取域名的所有A記錄解析IP列表。
#!/usr/local/bin/python38 import dns.resolver import httplib2 iplist = [] appdomain = "www.baidu.com" def get_iplist(domain=""): try: A = dns.resolver.query(domain,"A") except Exception as e: print("dns resolver error:" + str(e)) return for i in A.response.answer: for j in i.items: if j.rdtype == 1: iplist.append(j.address) return True def checkip(ip): checkurl = 'http://' + ip + ":80" getcontent = "" httplib2.socket.setdefaulttimeout(5) conn = httplib2.Http() try: resp,getcontent=conn.request(checkurl) finally: if resp['status']== "200": print(ip+"[OK]") else: print(ip+"[Error]") if __name__ == "__main__": if get_iplist(appdomain) and len(iplist) > 0: for ip in iplist: checkip(ip)
運(yùn)行結(jié)果如下:
從結(jié)果可以看出,域名www.baidu.com解析出3個(gè)IP地址,并且服務(wù)都是正常的。上面的代碼,第一步通過dns.resolver.query()方法獲取業(yè)務(wù)域名A記錄信息,查詢出所有IP地址列表,再使用httplib模塊的request()方法以GET方式請(qǐng)求監(jiān)控頁面,監(jiān)控業(yè)務(wù)所有服務(wù)的IP是否服務(wù)正常。
總結(jié)
我們知道將IP地址轉(zhuǎn)換為可讀格式或單詞后,便稱為域名。在python中,域名到IP地址的轉(zhuǎn)換由python模塊dnspython管理。它支持記錄類型、查詢、傳輸并動(dòng)態(tài)更新ZONE信息的方法。感興趣的朋友,可以去看看dnspython源碼。
到此這篇關(guān)于Python模塊域名dnspython解析 的文章就介紹到這了,更多相關(guān)Python模塊域名dnspython內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python批量處理多DNS多域名的nslookup解析實(shí)現(xiàn)
- 利用Python+阿里云實(shí)現(xiàn)DDNS動(dòng)態(tài)域名解析的方法
- Python爬蟲DNS解析緩存方法實(shí)例分析
- Python實(shí)現(xiàn)的簡單dns查詢功能示例
- python實(shí)現(xiàn)域名系統(tǒng)(DNS)正向查詢的方法
- Python中使用scapy模擬數(shù)據(jù)包實(shí)現(xiàn)arp攻擊、dns放大攻擊例子
- Python寫的一個(gè)簡單DNS服務(wù)器實(shí)例
- python實(shí)現(xiàn)DNS正向查詢、反向查詢的例子
- Python DNS查詢放大攻擊實(shí)現(xiàn)原理解析
相關(guān)文章
PyCharm代碼整體縮進(jìn),反向縮進(jìn)的方法
今天小編就為大家分享一篇PyCharm代碼整體縮進(jìn),反向縮進(jìn)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python 實(shí)現(xiàn)將某一列設(shè)置為str類型
這篇文章主要介紹了Python 實(shí)現(xiàn)將某一列設(shè)置為str類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07python實(shí)現(xiàn)識(shí)別手寫數(shù)字 python圖像識(shí)別算法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)識(shí)別手寫數(shù)字,python圖像識(shí)別算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01Python基礎(chǔ)之教你怎么在M1系統(tǒng)上使用pandas
這篇文章主要介紹了Python基礎(chǔ)之教你怎么在M1系統(tǒng)上使用pandas,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05python將Dataframe格式的數(shù)據(jù)寫入opengauss數(shù)據(jù)庫并查詢
這篇文章主要介紹了python將Dataframe格式的數(shù)據(jù)寫入opengauss數(shù)據(jù)庫并查詢,文章介紹詳細(xì)具有一定的參考價(jià)值,希望對(duì)你的學(xué)習(xí)有所幫助2022-04-04python 將list轉(zhuǎn)成字符串,中間用符號(hào)分隔的方法
今天小編就為大家分享一篇python 將list轉(zhuǎn)成字符串,中間用符號(hào)分隔的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10基于Python3.7.1無法導(dǎo)入Numpy的解決方式
這篇文章主要介紹了基于Python3.7.1無法導(dǎo)入Numpy的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03python實(shí)現(xiàn)套接字創(chuàng)建
這篇文章主要為大家介紹了python套接字創(chuàng)建實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05