AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 398160
Accepted
Jason
Jason
Asked: 2012-06-13 22:32:20 +0800 CST2012-06-13 22:32:20 +0800 CST 2012-06-13 22:32:20 +0800 CST

如何获取公共DNS服务器地址?

  • 772

我需要能够识别内部网络中的哪些公共 DNS 服务器机器正在使用查询。澄清一下,我不需要内部 DNS 服务器或网络设备的 IP 或名称。我需要一种可编写脚本的方式来识别他们在转发查询时调用的公共服务器。例如,我在家庭网络上,我的路由器地址是 172.16.1.1 - 它被编程为使用 4.2.2.1 和 4.2.2.2 进行名称解析。我需要能够捕获这些地址。解析 ip/ifconfig 或登录路由器等都不是选项。

我已经尝试从 nslookups 和 dig 中获取信息,但我似乎无法在开始递归之前首先获取实际获取查询的服务器。内部 DNS 服务器已识别,但我看不到下一跃点。

有任何想法吗 ?Unix 或 Dos 或 Windows 等,欢迎任何解决方案。

domain-name-system bind trace
  • 3 3 个回答
  • 2098 Views

3 个回答

  • Voted
  1. Best Answer
    200_success
    2012-06-14T00:09:02+08:002012-06-14T00:09:02+08:00

    确实没有办法完成您的任务,因为 DNS 服务器可以以任何它认为合适的方式解析查询,这对客户端来说是一个黑匣子。但是,有可能接近回答您的问题。

    诀窍是设置一个带有特殊名称服务器的子域,该名称服务器对任何A查询的响应都简单地回应发出查询的主机的 IP 地址。这样的名称服务器可以使用Net::DNS::Nameserver模块在 Perl 中实现:


    #!/usr/bin/perl
    
    use Net::DNS::Nameserver;
    
    Net::DNS::Nameserver->new(
        # w.x.y.z is the IP address of the host where this code is running
        LocalAddr => ['w.x.y.z'],
        ReplyHandler => sub {
            my ($qname, $qclass, $qtype, $peerhost, $query) = @_;
            my ($rcode, @ans, @auth, @add) = ('NXDOMAIN');
            print "Received query for $qname from $peerhost\n";
    
            if ($qtype eq 'A') {
                $rcode = 'NOERROR';
                push @ans, Net::DNS::RR->new("$qname 1 $qclass $qtype $peerhost");
            }
            return ($rcode, \@ans, \@auth, \@add, { aa => 1});
        },
    )->main_loop;
    

    接下来,配置一些域的NS记录以指向这个特殊的名称服务器。我已经为一个名为resolverid.acrotect.com. (作为对您的服务,接下来几天我将让代码在那里运行。)

    然后,从您网络中的客户端发出几个不同的 DNS 查询:

    dig +short cachebuster1.resolverid.acrotect.com
    dig +short cachebuster2.resolverid.acrotect.com
    dig +short cachebuster3.resolverid.acrotect.com
    

    这将导致您的名称服务器通过联系被操纵的名称服务器来解析查询,该名称服务器会回复转发查询的机器的 IP 地址。在某些情况下,该地址是您的“私有”名称服务器的“公共”端,这正是您所要求的。

    在其他情况下,基础设施更为复杂。例如,如果您配置为使用 Google DNS 服务器 8.8.8.8 和 8.8.4.4,那么您实际上使用的是地理分布的名称服务器池。向被操纵的名称服务器发出查询的 Google 服务器可能没有 8.8.8.8 或 8.8.4.4 附近的任何 IP 地址。但是,您可以通过对响应执行反向 IP 或 WHOIS 查找来查看它属于 Google。(有趣的是,如果你使用谷歌 DNS 进行反向 IP 查找,你会看到谷歌已经根据A你刚刚执行的查找优化了反向 IP 查找。PTR它返回的是something.resolverid.acrotect.com。为了打破这种优化,你必须做dig +trace -x a.b.c.d。)

    • 1
  2. NekojiruSou
    2012-06-13T22:54:39+08:002012-06-13T22:54:39+08:00

    您需要捕获(想想tcpdump在 unix 上)在有问题的主机和 Internet 之间流动的数据,寻找发送到端口 53 的查询(通常,udp 但也可以使用 tcp)并解析转储的输出。

    您需要tcpdump在网关系统本身上运行,或者,如果您有托管交换机,则需要从处于监控模式的端口运行。

    • 0
  3. martyvis
    2012-06-13T23:52:20+08:002012-06-13T23:52:20+08:00

    我不相信你可以(通过巧妙地使用客户端的 DNS)。

    让 DNS 解析器为您递归的全部意义在于,它会代表您回答您的查询。它从哪里得到它们与你无关(作为一个单纯的 DNS 客户端)。

    • 0

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve