0

これが方法です-

public static String getHostByAddr(byte[] addr) throws UnknownHostException {

    Name name = ReverseMap.fromAddress(InetAddress.getByAddress(addr));

    final String[] servers = new String[] {"208.67.220.220", "208.67.222.222"};
    final Resolver res = new ExtendedResolver(servers);
    final Lookup lookUp = new Lookup(name, Type.PTR);
    lookUp.setResolver(res);
    Record[] records = lookUp.run();
    if (records == null) {
        throw new UnknownHostException();
    }
    return ((PTRRecord) records[0]).getTarget().toString();
}

そして、これが上記のメソッドへの呼び出しです-

    final InetAddress ip = InetAddress.getByName("198.154.218.168");
    final byte[] bytes = ip.getAddress();
    final String host = getHostByAddr(bytes);
    System.out.println("Host - " + host);

ほとんどの場合は問題なく動作しますが、IP が複数のドメインにマップされていると失敗します (???)

ここに例があります-

  1. ここからsecuronix.comの IP を取得します。198.154.218.168 です。
  2. このIPを上記のメソッドに渡すと、エラーが発生します
  3. しかし、ここで同じ IP を試してみると、4 つのドメインが一覧表示されます。

DNSJavaでこれを行うことは可能ですか?

4

2 に答える 2

4

一般的には、できません。ドメイン securonix.com の所有者が DNS サーバー上に securonix.com を 198.154.218.168 に変換するエントリを作成したように、IP アドレス 198.154.218.168 の所有者は「逆」DNS レコードを維持します (通常は別のサーバー上)。 IP アドレスをデフォルトの DNS 名にマップします。逆引き DNS ルックアップの詳細については、ウィキペディアの「逆引き DNS ルックアップ」のページを参照してください。IP アドレスから名前への逆引き DNS ルックアップは、多くの場合、ドメイン名の所有者とは異なる所有者によって管理されていることに注意してください。名前とIPアドレスを交換して「自動的に」作成されるだけではありません。

さらに、あなたが言及したサイトには、その IP アドレスの逆引き DNS エントリがないようです。そのため、標準の DNS クエリから 198.154.218.168 の回答を得ることはありません。198.154.218.168 の (逆の) DNS エントリがないだけで、上記のコードは失敗します。

順方向と逆方向の DNS ルックアップの違いの例として、最初に静的 IP アドレスを割り当てられたとき、プロバイダー (Comcast) は IP アドレスを 75-148-###-###- のような一般的な名前にマッピングしました。 Houston.hfc.comcastbusiness.net (ランダムな IP アドレスの例) で、IP アドレスとドメイン名の正引きと逆引きが一致するように、代わりに逆引き DNS エントリを変更して自分のドメインの名前にマップするように依頼しました。彼らは DNS サーバーでIP アドレスのルックアップを維持し、私はDNS サーバーでドメイン名のルックアップを維持しました。

yougetsignal.com のページは、名前の DNS (前方) ルックアップを実行し、購入可能な巨大なデータベースにそれらを保存していたに違いありません。これにより、Web ページは同じ IP を持つすべての名前を見つけることができます。しかし、かなりの追加情報を持っているか、そのサイトのように何百万ものルックアップをすでに行っていない限り、DNS サーバーにクエリを実行して任意の IP アドレスを取得する簡単な方法はありません。

于 2013-04-10T07:51:28.877 に答える
0

この機能を提供する Web サイトが 2 つあることがわかりました。ただし、その機能をどのように実装するかはわかりません。

更新: domaintools は API 呼び出しを提供します。おそらく、domaintools api を呼び出して、単一の IP に対して複数のドメイン名を取得できます。

于 2013-12-27T16:28:38.610 に答える