【问题标题】:Get all subdomain of a top level domain with python使用python获取顶级域的所有子域
【发布时间】:2021-08-18 06:31:55
【问题描述】:

我想列出给定二级域的所有子域。顶级域(2LD.1LD),例如.edu.uk,或.gov.us by python

我在 python 中使用dns

import dns.resolver

answers = dns.resolver.query('stackoverflow.com', 'MX')
for rdata in answers:
    print('Host', rdata.exchange, 'has preference', rdata.preference)

但它不适用于dns.resolver.query('edu.uk', 'MX')

我也用googlesearch

from googlesearch import search
res = search("site:edu.uk",num_results=1000)
print((res))

但它只响应 100 个结果。

我想要一个包含所有子域的结果(我认为这是一个非常大的结果)。我能怎么做?谢谢大家

【问题讨论】:

  • 正如 Wes 所解释的,您的问题实际上与编程无关。但是对于“我想要一个包含所有子域的结果”,解释你为什么需要它可能很有用。如果它是一般的(任何 TLD),或者出于特定原因的一些特定的。例如,如果它是为了某种研究,您可能会与注册表争论,他们可能会允许您访问相关数据。或不。在尝试使用技术解决方案解决问题之前,一切都取决于您的确切想法。

标签: python dns subdomain google-search


【解决方案1】:

简单的答案:你不能。无论级别如何,都无法查询整个域的内容。一些(只有少数,如根)允许您使用 AXFR 传输来传输区域(如果您安装了绑定实用程序,请尝试:dig @b.root-servers.net axfr .)。但总的来说,DNS 协议现在确实允许您始终获取 DNS 记录树的内容。您可以猜测其中的一些,例如您在上图中可能会在某些区域内有 MX 记录,这通常是正确的(例外示例:没有 TLD 有 MX 记录)。您可以猜到大多数域确实有一个带有AAAAA 记录的www 前缀,但即使这样也不能确定。

简而言之:您的问题不在于 python,而在于 DNS 协议本身。如果该区域的所有者不希望您获得该区域内容的完整列表,则任何语言都无法获得该区域内容的完整列表。

[旁注:带有 NSEC 不存在记录证明的 DNSSEC 签名区域允许您“遍历”区域以获取记录名称,但我不建议您通常尝试滥用此功能 - 我们运行一个 DNS 扫描程序,甚至我们在查找签名域时也不使用这种方法——它会导致大量合法的仇恨电子邮件]

【讨论】:

  • 只是补充一点,并非所有注册的域都已发布,因此即使您可以通过 AXFR、opendata、每日发布名称列表、NSEC 步行等获得所有 DNS 数据,您仍然不需要'没有得到所有注册的名字。只是发表的那些。没有关于差异的明确统计数据,但我会使用 1% 到 5% 的已注册但未公布的名称。根据需要“所有”名称列表的原因,这可能很重要,也可能不重要。
【解决方案2】:

有些网站有一个 /robot.txt 来列出供 google 抓取的网址。如果您被允许,另一种方法是使用 burpsuite 和子域列表来扫描它们。

【讨论】:

  • 1) robots.txt 向机器人发出指令以抓取/不抓取网站的相关部分 2) 所以我认为您将事情与 sitemap.xml 混为一谈,这确实是为了列出“所有”网站上的 URL 供搜索引擎找到它们(您知道那里有不止一个搜索引擎,无需专注于一个),但是 3)所有这些甚至都没有开始给出“所有域下的所有域”的想法给定 TLD”。如果您有一个特定的想法,您可能希望扩展您的答案,因为目前它并没有回答所有暴露的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多