Python之DNS

DNS

dnspython(http://www.dnspython.org/) 是Python實現(xiàn)的一個DNS工具包禽翼,它支持幾乎所有的記錄類型屠橄,可以用于查詢、傳輸并動態(tài)更新ZONE信息闰挡,同時支持TSIG(事務(wù)簽名)驗證消息和EDNS0(擴展DNS).在系統(tǒng)方面,我們可以利用其查詢功能來實現(xiàn)DNS服務(wù)監(jiān)控以及解析結(jié)果的校驗,可以代替nslookup及dig等工具锐墙,輕松做到與現(xiàn)有平臺的整合

安裝

pip install dnspython

DNS記錄解析

  • A記錄,將主機名轉(zhuǎn)換成IP地址
  • MX記錄长酗,郵件交換記錄溪北,定義郵件服務(wù)器的域名
  • CNAME記錄,指別名記錄花枫,實現(xiàn)域名間的映射
  • NS記錄刻盐,標記區(qū)域的域名服務(wù)器及授權(quán)子域
  • PTR記錄,反向解析劳翰,與A記錄相反敦锌,將IP轉(zhuǎn)換成主機名
  • SOA記錄,SOA標記佳簸,一個起始授權(quán)區(qū)的定義

A記錄

# codeing=utf-8
import dns.resolver

domain = raw_input("Please input an domain: ")
A = dns.resolver.query(domain,'A')
for i in A.response.answer:
        for j in i.items:
                print j.address

MX記錄

# coding=utf-8

import dns.resolver
domain = raw_input('Please input an domain: ')

MX = dns.resolver.query(domain, 'MX')
for i in MX:
    print 'MX preference =', i.preference, 'mail exchanger =', i.exchange

Please input an domain: 163.com      
MX preference = 10 mail exchanger = 163mx02.mxmail.netease.com.
MX preference = 10 mail exchanger = 163mx01.mxmail.netease.com.
MX preference = 50 mail exchanger = 163mx00.mxmail.netease.com.
MX preference = 10 mail exchanger = 163mx03.mxmail.netease.com.

NS記錄

# coding=utf-8
import dns.resolver
print '*************NS****************'
domain = raw_input('Please input an domain: ')
ns = dns.resolver.query(domain, 'NS')
for i in ns.response.answer:
     for j in i.items:
          print j.to_text()
        
*************NS****************
Please input an domain: baidu.com
ns4.baidu.com.
dns.baidu.com.
ns2.baidu.com.
ns7.baidu.com.
ns3.baidu.com.

CNAME記錄

# coding=utf-8
import dns.resolver
print '****************CNAME****************'
domain = raw_input('Please input an domain: ')
 
cname = dns.resolver.query(domain, 'CNAME')
for i in cname.response.answer:
    for j in i.items:
        print j.to_text()

****************CNAME****************
Please input an domain: www.baidu.com
www.a.shifen.com.

綜合案例


import dns.resolver
import httplib
 
iplist = []  # 定義域名IP列表變量
# appdomain = "www.google.com.hk"  # 定義業(yè)務(wù)域名
appdomain = "www.baidu.com"  # 定義業(yè)務(wù)域名
 
# 域名解析函數(shù)乙墙,解析成功IP將追加到iplist
def get_iplist(domain=""):
    try:
        A = dns.resolver.query(domain, 'A')  # 解析A記錄類型
    except Exception, e:
        print "dns resolver error:" + str(e)
        return
    for i in A.response.answer:
        for j in i.items:
            iplist.append(j.address)  # 追加到iplist
    return True
 
 
def checkip(ip):
    checkurl = ip + ":80"
    getcontent = ""
    httplib.socket.setdefaulttimeout(5)  # 定義http連接超時時間(5秒)
    conn = httplib.HTTPConnection(checkurl)  # 創(chuàng)建http連接對象
 
    try:
        conn.request("GET", "/", headers={"Host": appdomain})  # 發(fā)起URL請求颖变,添加host主機頭
        r = conn.getresponse()
        getcontent = r.read(15)  # 獲取URL頁面前15個字符,以便做可用性校驗
    finally:
        if getcontent.lower() == "<!doctype html>":  # 監(jiān)控URL頁的內(nèi)容一般是事先定義好听想,比如“HTTP200”等
            print ip + " [OK]"
        else:
            print ip + " [Error]"  # 此處可放告警程序腥刹,可以是郵件、短信通知
 
 
if __name__ == "__main__":
    if get_iplist(appdomain) and len(iplist) > 0:  # 條件:域名解析正確且至少要返回一個IP
        for ip in iplist:
            checkip(ip)
    else:
        print "dns resolver error."
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汉买,一起剝皮案震驚了整個濱河市衔峰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛙粘,老刑警劉巖垫卤,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異出牧,居然都是意外死亡穴肘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門舔痕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來评抚,“玉大人,你說我怎么就攤上這事伯复】” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵边翼,是天一觀的道長鱼响。 經(jīng)常有香客問我,道長组底,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任筐骇,我火速辦了婚禮债鸡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘铛纬。我一直安慰自己厌均,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布告唆。 她就那樣靜靜地躺著棺弊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擒悬。 梳的紋絲不亂的頭發(fā)上模她,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音懂牧,去河邊找鬼侈净。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的畜侦。 我是一名探鬼主播元扔,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼旋膳!你這毒婦竟也來了澎语?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤验懊,失蹤者是張志新(化名)和其女友劉穎咏连,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲁森,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡祟滴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了歌溉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垄懂。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖痛垛,靈堂內(nèi)的尸體忽然破棺而出草慧,到底是詐尸還是另有隱情,我是刑警寧澤匙头,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布漫谷,位于F島的核電站,受9級特大地震影響蹂析,放射性物質(zhì)發(fā)生泄漏舔示。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一电抚、第九天 我趴在偏房一處隱蔽的房頂上張望惕稻。 院中可真熱鬧,春花似錦蝙叛、人聲如沸俺祠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜘渣。三九已至,卻和暖如春肺然,著一層夾襖步出監(jiān)牢的瞬間蔫缸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工狰挡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捂龄,地道東北人释涛。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像倦沧,于是被迫代替她去往敵國和親唇撬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355