【问题标题】:Find out domain for given IPv4/IPv6 address (not rDNS/PTR)找出给定 IPv4/IPv6 地址的域(不是 rDNS/PTR)
【发布时间】:2014-12-04 15:54:37
【问题描述】:

是否可以获得解析为给定 IPv4/IPv6 地址的域名?

我想查询系统DNS缓存一定有办法,但我没有找到任何合适的解决方案。

另外,我对 rDNS/PTR 不感兴趣,它很容易获得,但在系统最近解析的域名中,它指向给定的 IP 地址。

我的主要兴趣是 Android 操作系统,但您也可以提供其他平台的解决方案。

【问题讨论】:

标签: android linux dns language-agnostic


【解决方案1】:

Android 中没有操作系统级别的 DNS 缓存,请参阅

https://android.stackexchange.com/questions/18002/is-there-a-way-to-list-the-local-dns-cache

编辑:这显然取决于 Android 版本。当前版本使用仿生 DNS 缓存,请参阅

http://osxr.org/android/source/bionic/libc/netbsd/resolv/res_cache.c

您可以使用__get_res_cache 访问缓存。这是一个内存中的每个进程的缓存。

如果您有权访问已配置的递归解析器,则可以尝试访问其缓存(例如,通过登录或安装服务以允许远程访问缓存)。

【讨论】:

  • 这听起来像是一个正确的答案,说per-process cache意味着没有办法为所有进程获取缓存?同样在实现中,它看起来像每个接口返回数据,而不是每个进程。
  • 两者都是正确的:没有系统范围的缓存,甚至每个进程的缓存都有每个接口的单独缓存(这是明智的,因为为接口配置的递归解析器可能会给出有趣的结果'不匹配“全球”DNS)。
【解决方案2】:

没有通用的方法可以满足您的要求。可能有一些方法可以通过您正在使用的任何 DNS 解析系统的内部来查看最终在其缓存(或类似)中发生的事情,但这将高度依赖于系统。据我所知,没有任何系统将此作为受支持的功能。有些有一些帮助(例如,BIND 有rndc dumpdb,它将当前缓存转储到文件中)。在任何情况下,您都必须参考系统文档。

根据您想要这样做的原因,最不坏的选择可能是窥探相关网络接口以获取经过的 A 和 AAAA 记录。

【讨论】:

  • 您能否为问题中的主要操作系统 Android 提出解决方案?因为拦截所有接口(和网桥)上的整个网络流量只是为了嗅探 UDP/TCP DNS 通信确实是开销。
猜你喜欢
  • 2015-01-17
  • 2017-07-03
  • 2017-06-24
  • 2013-09-18
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多