1

この関数を使用してwhoisデータを取得しようとしています:

function getDomain()
$domain = 'stackoverflow.com';
$whois = '';
$connection = @fsockopen('whois.internic.net', 43);
if ($connection) {
    @fputs($connection, $domain ."\r\n");
    while (!feof($connection)) {
        $whois .= @fgets($connection, 128);
    }
}
fclose($connection);
return $whois;
}

一部のドメインではうまく機能しますが、「apple.com」、「cnn.com」、または「google.com」を試してみると、次のようになります。

APPLE.COM.ZON.COM
APPLE.COM.WWW.ZON.COM
APPLE.COM.WWW.BEYONDWHOIS.COM
APPLE.COM.WAS.PWNED.BY.M1CROSOFT.COM
APPLE.COM.MORE.INFO.AT.WWW.BEYONDWHOIS.COM
APPLE.COM.IS.OWN3D.BY.NAKEDJER.COM
APPLE.COM.IS.0WN3D.BY.GULLI.COM
APPLE.COM.DENIS.DA.DOIDE.DA.PIEM.UNIX-BG.COM
APPLE.COM.BEYONDWHOIS.COM
APPLE.COM.AT.WWW.BEYONDWHOIS.COM
APPLE.COM
4

2 に答える 2

2

スクリプトのみのクエリ

whois.internic.net

世界中にいくつかのドメイン/IP プロバイダーがあることを覚えておいてください。

ほとんどの Linux ディストリビューションで提供されているような本格的なツールは、いくつかの異なるサーバーを試してから、それらすべてのデータを調べて、どのサーバーが信頼できるサーバーであるかを判断することを知っています。

記憶から、私は 5 つの世界的な権威ゾーンがあると信じています。

whois.afrinic.net
whois.lacnic.net
whois.arin.net
whois.apnic.net

Ripe (ここヨーロッパで使用している中央レジストリ) にも 1 つありますが、「whois.ripe.net」とは異なり、今は調べる時間がありません。

さて、私が上で述べたこととは別に、次のことを検討することをお勧めします。ほとんどの whois オーソリティは、24 時間にあまりにも多くのリクエストを行っていると判断した場合、トラフィックを調整 (またはブロック) します。代わりに、上記のプロバイダーのいずれかの ftp サイトにログインして、さまざまなビットをダウンロードすることを検討することをお勧めします。次に、それらを処理する独自のスクリプトを作成 (または検索) します。

私は現在、次のシェルスクリプトを使用して接続する自分のサーバーの1つでこれを行っています(24時間ごとに1回):

#!/bin/bash
rm -f delegated-afrinic-latest
rm -f delegated-lacnic-latest
rm -f delegated-arin-latest
rm -f delegated-apnic-latest
rm -f delegated-ripencc-latest
rm -f ripe.db.inetnum
rm -f apnic.db.inetnum
rm -f ripe.db.inetnum.gz
rm -f apnic.db.inetnum.gz
wget ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
wget ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest
wget ftp://ftp.arin.net/pub/stats/arin/delegated-arin-latest
wget ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
wget ftp://ftp.ripe.net/ripe/stats/delegated-ripencc-latest
wget ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.inetnum.gz
ftp -n -v ftp.apnic.net <<END
user anonymous anonymous@anonymous.org
binary
passive
get /apnic/whois-data/APNIC/split/apnic.db.inetnum.gz apnic.db.inetnum.gz
bye
END
gunzip ripe.db.inetnum
gunzip apnic.db.inetnum

次に、サーバーがクエリを実行するカスタムデータベース構造にファイルを解析するカスタム作成プログラムがあります。

すべてのサーバーが相互にデータをミラーリングするため、1 つのサーバーから完全なデータ セットを取得できるはずですが、そうでない場合は、上記のシェル スクリプトを変更して他のサーバーからデータをダウンロードするのにそれほど時間はかかりません。彼らも「ftp.????」と応答します。同じユニバーサルフォルダー構造を持っています。

ただし、独自のコードが含まれているため、パーサーについてはお手伝いできませんが、ファイル形式 (分割ファイルを取得する場合は特に) は、典型的な whois 出力に表示されるものと同じであるため、操作は非常に簡単です。

このように独自のデータをダウンロードして処理することで、プロバイダーによって課された制限を回避できます。つまり、サーバーからクエリ サーバーに毎回リクエストを送信し続けるよりも、独自のデータ ストアをクエリする方がはるかに高速である可能性が高いということです。誰かが IP アドレスを入力します。

アップデート

ここにリストした以外にも、非常に多くの whois サーバーがありますが、このページにすべてをリストするのではなく、次のリンクを参照してください。

https://jfreewhois.googlecode.com/git/JFreeWhois/src/uk/org/freedonia/jfreewhois/etc/serverlist.xml

を使用すると、Google コードのプロジェクトの一部である XML ファイルが表示されます。返された XML ファイルには、利用可能なすべての whois サーバーのかなり大きなリストと、それぞれが提供する TLD のリストが表示されます。入力されたアドレスに応じて正しいサーバーと通信するスクリプト。

于 2013-05-29T18:53:37.683 に答える