dnspeep:监控 DNS 查询的工具 - DNS服务器

admin3年前主机评测27

在过去的几天中,我编写了一个叫作 dnspeep 的小工具,它能让你看到你电脑中正进行的 DNS 查询,并且还能看得到其响应。它现在只有 250 行 Rust 代码。

我会讨论如何去尝试它、能做什么、为什么我要编写它,以及当我在开发时所遇到的问题。


如何尝试

 

我构建了一些二进制文件,因此你可以快速尝试一下。

对于 Linux(x86):

    wget http://github/jvns/dnspeep/releases/download/v0.1.0/dnspeep-linux.tar.gztar -xf dnspeep-linux.tar.gzsudo ./dnspeep

对于 Mac:

    wget http://github/jvns/dnspeep/releases/download/v0.1.0/dnspeep-macos.tar.gztar -xf dnspeep-macos.tar.gzsudo ./dnspeep

它需要以超级用户root身份运行,因为它需要访问计算机正在发送的所有 DNS 数据包。 这与 tcpdump 需要以超级身份运行的原因相同:它使用 libpcap,这与 tcpdump 使用的库相同。

如果你不想在超级用户下运行下载的二进制文件,你也能在 github/jvns/dnspeep 查看源码并且自行编译。


输出结果是什么样的

 

以下是输出结果。每行都是一次 DNS 查询和响应:

    $ sudo dnspeepquery name server IP responseA firefox.com 192.168.1.1 A: 44.235.246.155, A: 44.236.72.93, A: 44.236.48.31AAAA firefox.com 192.168.1.1 NOERRORA bolt.dropbox.com 192.168.1.1 CNAME: bolt.v.dropbox.com, A: 162.125.19.131

这些查询是来自于我在浏览器中访问的 neopets,而 bolt.dropbox 查询是因为我正在运行 Dropbox 代理,并且我猜它不时会在后台运行,因为其需要同步。


为什么我要开发又一个 DNS 工具?

 

之所以这样做,是因为我认为当你不太了解 DNS 时,DNS 似乎真的很神秘!

你的浏览器(和你电脑上的其他软件)一直在进行 DNS 查询,我认为当你能真正看到请求和响应时,似乎会有更多的“真实感”。

我写这个也把它当做一个调试工具。我想“这是 DNS 的问题?”的时候,往往很难回答。我得到的印象是,当尝试检查问题是否由 DNS 引起时,人们经常使用试错法或猜测,而不是仅仅查看计算机所获得的 DNS 响应。


你可以看到哪些软件在“秘密”使用互联网

 

我喜欢该工具的一方面是,它让我可以感知到我电脑上有哪些程序正使用互联网!例如,我发现在我电脑上,某些软件出于某些理由不断地向 ping.manjaro.org 发送请求,可能是为了检查我是否已经连上互联网了。

实际上,我的一个朋友用这个工具发现,他的电脑上安装了一些以前工作时的企业监控软件,但他忘记了卸载,因此你甚至可能发现一些你想要删除的东西。


如果你不习惯的话, tcpdump 会令人感到困惑

 

当我试图向人们展示他们的计算机正在进行的 DNS 查询时,我的第一感是想“好吧,使用 tcpdump”!而 tcpdump 确实可以解析 DNS 数据包!

例如,下方是一次对 incoming.telemetry.mozilla.org. 的 DNS 查询结果:

    11:36:38.973512 wlp3s0 Out IP 192.168.1.181.42281 > 192.168.1.1.53: 56271+ A? incoming.telemetry.mozilla.org. (48)11:36:38.996060 wlp3s0 In IP 192.168.1.1.53 > 192.168.1.181.42281: 56271 3/0/0 CNAME telemetry-incoming.r53-2.services.mozilla.com., CNAME prod.data-ingestion.prod.dataops.mozgcp.net., A 35.244.247.133 (180)

绝对可以学着去阅读理解一下,例如,让我们分解一下查询:

192.168.1.181.42281 > 192.168.1.1.53: 56271+ A? incoming.telemetry.mozilla.org. (48)

A? 意味着这是一次 A 类型的 DNS 查询incoming.telemetry.mozilla.org. 是被查询的名称56271 是 DNS 查询的 ID192.168.1.181.42281 是源 IP/端口192.168.1.1.53 是目的 IP/端口(48) 是 DNS 报文长度

在响应报文中,我们可以这样分解:

56271 3/0/0 CNAME telemetry-incoming.r53-2.services.mozilla., CNAME prod.data-ingestion.prod.dataops.mozgcp., A 35.244.247.133 (180)

3/0/0 是在响应报文中的记录数:3 个回答,0 个权威记录,0 个附加记录。我认为 tcpdump 甚至只打印出回答响应报文。CNAME telemetry-incoming.r53-2.services.mozillaCNAME prod.data-ingestion.prod.dataops.mozgcp. 和 A 35.244.247.133 是三个响应记录。56271 是响应报文 ID,和查询报文的 ID 相对应。这就是你如何知道它是对前一行请求的响应。

我认为,这种格式最难处理的是(作为一个只想查看一些 DNS 流量的人),你必须手动匹配请求和响应,而且它们并不总是相邻的行。这就是计算机擅长的事情!

