dnstop – 监控并显示网络上的 DNS 服务器流量
日志文件可以提供所需的信息,但 dnstop 就像用于 DNS 流量监控的 top 命令。首先,它是一个用于监听网络或解析保存的文件的小工具。然后它可以收集并打印本地网络 DNS 流量的统计信息。接下来,您必须具有对 /dev/bpf* 的读取权限。bpf(伯克利数据包过滤器)以独立于协议的方式为数据链路层提供原始接口。网络上的所有数据包,甚至发往其他主机的数据包,都可以通过此机制访问。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Linux 或 Unix 终端 |
类别 | 网络实用程序 |
操作系统兼容性 | BSD • Linux • Unix |
预计阅读时间 | 7 分钟 |
dnstop – 从 shell 提示符监控 BIND DNS 服务器(DNS 网络流量)
dnstop 可以从实时捕获设备(如 eth0 或 tcpdump 保存文件)读取数据包。您需要在安装缓存 DNS 服务器或 BIND 9/10 服务器的地方安装此程序。
在 Linux 上安装 dnstop
在Debian / Ubuntu Linux下输入以下apt 命令或apt-get 命令安装 dnstop :
$ sudo apt-get update
$ sudo apt-get install dnstop
在装有 BIND 9/10 的 Debian 服务器上安装 dnstop
关于Red Hat / CentOS / RHEL / Fedora Linux的说明
首先,启用 EPEL 仓库,然后使用 dnf 命令或yum 命令安装它。例如:
$ sudo dnf search dnstop
$ sudo dnf in dnstop
Alpine Linux 安装 dnstop
使用apk 命令:
# apk add dnstop
SUSE Linux
对于 SLE 12 SP3,以 root 身份运行以下 zypper 命令::
# zypper addrepo https://download.opensuse.org/repositories/home:paddg/SLE_12_SP3/home:paddg.repo
# zypper refresh
# zypper install dnstop
dnstop 源代码安装方法
使用 make 命令安装最新版本(二进制 RPM 文件见下文)。首先,访问dnstop 官方网站获取最新源代码。
使用源代码编译 dnstop
确保在你的 RHEL/Fedora/CentOS/Rocky/Alma Linux 机器上安装了 GCC(C 和 C++ 编译器)和开发工具。
您需要安装开发库,输入:
# dnf install libpcap-devel ncurses-devel
现在,使用 wget 命令获取最新的源代码,输入:
最后,编译并安装 dnstop,运行:
$ cd /tmp
$ wget https://github.com/measurement-factory/dnstop/archive/refs/heads/master.zip
$ unzip master.zip
$ cd dnstop-master/
$ ./configure
checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for a BSD-compatible install... /usr/bin/install -c checking for initscr in -lncurses... yes .... ... .. checking for strdup... yes checking for strrchr... yes checking for strstr... yes configure: creating ./config.status config.status: creating Makefile config.status: creating config.h
然后构建它:
$ make
gcc -g -O2 -DUSE_IPV6=1 -c -o dnstop.o dnstop.c gcc -g -O2 -DUSE_IPV6=1 -c -o hashtbl.o hashtbl.c gcc -g -O2 -DUSE_IPV6=1 -c -o inX_addr.o inX_addr.c gcc -g -O2 -DUSE_IPV6=1 -c -o lookup3.o lookup3.c gcc -g -O2 -DUSE_IPV6=1 -o dnstop dnstop.o hashtbl.o inX_addr.o lookup3.o -lresolv -lpcap -lncurses
最后以 root 用户身份安装 dnstop:
$ sudo make install
install -m 755 dnstop /usr/local/bin mkdir -p /usr/local/share/man/man8 install -m 644 dnstop.8 /usr/local/share/man/man8
如何在 FreeBSD 下安装 dnstop
如果您使用的是FreeBSD操作系统,如何在 FreeBSD 上安装 dnstop。
使用 dnstop 监控 DNS 服务器网络流量
您可以使用命令行选项监视各种 DNS 数据和查询。您可以使用命令行选项监视各种 DNS 数据和查询。但是,dnstop 需要知道您的网络接口名称。因此,使用 ifconfig 命令或ip 命令找出当前的网络接口名称:
$ ip link show
示例输出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether f2:3c:92:6d:14:bb brd ff:ff:ff:ff:ff:ff
如何使用 dnstop 查看 dns 流量?
只需在 shell 提示符下键入以下命令即可监控 eth0 接口的流量:
这是我在 example.com/example.com 域的权威服务器上看到的内容:
# dnstop {interface-name}
# dnstop eth0
# dnstop em0 # freebsd
2 new queries, 220 total queries Mon Aug 4 05:56:50 2008 Sources count % ---------------- --------- ------ 180.248.xxx.26 72 32.7 77.89.xx.108 7 3.2 186.xxx.13.108 5 2.3 90.xxx.94.39 4 1.8 178.xx.77.83 4 1.8 187.xxx.149.23 4 1.8 xxx.13.249.70 4 1.8 1.xxx.169.102 4 1.8 189.xx.191.126 4 1.8 xxx.239.194.97 3 1.4
dnstop 在我的缓存 DNS 服务器上运行,用于 WIFI/LAN 客户端
从二级域名获取统计数据
您可以使用 -l {level} 选项强制 dnstop 保留对域名级别名称的计数。例如,使用 -l 2(默认值),dnstop 将保留两个表:一个包含顶级域名(例如 .com、.org、.biz 等),另一个包含二级域名(例如 co.in、col.uk)。
# dnstop -l 3 eth0
请注意,增加级别可以提供更多详细信息,但也需要更多内存和 CPU 来跟踪 DNS 流量。
我如何退出或者重置计数器?
要退出 dnstop,请按 ^X(按住 [CTRL] 键并按 X)。按 ^R 可重置计数器。
如何找出产生最大流量的 TLD?
运行 dnstop 时,按1键查看第一级查询名称 (TLD):
5 new queries, 1525 total queries Mon Aug 4 06:11:09 2008 TLD count % ------------------------------ --------- ------ net 520 34.1 biz 502 32.9 in-addr.arpa 454 29.8 in 23 1.5 org 15 1.0 com 11 0.7
看起来这个 DNS 服务器正在提供更多的 .net TLD。您还可以在运行 dnstop 时通过提示2键来了解有关实际域名的更多信息:
3 new queries, 1640 total queries Mon Aug 4 06:13:20 2008 SLD count % ------------------------------ --------- ------ example.com 557 34.0 example.net 556 33.9 74.in-addr.arpa 34 2.1 208.in-addr.arpa 29 1.8 195.in-addr.arpa 28 1.7 192.in-addr.arpa 27 1.6 64.in-addr.arpa 27 1.6 theos.in 23 1.4 203.in-addr.arpa 20 1.2 202.in-addr.arpa 18 1.1 212.in-addr.arpa 15 0.9 example.com 13 0.8 217.in-addr.arpa 13 0.8 213.in-addr.arpa 12 0.7 128.in-addr.arpa 12 0.7 193.in-addr.arpa 12 0.7 simplyguide.org 12 0.7 cricketnow.in 3 0.2
要查找 3 级域名,请按3 个键:
www.example.com 60 39.0 figs.example.com 33 21.4 ns1.example.net 18 11.7 ns3.example.net 13 8.4 ns2.example.net 13 8.4 theos.in 5 3.2 example.com 5 3.2 example.com 2 1.3 jobs.example.com 1 0.6 bash.example.com 1 0.6
如何显示所见查询类型的细目分类?
您可以通过提示t键轻松找出最常请求的查询类型(A、AAAA、PTR 等)
Query Type Count % ---------- --------- ------ A? 224 56.7 AAAA? 142 35.9 A6? 29 7.3
如何知道谁在连接到我的 DNS 服务器?
按 d 查看 DNS 客户端 IP 地址:
Source Query Name Count % -------------- ------------- --------- ------ xx.75.164.90 example.net 20 9.1 xx.75.164.90 example.com 18 9.1 x.68.25.4 example.net 9 9.1 xxx.131.0.10 example.com 5 4.5 xx.104.200.202 example.com 4 4.5 202.xxx.0.2 example.com 1 4.5
选项帮助
还有更多选项可以提供当前流量的详细视图,只需输入?即可查看所有运行时选项的帮助:
s - Sources list d - Destinations list t - Query types o - Opcodes r - Rcodes 1 - 1st level Query Names ! - with Sources 2 - 2nd level Query Names @ - with Sources 3 - 3rd level Query Names # - with Sources 4 - 4th level Query Names [nixuser]- with Sources 5 - 5th level Query Names % - with Sources 6 - 6th level Query Names ^ - with Sources 7 - 7th level Query Names & - with Sources 8 - 8th level Query Names * - with Sources 9 - 9th level Query Names ( - with Sources ^R - Reset counters ^X - Exit ? - this
总结
我发现 dnstop 对于 BIND 9/10 权威服务器和缓存服务器都很有用,可以让 LAN 用户在我的网络上获取 DNS 流量。使用 man 命令/help 命令阅读 dnstop 命令文档,或在项目主页上在线阅读:
$ man dnstop