首页 > 解决方案 > 使用 dnspython 检测孤立子域

问题描述

我试图弄清楚如何利用 dnspython 来检测孤立的子域。为了解释这个问题,让我们考虑一个示例场景:

一家 DNStest 公司拥有域example.com

现在 DNStest 公司的博客团队和 HR 团队想要为其子域执行子域委托。

博客团队将创建blog.example.com,人力资源团队将在 aws 路由 53 中创建hr.example.com托管区域记录(或者可以是任何其他提供商)

结果,团队获得了权威的域名服务器记录,他们将这些记录发送给拥有域example.com的公司 DNStest 中的 DNS 团队,以便他们可以执行子域委托。

成功委派子域后,博客团队和人力资源团队都将在子域blog.example.comhr.example.com下托管他们的服务

有一次,在 6 个月后,让我们说博客团队决定关闭他们的服务。在这种情况下,DNS 团队无法发现博客团队关闭了他们的服务,我们必须清理孤立的记录。

我正在玩 dnspython 模块

import dns.resolver

def get_records(domain):

    try:
        answers = dns.resolver.query(domain, 'NS')
        for ns in answers:
            print(ns)

    except Exception as e:
        print(e)

if __name__ == '__main__':
    get_records('blog.example.com') 
    print('---------------------------')
    get_records('hr.example.com')

上面的代码帮助我收集名称服务器记录,但我想弄清楚

  1. 如何将 blog.example.com 列为孤立子域

  2. 如果一个随机用户创建 blog.example.com 他/她还将获得 4 个名称服务器记录,但它们不是权威名称服务器记录,所以我想知道如何使用 dnspython 列出非权威名称服务器记录....

我阅读了 dnspython 的文档,但还没有找到任何提示。如果那里有不同的包,请建议我的名称。我也愿意尝试使用它们。

谢谢!

编辑回应帕特里克的以下评论: 您需要联系权威名称服务器并询问他们的授权,然后询问授权的权威名称服务器。

我尝试了以下

import dns.resolver

def get_auth_ns(domain):
    resolver = dns.resolver.Resolver(configure=False)
    resolver.timeout = 5
    # Query google name server
    ns = '8.8.8.8'
    resolver.nameservers = [ns]

    try:
       name_server_records = resolver.query(domain, 'NS')
       return domain + " : ", [name_server_record.to_text() for 
       name_server_record in name_server_records]
    except Exception as e:
       print(e)


 auth_name_servers = get_auth_ns('blog.example.com')

我看到 All nameservers failed to answer the query blog.example.com IN NS: Server 8.8.8.8 UDP port 53 回答了 SERVFAIL

标签: pythondnssubdomainamazon-route53dnspython

解决方案


推荐阅读