回答:
これは、標準のシステムコールで実行できます。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
などでシステムコールのマニュアルページを参照してください。
perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("www.google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print $ips[0]'
。
sed -e '/some people consider Perl a better form/s/better/worse/'
SCNR
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
/etc/hosts
)をお試しくださいhost localhost
。
resolveip
私のDebianにデフォルトでインストールされていません。
IPv4には、/ etc / hostsを含むリゾルバーを使用してすぐに動作する標準プログラムがあります。
host="localhost"
ip="`gethostip -d "$host"`"
Debianの一部であるため、次のようにインストールします。
apt-get install syslinux
IPv4以外のプロトコル(IPv6など)については、現在、同様のツールを知りません。更新: このため、IPv6を解決できる小さなツールを作成しました。
https://github.com/hilbix/misc/blob/master/src/ipof.c
gethostip
IPv6のような、しかし許可された迅速で汚いシェルの使用も考えられます:
ip="`ipof -6 -- heise.de`"
また、たとえば次のようにインタラクティブに使用することもできます。
ipof -a -d -x -v -h -
HTH
さて、私の現在のソリューション:
ping -c1 -n www.google.com | head -n1 | sed "s/.*(\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)).*/\1/g"
sed
各システムでわずかに異なる動作をするようです。:)どのように迷惑。少し変更しましたが、今ではどこでも動作するはずです。
どうしてdig +short hostname
?
(クエリDNS)
/etc/hosts
考慮されません。
ping
一般的に強力な依存関係がないため、使用はそれほど悪くありません。
Linuxシステムで使用した関数は次のとおりです。
getip () { ping -c 1 -t 1 $1 | head -1 | cut -d ' ' -f 3 | tr -d '()' ; }
nmap -sP 192.168.1.0/24|grep SEARCHED_HOSTNAME|sed -n 's/.*[(]\([0-9\.]*\)[)].*/\1/p'