背景。
有一个“dns”容器,其中正在运行缓存 dns 解析器unbound。我想从另一个“api”容器中抓取特定区域(“site.com”)的数据。
为此,“dns”解析器有一个unbound-control这样调用的实用程序:
unbound-control flush_zone site.com.
还有一个端口8953用于远程控制守护程序。
我想flush_zone site.com.从另一个容器调用命令。尝试这样做:
/srv # telnet dns 8953
Connected to dns
flush_zone site.com.
Connection closed by foreign host
我没有收到清除区域的结果。
当然,理论上,您需要将该实用程序unbound-control放在第二个“api”容器中,并使用其通过网络进行管理的能力。但我不想将另一个包拖到容器中。
因此,我想知道需要将什么发送到 dns:8953 以便清除缓存。unbound-control我没有找到任何协议信息。我无法弄清楚排序。所以我决定嗅探这些包裹。
那么,如何在 docker 容器中从命令行运行 wireshark 以监听 8953 端口,然后查看调用实用程序时那里发送的内容?
在答案中,我会写到您所说的实用程序 unbound-control 不是守护程序,当然也不是远程控制的。
您所说的端口是守护程序本身的端口,它是未绑定的。在这里,您甚至可以查看他的手册页,并看到 8953 是控制守护程序的端口。http://manpages.ubuntu.com/manpages/bionic/man5/unbound.conf.5.html
因此,我认为您已经解决了问题,绝对没有理由不将控制实用程序放在第二个容器中,因为它的设计正是为了您想要使用它的目的。
zalex-use 建议的解决方案
tcpdump。命令是这样的:之后,它仍然提供结果 log
wireshark。我在找什么:
也可以在sorts中找到提示:
NodeJS的解决方案: