web-dev-qa-db-ja.com

Unixシェルを使用してホスト名からIPアドレスを取得する簡単な方法

ホスト名からIPアドレスを取得する最も簡単な方法は何ですか?

ping を試し、出力から解析することを考えていました。ただし、これはあまりよくないようで、すべてのシステムで同じように機能するとは限りません。

nslookup で少し検索して解決策を見つけましたが、/etc/hostsのホスト名では機能しません。

12
Albert

これは標準のシステムコールで実行できます。これは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ページを参照してください

5
Ether

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
11
Amber

この古代の投稿には多くの創造的な解決策があるようです。

確認する必要がある場合も/etc/hostsアクセスされる、私は使用する傾向がある

getent hosts somehost.com

これは少なくとも、 `/ etc/nsswitch.conf 'が(通常のように)ファイルを使用するように構成されている場合に機能します。

9

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

7
Tino

何故なの Dig +short hostname

(クエリDNS)

4
gWaldo

さて、私の現在の解決策:

ping -c1 -n www.google.com | head -n1 | sed "s/.*(\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)).*/\1/g"
3
Albert

一部のUnicesでは、以下が機能します。

arp <hostname>

たとえば、Mac OS Xでは、次のようになります。

arp My-iMac.local
My-iMac.local (192.168.1.2) -- no entry
0
ennuikiller

pingの使用は、通常、強い依存関係がないため、それほど悪くありません。

Linuxシステムで使用した関数は次のとおりです。

getip () { ping -c 1 -t 1 $1 | head -1 | cut -d ' ' -f 3 | tr -d '()' ; }
0
Bruno BEAUFILS