【问题标题】:Capture DNS requests on opening html using Python使用 Python 在打开 html 时捕获 DNS 请求
【发布时间】:2015-10-08 17:30:44
【问题描述】:

我希望识别打开 html 文件(使用 Python)时会发出的 DNS 请求。具体来说,我正在查看将从哪些域资源加载,该页面是否在网络浏览器中打开。我实际上并不想发出 DNS 请求或加载外部资源,只是确定它们将是什么(或者更具体地说,它们将来自哪里)。

(我有一堆 [数百万] 个 html 文件,我想确定每个域会尝试从哪些域加载外部资源)。

我假设必须有一个 Python 包可以帮助解决这个问题,但似乎找不到它 - 寻找正确方向的点,而不是完全开发的代码。

【问题讨论】:

  • 在 Linux 命令行上试试这个:grep -r -o -P '(?<=http://)[^/"]*(?=[/\"])' 2>/dev/null | grep -P -o '(?<=:).*' | sort -u.

标签: python html python-2.7 dns


【解决方案1】:

很抱歉,但非常罕见的是,Python 将是您实现目标所需的最后一件事。这是因为使用 Python 时,您既不能解释 HTML 的方式,也不能以发出您所追求的相关 Web 请求的方式来解释 HTML,Python 也不是在您的机器上挂钩 DNS 查找的最佳工具。

我宁愿建议使用可编写脚本的无头浏览器(如 PhantomJS)来请求存档中的所有 HTML 页面(最好通过本地 Web 服务器)。然后,无头服务器不仅会读取 HTML 源代码(就像 python requests.get 那样),还会解释嵌入式 JavaScript 并加载远程 links(如 CSS 样式表)、图像等。只有这样才会产生您想了解的 DNS 查找。

然后您应该安装一个本地“间谍”DNS 服务器,您可以控制该服务器以找出查找了哪些 DNS 条目。一个很棒的教程,如何在 linux 下设置这样的服务器可以找到here。是的,Python 也有空间,因为您需要分析和压缩“间谍”DNS 服务器的日志文件。

【讨论】:

    猜你喜欢
    • 2017-03-01
    • 2015-03-04
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多