如何让 dig 显示它正在发送查询的 IP 地址?

如何让 dig 显示它正在发送查询的 IP 地址?

默认情况下,当 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

相关内容