/ etc / hostsを尊重するホスト検索


19

などのユーティリティhostdigホスト名に対応するIPアドレスを見てみましょう。

getentクエリ/etc/hostsまたは他のNSSデータベースに使用できるユーティリティもあります。

ホスト名が定義されている場所に関係なくホスト名を解決する便利な標準ユーティリティ(たとえばDebianで利用可能)を探しています。

それは多かれ少なかれと同等でなければなりません

ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1'

5
何が間違っているのgetentですか?
パトリック

2
ええ、私はそれがgetentよりも便利になることはありません。
ブラッチリー

@Patrick:うーん、私はgetentDNSの見た目にも気づかなかった(見た目だけだと思った/etc/hosts)。私がそれを試したので、ここで何が間違っているのですかgetent:for google.com、それは単一のアドレスを返し、そのアドレスはIPv6です。私はIPv4ネットワークにいて、コマンドは実際にIPv4アドレスを出力するため、これは役に立ちません。
ローマンチェプリカ2013

@RomanCheplyaka-getentを使用してIPv4アドレスのみを検索する方法を示すeppesuigの回答を参照してください:unix.stackexchange.com/a/71392/7453
slm

回答:



14

ipv6を使用してこれらの名前を解決したくないという問題がある場合は、getentにipv4のみを使用するように依頼してください。これにより、すべてのipv4アドレスが列挙されます。

giuseppe@blatta:~$ getent ahostsv4 www.google.com | cut -d' ' -f1 | sort -u
173.194.40.80
173.194.40.81
173.194.40.82
173.194.40.83
173.194.40.84

履歴(つまりIPv4)を忘れる場合は、を使用しますahostsv6
リュック

2
IPv4とIPv6の違いを考慮したくない場合は、を使用してくださいgetent ahosts google.com
ミッコランタライネン

6

問題はgethostbynamegetaddrinfoなどのホスト名を解決するためのAPIがいくつinet_ptonかあり、それらのいくつかは複数のアドレスを返したり、必要なアドレスのタイプを照会できることです。

1つの IPv4アドレスを取得するポータブルな方法が必要な場合は、次のようにします。

perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com

2

(この回答は、マシンのrootである場合にのみ適用されます。)

私もこれに悩まされていたので、すべてのマシンでdnsmasqを実行することを標準化しました。Dnsmasqは軽量のDNSキャッシュです。副次的な利点として、/etc/hostsDNSのコンテンツを提供します。


2

gethostip -d name.domainsyslinuxUbuntu(およびおそらくDebian)のパッケージから。-d10進形式を出力します。


0

私は純粋なperlの知識を使用して、エラー処理を含む小さなスクリプトを作成しました。

/ usr / local / bin / gethostip:

#!/usr/bin/perl

# inspired by: /unix/71379/host-lookup-that-respects-etc-hosts#71393

use strict;
use Socket;

my $name = $ARGV[0];
if ($name eq '') {
  print STDERR "Usage: gethostip <hostname>\n";
  exit 1;
}
my $ip = inet_aton($name);
die("Unable to resolve host name $name") if ($ip eq '');
my $ipstr = inet_ntoa($ip);
print "$ipstr\n";

最初のアイデアについては、StéphaneChazelasにThx

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.