尊重 /etc/hosts 的主机查找

尊重 /etc/hosts 的主机查找

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 可以解析主机名,例如gethostbynamegetaddrinfoinet_pton其中一些可以返回多个地址和/或您可以查询所需的地址类型。

如果您想要一种便携式方式IPv4 地址,那么可能:

perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com

答案3

据我所知,唯一能满足您要求的命令是resolveip:

http://linux.die.net/man/1/resolveip

然而它只附带了 mysql-server,这可能不适合到处安装。

答案4

(此答案仅适用于您在计算机上拥有 root 权限的情况。)

我曾经也为此烦恼过,然后我就标准化了跑步域名解析在我所有的机器上。 Dnsmasq 是一个轻量级的 DNS 缓存。作为一个附带好处,它通过 DNS 提供内容/etc/hosts

相关内容