获取远程主机的DNS配置

时间:2015-11-25 15:28:37

标签: python dns nslookup

我想知道如何通过Python网络应用程序获取连接到我的应用程序的远程客户端的DNS配置。

我想知道如何判断远程客户端正在使用的DNS服务器。

看起来像这样:https://www.perfect-privacy.com/dns-leaktest/

1 个答案:

答案 0 :(得分:0)

您可以从您关联的服务获得相同的信息,但

  1. 您需要的不仅仅是网络应用
  2. 信息可能不完全准确
  3. 服务的工作方式是在HTML页面中嵌入资源,而这些资源又被浏览器下载。下载需要浏览器解析域名,这允许您强制从浏览器向权威DNS服务器发出DNS请求。通过为每个客户端或请求使用唯一的域名,您可以跟踪从服务器请求唯一域名的DNS服务器。

    这个过程会是这样的:

    1. 为每个网页请求生成一个随机的唯一ID,例如rndun1qu3(必须是有效的DNS标签,请参阅RFC1035)。每次必须是一个新ID,以便它不会出现在任何DNS缓存中。

    2. 在页面中嵌入HTML <img>元素以触发下载,例如<img src="rndun1qu3.your-tracking-domain.com/example.png">。当浏览器第一次看到此域时,它将尝试解析rndun1qu3.your-tracking-domain.com。请注意,触发DNS请求的任何内容都可以用于此目的,例如AJAX调用,<script>元素等

    3. 监控到达负责rndun1qu3.your-tracking-domain.com的DNS服务器的DNS请求。当您看到rndun1qu3.your-tracking-domain.com的请求时,请记下请求DNS信息的远程对等IP地址(这将是您要查找的IP地址),然后通知您的Web应用程序。

    4. 以上解释了为什么我说你需要的不仅仅是一个网络应用程序 - 你还需要一个可以监控的DNS服务器。这可能是一个简单的vanilla DNS服务器,包含您可以监控的日志或专门构建的日志。有很多开源项目甚至是Python示例,您可以根据自己的需要进行自定义。您需要做的就是将子域的权威服务器指向该服务器。

      至于为什么信息可能不准确,请考虑DNS服务器通常配置为将所有请求转发到另一台服务器而不是通过根DNS服务器。在这种情况下,DNS请求将从最终执行名称解析的服务器(即转发器服务器)到达。例如,您的公司网络可能有一个192.168.251.1的DNS服务器,公共IP为1.2.3.4,但如果它将请求转发给Google DNS,您可能会看到该请求来自8.8.8.8(Google DNS) IP)而不是1.2.3.4。在DNS中无法找到请求查询的原始主机,因此这是您可以获得的最佳选择。