ホスト名からIPアドレスを取得する最も簡単な方法は何ですか?
ping
を試し、出力から解析することを考えていました。ただし、これはあまりよくないようで、すべてのシステムで同じように機能するとは限りません。
nslookup
で少し検索して解決策を見つけましたが、/etc/hosts
のホスト名では機能しません。
これは標準のシステムコールで実行できます。これは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
_などでシステムコールのmanページを参照してください
Host <hostname>
例:
serv ~ $ Host stackoverflow.com
stackoverflow.com has address 69.59.196.211
Linux(および少なくとも一部のOS Xバリアント)では、MySQLサーバーパッケージの一部である resolveip
を使用できる場合があります。
/etc/hosts:
...
127.0.0.1 localhost localhost.localdomain foo
...
serv ~ $ resolveip foo
IP address of foo is 127.0.0.1
この古代の投稿には多くの創造的な解決策があるようです。
確認する必要がある場合も/etc/hosts
アクセスされる、私は使用する傾向がある
getent hosts somehost.com
これは少なくとも、 `/ etc/nsswitch.conf 'が(通常のように)ファイルを使用するように構成されている場合に機能します。
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
何故なの Dig +short hostname
?
(クエリDNS)
さて、私の現在の解決策:
ping -c1 -n www.google.com | head -n1 | sed "s/.*(\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)).*/\1/g"
一部のUnicesでは、以下が機能します。
arp <hostname>
たとえば、Mac OS Xでは、次のようになります。
arp My-iMac.local
My-iMac.local (192.168.1.2) -- no entry
ping
の使用は、通常、強い依存関係がないため、それほど悪くありません。
Linuxシステムで使用した関数は次のとおりです。
getip () { ping -c 1 -t 1 $1 | head -1 | cut -d ' ' -f 3 | tr -d '()' ; }