host
诸如和之类的实用程序dig
可让您查看与主机名对应的 IP 地址。
还有getent
可用于查询/etc/hosts
或其他 NSS 数据库的实用程序。
我正在寻找一个方便的标准实用程序(例如,在 Debian 中可用),它可以解析主机名,无论它是在哪里定义的。
它应该或多或少相当于
ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1'
答案1
如果问题是您不想使用 ipv6 解析这些名称,则只需要求 getent 仅使用 ipv4 即可。这将枚举所有 ipv4 地址:
giuseppe@blatta:~$ getent ahostsv4 www.google.com | cut -d' ' -f1 | sort -u
173.194.40.80
173.194.40.81
173.194.40.82
173.194.40.83
173.194.40.84
答案2
问题是有几个 API 可以解析主机名,例如gethostbyname
、getaddrinfo
和inet_pton
其中一些可以返回多个地址和/或您可以查询所需的地址类型。
如果您想要一种便携式方式一IPv4 地址,那么可能:
perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com
答案3
答案4
(此答案仅适用于您在计算机上拥有 root 权限的情况。)
我曾经也为此烦恼过,然后我就标准化了跑步域名解析在我所有的机器上。 Dnsmasq 是一个轻量级的 DNS 缓存。作为一个附带好处,它通过 DNS 提供内容/etc/hosts
。