51

我想知道是否可以通过一次调用获得 IPv4 和 IPv6 地址dig

例如,这给出了 IPv4 地址:

dig hostname A

这个命令会给我 IPv6 地址:

dig hostname AAAA

如何仅使用一个命令同时获取 IPv4 和 IPv6 地址?

4

3 回答 3

79

自从提出问题以来,这可能已被添加到 dig 中,但为了完整起见,这可以通过以下查询来完成:

dig hostname A hostname AAAA +short

来源:http ://linux.die.net/man/1/dig——在“多个查询”部分下

于 2015-09-04T11:58:05.937 回答
47

如果您正在查询域的权威服务器,您可以通过ANY查询获取名称的所有记录:

dig hostname ANY @servername

但是,如果您正在查询缓存服务器,这将无法可靠地工作。当缓存服务器响应ANY查询时,它会返回当时恰好在缓存中的任何记录。如果名字有AAAAA记录,但是服务器最近才查过A记录,AAAA记录不会在缓存中,所以不会返回。

此外,还有一个建议允许 DNS 服务器拒绝回答ANY查询:为具有 QTYPE=ANY 的 DNS 查询提供最小大小的响应。如果您查询实现此功能的服务器,您可能无法通过单个查询获得两个响应(尽管该草案中的一个建议是ANY查询可能只返回 all MXAAAAA,因为这通常是客户想要的)。因此,为了获得最佳可靠性,您应该只进行两次查询。

于 2014-05-16T15:56:30.920 回答
0

现在 IPv6 更为常见,我发现自己经常需要同时查询 A 和 AAAA。我似乎永远记不住语法,所以我终于为我的~/.bashrc被调用写了一个函数digall。我和一些朋友分享了它,他们很喜欢它,所以我把它扔到了 github 上,欢迎任何人使用: https ://gist.github.com/FreedomBen/23020c464779bb30cab754d92bdce6c6

这是当前版本,您可以将其放入路径中的文件并标记为可执行文件:

#!/usr/bin/env bash

#
# To use, simply run `digall <domain>` such as:
#
#   digall example.com
#   digall sub.example.com
#
# Place this file in your PATH.  Suggest either /usr/local/bin/ or ~/bin
#
# Alternatively you can wrap it in a function called `digall` and put in ~/.bashrc
#

# License:  MIT

declare -rx digall_color_restore='\033[0m'
declare -rx digall_color_red='\033[0;31m'
declare -rx digall_color_light_green='\033[1;32m'
declare -rx digall_color_light_blue='\033[1;34m'
declare -rx digall_color_light_cyan='\033[1;36m'

if [ -z "$1" ]; then
  echo -e "${digall_color_red}Error: Please pass domain as first arg${digall_color_restore}"
else
  echo -e "${digall_color_light_blue}Queries: (dig +noall +answer '$1' '<type>')...${digall_color_light_cyan}\n"

  for t in SOA NS SPF TXT MX AAAA A; do
    echo -e "${digall_color_light_green}Querying for $t records...${digall_color_restore}${digall_color_light_cyan}"
    dig +noall +answer "$1" "${t}"
    echo -e "${digall_color_restore}"
  done
fi
于 2022-01-01T19:37:59.670 回答