尊重 /etc/hosts 的主机查找

Rom*_*aka 21 dns hosts

实用程序,例如hostdig让您查看与主机名对应的 IP 地址。

还有getent可用于查询/etc/hosts或其他 NSS 数据库的实用程序。

我正在寻找一个方便的标准实用程序(例如在 Debian 中可用),它可以解析主机名,而不管它在哪里定义。

它应该或多或少相当于

ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1'
Run Code Online (Sandbox Code Playgroud)

小智 16

如果问题是您不想使用 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
Run Code Online (Sandbox Code Playgroud)

  • 对于那些不想考虑 IPv4 和 IPv6 之间差异的人,请使用“getent ahosts google.com”。 (3认同)

Sté*_*las 6

事情是有几个API要像解析主机名gethostbynamegetaddrinfoinet_pton与其中的一些可以返回多个地址和/或可以查询你想要的地址类型。

如果您想要一种可移植的方式来获取一个IPv4 地址,那么也许:

perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com
Run Code Online (Sandbox Code Playgroud)


小智 4

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

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

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