host
,dig
并且nslookup
可以用来从命令行查找的DNS名称。但是,它们直接从 DNS 服务器查询名称,而不是nsswitch
用于解析主机名。这意味着不使用 /etc/hosts 和 mDNS。
是否有命令行工具可以通过标准方式(尊重 mDNS 和 /etc/hosts)查找名称?
Ask DIfferent 上有一个类似的问题,但它似乎特定于 OS X。
您可以getent
用来查询包括主机在内的各种数据库。
$ getent hosts <hostname>
如果您的服务器有 V6 地址但您想要 V4 地址,则可能需要改用 ahostsv4 DB。
$ getent ahostsv4 www.google.com
作为附加工具,您可以尝试调用gethostbyname()
程序。C 会很好,但这里有一个 perl 脚本:
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
my $ip = gethostbyname($ARGV[0]);
if (defined $ip) {
my $ip_addr = inet_ntoa($ip);
print "$ip_addr\n";
}
Run Code Online (Sandbox Code Playgroud)
如果命令行上的主机只有一个 IP,则会在下面打印。