![如何让 dig 显示它正在发送查询的 IP 地址?](https://linux22.com/image/775723/%E5%A6%82%E4%BD%95%E8%AE%A9%20dig%20%E6%98%BE%E7%A4%BA%E5%AE%83%E6%AD%A3%E5%9C%A8%E5%8F%91%E9%80%81%E6%9F%A5%E8%AF%A2%E7%9A%84%20IP%20%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
默认情况下,当 DNS 服务器没有响应时,dig
不会显示有关正在发送的查询的任何信息。我可以使用该+qr
选项查看正在发送的每个查询:
$ dig +qr archive.ubuntu.com
; <<>> DiG 9.16.1-Ubuntu <<>> +qr archive.ubuntu.com
;; global options: +cmd
;; Sending:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21059
;; flags: rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: ec2af2d60803b6a5
;; QUESTION SECTION:
;archive.ubuntu.com. IN A
;; QUERY SIZE: 59
不幸的是,我仍然没有看到我最需要的信息 - 查询发送到的 IP 地址,理想情况下还有端口号。是否可以dig
显示这些信息?
我可以看到有关失败的 TCP 连接的信息,但我也希望看到失败的 UDP 查询。
$ dig +tcp archive.ubuntu.com
;; Connection to 172.29.128.1#53(172.29.128.1) for archive.ubuntu.com failed: timed out.
答案1
自ISC BIND 9.15.4 版本于2019-09发布,dig
支持包含DNS服务器的协议,地址和端口的YAML输出。
使用以下方法提取值的示例yq
:
dig +yaml www.seznam.cz | yq -r '.[] | select(.type=="MESSAGE") | .message |
[.socket_protocol, .response_address, .response_port] | @tsv'
UDP 172.31.112.1 53
格式化输出的不同方式的示例:
dig +yaml www.seznam.cz | yq -r '.[] | select(.type=="MESSAGE") | .message |
"\(.response_address):\(.response_port)"'
172.31.112.1:53