因此,我决定编写一个小程序(dnspeep)来进行匹配,并排除一些我认为多余的信息。


我在编写时所遇到的问题

 

在撰写本文时,我遇到了一些问题:

我必须给 pcap 包打上补丁,使其能在 Mac 操作系统上和 Tokio 配合工作(这个更改)。这是其中的一个 bug,花了很多时间才搞清楚,用了 1 行代码才解决 :smiley:不同的 Linux 发行版似乎有不同的 libpcap.so 版本。所以我不能轻易地分发一个动态链接 libpcap 的二进制文件(你可以 在这里 看到其他人也有同样的问题)。因此,我决定在 Linux 上将 libpcap 静态编译到这个工具中。但我仍然不太了解如何在 Rust 中正确做到这一点作,但我通过将 libpcap.a 文件复制到 target/release/deps 目录下,然后直接运行 cargo build,使其得以工作。我使用的 dns_parser carte 并不支持所有 DNS 查询类型,只支持最常见的。我可能需要更换一个不同的工具包来解析 DNS 数据包,但目前为止还没有找到合适的。因为 pcap 接口只提供原始字节(包括以太网帧),所以我需要 编写代码来计算从开头剥离多少字节才能获得数据包的 IP 报头。我很肯定我还遗漏了一些情形。

我对于给它取名也有过一段艰难的时光,因为已经有许多 DNS 工具了(dnsspy!dnssnoop!dnssniff!dnswatch!)我基本上只是查了下有关“监听”的每个同义词,然后选择了一个看起来很有趣并且还没有被其他 DNS 工具所占用的名称。

该程序没有做的一件事就是告诉你哪个进程进行了 DNS 查询,我发现有一个名为 dnssnoop 的工具可以做到这一点。它使用 eBPF,看上去很酷,但我还没有尝试过。


可能会有许多 bug

 

我只在 Linux 和 Mac 上简单测试了一下,并且我已知至少有一个 bug(不支持足够多的 DNS 查询类型),所以请在遇到问题时告知我!

尽管这个 bug 没什么危害,因为这 libpcap 接口是只读的。所以可能发生的最糟糕的事情是它得到一些它无法解析的输入,最后打印出错误或是崩溃。


编写小型教育工具很有趣

 

最近,我对编写小型教育的 DNS 工具十分感兴趣。

到目前为止我所编写的工具:

dns-lookup.jvns.ca(一种进行 DNS 查询的简单方法)dns-lookup.jvns.ca/trace(向你显示在进行 DNS 查询时内部发生的情况)本工具(dnspeep

以前我尽力阐述已有的工具(如 dig 或 tcpdump)而不是编写自己的工具,但是经常我发现这些工具的输出结果让人费解,所以我非常关注以更加友好的方式来看这些相同的信息,以便每个人都能明白他们电脑正在进行的 DNS 查询,而不仅仅是依赖 tcmdump。

原文地址:linux/article-13353-1

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

稳定便宜vps(稳定便宜的梯子)

稳定便宜VPS及稳定便宜的梯子在如今互联网高速发展的时代,网络已经成为人们生活中必不可少的一部分。本文将重点介绍稳定便宜的VPS和梯子。目前市面上有很多VPS服务商,价格、配置和稳定性也各不相同。选择...

塔城商标注册办理_塔城商标申请/转让/查询/代理公司

塔城商标注册,商标评审案件申请,疑难商标事件处理,塔城商标查询及相关事务调查,塔城商标事务咨询、商标及品牌策划、商标设计、商标取名及版权、专利等知识产权代理咨询,为用户提供关于的塔城商标注册申请,免费...

租用比利时服务器需要注意哪些事项(租用比利时服务器需要注意哪些事项呢)

因此,选择比利时服务器租用服务商时,需要了解其安全措施是否完善,如防火墙、杀毒软件、备份等。价格是选择比利时服务器租用服务商时的一个重要考虑因素,但不应该仅仅以价格为唯一标准。总之,选择比利时服务器租...

2023阿里云栖大会:阿里云发布自研CPU芯片倚天710,性能超业界标杆20%

10月19日召开的2023阿里云栖大会现场,阿里巴巴旗下半导体公司平头哥发布自研云芯片倚天710。这是阿里云推进“一云多芯”策略的重要一步,也是阿里第一颗为云而生的CPU芯片,将在阿里云数据中心部署应...

#Jtti限时特惠#,香港大带宽服务器最高优惠65%,100M大带宽$117起

新加坡主机商Jtti.cc近日推出了香港大带宽服务器优惠活动,最高可以优惠65%,100M大带宽$117起,配备最新E5处理器和SSD固态硬盘,稳定可靠性能好,套餐免费送20G DDoS防御,非常划算...

Webhosting24:日本/新加坡KVM VPS,$17/年/1核/512MB内存/7G NVMe/250G流量@1Gbps带宽

webhosting24怎么样?webhosting24商家新推出了日本东京和新加坡kvm vps(NVMe VPS),CPU为AMD Ryzen 3900,NVMe硬盘,1Gbps带宽,支持IPv6...