使用python脚本实时跟踪dns变化

时间:2016-06-30 11:30:59

标签: python-2.7 dns lookup

我正在尝试编写一个Python脚本,允许我实时或几乎实时地跟踪DNS名称服务器更改。

我想要做的是使用Python进行DNS查找,并检查自上次检查后是否有更改。

现在这似乎是一件非常简单明了的事情,但我遇到的问题是数据需要尽可能新鲜。

通常,名称服务器更新确实发生得非常快。我在浏览器中检查了这一点,通常可以在几分钟内看到新的记录。

问题是缓存会延迟很多事情。重复的DNS查找可能会延迟72小时。我每次检查之前都可以刷新计算机上的DNS缓存,但我觉得这样做是不切实际的。

这也无法解决ISP级别的DNS缓存问题。

我的想法是使用代理服务器进行查找并从代理列表中不断轮换服务器,以确保我得到的数据是最新的。

对于理论上应该相当简单的事情,这似乎也有点不切实际。

还有其他建议吗?

我不需要每分钟检查一次更改,但如果可能的话,我想每隔30分钟检查一次。

1 个答案:

答案 0 :(得分:0)

好的,这里有一些问题。第一个是“域的名称服务器”这个概念并不像人们希望的那样定义得很好。对于给定域,其所有权威服务器及其所有父域的权威服务器中都存在有关其名称服务器集的信息。在一个完美的世界里,他们都拥有完全相同的信息。在这个世界上,他们往往不这样做。所以你必须决定你真正想要的信息,这取决于你想要的信息(你在这里没有告诉我们)。

如果您只想监控固定域,可以在此处停止。找出您感兴趣的服务器信息,并在30秒内向其发送查询。问题解决了。

如果你想监控任意域,你会发现找出哪个域是父域并不像最初想的那么容易。鉴于有代表团跨越几个步骤(在反向查找区域中非常常见),仅仅切断标签并不能很好地工作。 Zonemaster具有查找父母的代码(从Perl到Python的翻译留给读者练习)。但是一旦你知道了父域,你就会回来决定你是想从那里获得NS信息,还是从区域自己的权威服务器那里获得。

哦,还有“什么算作单独的名称服务器?”问题。如果名称ns1.example.org指向两个IP地址,一个IPv4和一个IPv6,那么可能只一个实际服务器。但你无法确定。