编辑

编辑

从主机名获取 IP 地址的最简单方法是什么?

我正在考虑尝试ping并从输出中解析它。但是,这看起来不太好,并且可能不会在所有系统上都以相同的方式工作。

我搜索了一下,找到了解决方案nslookup,但这对于 中的主机名不起作用/etc/hosts

答案1

您可以使用标准系统调用来实现这一点。以下是 Perl 中的一个示例:

use strict; use warnings;
use Socket;
use Data::Dumper;

my @addresses = gethostbyname('google.com');
my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses];
print Dumper(\@ips);

产生输出:

$VAR1 = [
          '74.125.127.104',
          '74.125.127.103',
          '74.125.127.105',
          '74.125.127.106',
          '74.125.127.147',
          '74.125.127.99'
        ];

(在命令行上,相同的脚本可以写成perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print Dumper(\@ips)':)

您可以用其他语言执行类似的操作——请参阅系统调用的手册页man -s3 gethostbyname等。

答案2

host <hostname>

前任:

serv ~ $ host stackoverflow.com
stackoverflow.com has address 69.59.196.211

编辑

在 Linux 上(以及至少某些 OS X 版本),你也许能够使用resolveip,它是 MySQL 服务器包的一部分:

/etc/hosts:
 ...
 127.0.0.1     localhost localhost.localdomain foo
 ...

serv ~ $ resolveip foo
IP address of foo is 127.0.0.1

答案3

这篇古老的帖子似乎有很多创造性的解决方案。

如果我需要确保也/etc/hosts能被访问,我倾向于使用

getent hosts somehost.com

这是可行的,至少如果“/etc/nsswitch.conf”已配置为使用文件(通常都是这样)。

答案4

为什么不dig +short hostname

(查询 DNS)

相关内容