ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于dnspython的DNS区域传输

2021-07-16 17:02:35  阅读:244  来源: 互联网

标签:domain dns zone 传输 DNS str print dnspython NS


准备:

        pip install dnspython

        dnspython版本为2.1.0

思路:

         1 根据域名查询NS服务器

         2 尝试对每个NS服务器发起区域传输请求

                该过程包含对NS域名的解析

代码:

#!/usr/bin/python3

import dns.resolver
import dns.query
import sys

ns=[]

def line():
    flags='-'*70
    print(flags)

def getNS(domain):
    # answer is class <dns.resolver.Answer>
    try:
        # 返回结果是 类 <dns.resolver.Answer> 对象,查看dnspython手册了解类成员
        # 解析失败触发异常
        answer=dns.resolver.resolve(domain,'NS')
        # 提取节点
        for i in  answer.rrset.items:
            #print(i)
            # i  is  class <Rdata>
            ns.append(str(i))
            print('        '+str(i))
    except Exception as e:
        print('!!!!get ns faile!!!!!\n')
        return True
    return False
        
        

def zoneTransef(nameServer,domain):
    # 定义区域
    zone=dns.zone.Zone(domain)
    print("**********************")
    try:
        # 解析NS域名,解析失败则触发异常
        answer=dns.resolver.resolve(nameServer,'A')
        try:
    
            # 提取解析的IP
            for ip in answer.rrset.items:
                print(nameServer+':'+str(ip))
                # 请求区域传输,传输失败则触发异常
                dns.query.inbound_xfr(str(ip),zone)
                 # 解析区域传输内容
                for sub in  zone.nodes:
                    if  str(sub) != '@':
                        print(str(sub)+'.'+domain)
        except Exception as e:
            print(nameServer+' transfer faile\n')
    except Exception as e:
        print(nameServer+' resolve faile\n')
    print('\n')    

if __name__=="__main__":
    if len(sys.argv) != 2:
        print('usage:  '+sys.argv[0]+' megacorpone.com')
        exit()


    line()
    print("%%start%%")


    line()
    print("%%get nameservers%%")
    print("Name Servers:")
    if getNS(sys.argv[1]):
        exit()


    line()
    print("%%zone transfer%%")
    for n in ns:
        zoneTransef(n,sys.argv[1])

    line()
    print("%%end%%")
 

## 有时间优化,并尝试使用scapy生成dns数据包进行区域传输

标签:domain,dns,zone,传输,DNS,str,print,dnspython,NS
来源: https://blog.csdn.net/qq726232111/article/details/118806631

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有