三、域名解析模塊(dnspython)


一、域名解析模塊(dnspython)

dnspython模塊提供了大量的DNS處理方法,最常用的方法是域名查詢。dnspython提供了一個DNS解析器類--resolver,使用它的query方法來實現域名的查詢功能。query方法的定義如下:

  • A記錄:將主機名轉換成IP地址
  • MX記錄:郵件交換記錄,定義郵件服務器的域名
  • CNAME記錄:指別名記錄,實現域名間的映射
  • NS記錄:標記區域的域名服務器及授權子域
  • RTP記錄:反向解析,與A記錄相反,將IP轉換成主機名
  • SOA記錄:SOA標記,一個起始授權區的定義

rdclass參數用於指定網絡類型,可選的值有IN,CH與HS,其中IN為默認,使用最廣泛。TCP參數用於指定查詢是否啟動TCP協議,默認為False(不啟用)。source與source_port參數作為指定查詢源地址與端口,默認值為查詢設備IP地址和0,raise_on_no_answer參數用於指定當查詢無應答是否觸發異常,默認為True

二、常見解析類型示例說明

常見的DNS解析類型包括A,MX,NS,CHANE等。利用dnspython的dns.resolver.query方法可以簡單實現這些DNS類型的查詢,為后面要實現的功能提供數據來源,比如對一個使用DNS輪循業務的域名進行可用性監控,需要得到當前的解析結果。

1. A記錄

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import dns.resolver

domain = input("Please input an domain:").strip()   # 輸入一個域名
A = dns.resolver.query(domain,'A')   # 指定查看類型為A記錄
for i in A.response.answer:  # 通過response.answer方法獲取查詢回應信息
    for j in i.items:        # 遍歷回應信息
        print(j.address)
        
#run
/usr/local/bin/python3.6 /Users/xcn/PycharmProjects/自動化運維/IPy實用的IP地址處理模塊/dns輪循監控.py
Please input an domain:baidu.com
220.181.57.216
123.125.115.110

2. MX記錄

import dns.resolver
domain = input("Please input an domain:").strip()
MX = dns.resolver.query(domain, 'MX')  # 指定查看類型為MX

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

# run
/usr/local/bin/python3.6 /Users/xcn/PycharmProjects/自動化運維/IPy實用的IP地址處理模塊/dns輪循監控.py
Please input an domain:yeah.net
MX preference= 10 mail exchanger= yeahmx01.mxmail.netease.com.
MX preference= 50 mail exchanger= yeahmx00.mxmail.netease.com.

3. NS記錄

import dns.resolver
domain = input("Please input an domain:").strip()

ns = dns.resolver.query(domain,'NS')  # 指定查詢類型為NS記錄

for i in ns.response.answer:
    for j in i.items:
        print(j.to_text())
# 只限輸入一級域名,如baidu.com.如果輸入二級域名或多級域名,如www.baidu.com,則是錯誤的

# run

/usr/local/bin/python3.6 /Users/xcn/PycharmProjects/自動化運維/IPy實用的IP地址處理模塊/dns輪循監控.py
Please input an domain:baidu.com
ns3.baidu.com.
ns2.baidu.com.
ns7.baidu.com.
dns.baidu.com.
ns4.baidu.com.

4. CNAME記錄

import dns.resolver
domain = input("Please input an domain:").strip()
cname = dns.resolver.query(domain, 'CNAME')  # 指定查詢類型為CNAME記錄
for i in cname.response.answer: # 結果將回應cname后的目標域名
    for j in i.items:
        print(j.to_text())
        
# run

結果將返回cname后的目標域名

三、案例:DNS域名輪詢業務監控

鏈接:https://www.cnblogs.com/baishuchao/articles/9129015.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM