2011-11-11 6 views
2

与えられたホスト名が実際にJavaに存在するかどうかをテストしますか?与えられたホスト名が実際に存在するかどうかをテストするには?

OpendnsのようないくつかのDNSサービスでは、存在しないDNSエントリでもIPアドレスを返す問題があるため、InetAddress.getByName(host)は常に何かを返します。

しかし、hostコマンドは何とかそれを検出することが可能である:「実際に存在する」

~$ host owqieyuqowiery.com 
owqieyuqowiery.com has address 67.215.77.132 
Host owqieyuqowiery.com not found: 3(NXDOMAIN) 
+1

このプロジェクトは役に立ちますか? http://www.dnsjava.org/dnsjava-current/examples.html – r0ast3d

+0

OpenDNSからの回答を信頼できない場合は、**それらを使用しないでください! ** – Alnitak

+0

@Alnitak私はソフトウェアがどこにホストされているのかを制御しないので、助けにならない。 – Viliam

答えて

4

はあなたが何を意味するかに依存しますそのドメインが登録されていて、その背後にウェブサイトがあることを意味しますか?ホスト名は、特定のシステムのIPアドレスと比較して、読みやすく/記憶しやすい形式です。言い換えれば、私は登録されたドメインを持つことができます(ドメインのどこかに公的にアクセス可能な短い名前です)、ドメインが指し示すサーバー上にWebサイトをホストせず、リアル"。

あなただけA、レコードを検索したい場合は、ここでのソリューションです:

あなたはhostが何を知りたい場合は、可能性がありますなぜそれが何をするのかを明らかにして、そこにいくつかの情報があります:http://linux.die.net/man/1/hostこれは失敗すると、DNSルックアップが失敗したことを意味します。つまり、そのドメインを検索するためにhostに接続されているDNSサーバーがゼロの結果を返しました。

また、hostは、DNS Aレコード(ウェブサイトで使用されているもの)以上のものを返します。 InetAddress.getByName(address).isReachable(timeout);代わり

$ host google.com 
google.com has address 74.125.225.48 
google.com has address 74.125.225.49 
google.com has address 74.125.225.50 
google.com has address 74.125.225.51 
google.com has address 74.125.225.52 
google.com mail is handled by 20 alt1.aspmx.l.google.com. 
google.com mail is handled by 30 alt2.aspmx.l.google.com. 
google.com mail is handled by 40 alt3.aspmx.l.google.com. 
google.com mail is handled by 50 alt4.aspmx.l.google.com. 
google.com mail is handled by 10 aspmx.l.google.com. 
+0

基本的にDNSにAレコードがあるかどうかを知る必要があります。 – Viliam

+0

ああ、誰かが書いたサンプルコードを指すように答えを更新しました。 – jefflunt

2

用途:それはまた、あなたのMX(メールサーバ)レコードなど

例を与えるだろう。

+0

これはかなり単純な方法ですが、指定されたドメインのDNSレコードが存在するかどうかを知らせるのではなく、ICMP要求またはポート7のTCP接続を介して接続できるかどうかだけを伝えます。 http://docs.oracle.com/javase/6/docs/api/java/net/InetAddresshtml#isReachable(int) – jefflunt

+0

Opendnsのサーバーをテストするので、isReachableは任意のホスト名に対してtrueを返します。 – Viliam

1

(それが存在しないドメインについてあるかもしれないので)あなたがローカルに設定されたリゾルバを信頼することはできません唯一の選択肢は、当該ドメインの直接クエリ権威ネームサーバ(複数可)にある場合。

Javaの場合、これはdnsjavaライブラリを使用して行う必要があります。

ルートネームサーバーから開始し、適切な権限ネームサーバーを見つけるために、参照チェーンを(通常の再帰サーバーと同じ方法で)ダウンする必要があります。

+0

それは素晴らしいアドバイスです。あなたは 'dnsjava'を使ってそれを行うサンプルコードを持っていますか? –

関連する問題