一键获取 IPv4 和 IPv6
Posted
技术标签:
【中文标题】一键获取 IPv4 和 IPv6【英文标题】:Get IPv4 and IPv6 with one command 【发布时间】:2014-07-05 03:27:48 【问题描述】:我想知道是否可以通过一次调用 dig
来获取 IPv4 和 IPv6 地址?
例如,这给出了 IPv4 地址:
dig hostname A
这个命令会给我 IPv6 地址:
dig hostname AAAA
如何通过一个命令同时获得 IPv4 和 IPv6 地址?
【问题讨论】:
【参考方案1】:这可能是自提出问题以来已添加到 dig 中,但为了完整起见,这可以通过以下查询来完成:
dig hostname A hostname AAAA +short
来源:http://linux.die.net/man/1/dig -- 在“多个查询”部分下
【讨论】:
【参考方案2】:如果您正在查询域的权威服务器,您可以使用 ANY
查询获取名称的所有记录:
dig hostname ANY @servername
但是,如果您正在查询缓存服务器,这将无法可靠地工作。当缓存服务器响应ANY
查询时,它会返回当时恰好在缓存中的任何记录。如果名称同时有A
和AAAA
记录,但服务器最近只查找了A
记录,则AAAA
记录不会在缓存中,因此不会返回它们。
此外,还有一个提议允许 DNS 服务器拒绝回答 ANY
查询:Providing Minimal-Sized Responses to DNS Queries that have QTYPE=ANY。如果您查询实现此功能的服务器,您可能无法通过单个查询获得两个响应(尽管该草案中的一个建议是ANY
查询可能只返回所有MX
、A
、和AAAA
,因为这通常是客户想要的)。因此,为了获得最佳可靠性,您应该只进行两次查询。
【讨论】:
还有另一种方法可以在不使用 dig 命令的情况下获取两个地址? 您可以使用host
命令。默认情况下,它会执行 A
、AAAA
和 MX
查询。
请注意 ANY
是不鼓励的。 datatracker.ietf.org/doc/draft-ietf-dnsop-refuse-any/… 和 blog.cloudflare.com/deprecating-dns-any-meta-query-type【参考方案3】:
现在 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_redError: Please pass domain as first arg$digall_color_restore"
else
echo -e "$digall_color_light_blueQueries: (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_greenQuerying for $t records...$digall_color_restore$digall_color_light_cyan"
dig +noall +answer "$1" "$t"
echo -e "$digall_color_restore"
done
fi
【讨论】:
以上是关于一键获取 IPv4 和 IPv6的主要内容,如果未能解决你的问题,请参考以下文章
winsock2:服务器端代码调用`accept()`后如何获取已连接客户端的ipv4/ipv6地址
如何通过hostname获取已使用IPv6协议的IPv4地址
在 SQL Server 中查询 Maxmind GeoLite2 City Blocks csv 以获取 IPv6 和 IPv4 地址的 geoname_id