0

ドメインが利用可能かどうかを確認するために WHOIS クエリを実行するものを作成したいと考えています。さて、そのための既製のスクリプトをかなり見つけましたが、ベースを指定する必要があるという点ですべて同じように見えます。次に、必要な拡張機能を選択すると、それが実行されます(たとえば、「test」と入力し、.com を確認すると、test.com が利用可能かどうかが確認されます)

しかし、私は少し他のことをしようとしています。私がやりたいことは、ユーザーがベース URL または完全な URL のみを入力したかどうかを確認し、それに応じて 1 つまたは複数のクエリを実行することです。例:

ユーザーが「test」と入力した場合、スクリプトで test.com、test.org、test.net などをチェックするようにします。ユーザーが「test.com」と入力した場合、スクリプトで test.com のみをチェックするようにします。 .

何を基に構築すればよいか本当にわかりませんが、Mike Nott の PHP Whois Scriptは問題ないようです。もちろん、提案はいつでも大歓迎です。

スクリプト フローは次のようになるはずです。

  1. ユーザーがクエリを入力
  2. スクリプトによるスペースのチェック
  3. スクリプトは、ユーザーがベースまたは完全なドメイン名のみを入力したかどうかを確認します (これを行う方法は、そこにドットがあるかどうかを確認することだと思います)
  4. ユーザーが完全なドメイン名を入力した場合、ベースと TLD を分離し、両方を変数に保存し、「ステータス」をどこかに保存します ($full = true/false)
  5. if ($full = true) {$base.com $base.net などの対応する whois サーバーを確認します};
  6. if ($full != true) {$tld の適切なサーバーを確認し、$base.$tld のサーバーを確認します}
  7. 出力結果

もちろん、これを行うスクリプトが既にある場合は、お知らせください。

編集:ご存知のように、簡単な if ステートメントなどは実行できますが、「ワークフロー」のステップ 3、4、5、および 6 は理解できない部分です。

編集 2:皆さん、ご回答ありがとうございます。マーカス・アダムの理論は確かに有効です。私のドメイン再販業者 (私がドメインを取得している業者) は、.co.uk のような第 2 レベルの TLD を提供していないので、それは問題ではありません。また、IDN もサポートしていません。

皆さんの回答から、explode関数を使ってドメイン名を区切るという結論に達しました。しかし、複数のドットに遭遇した場合、爆発はどうなりますか? 配列に別のエントリを追加するだけだと思いますが、それは問題を引き起こします。ユーザーが (たとえば) .co.uk で終わるドメインを入力すると、スクリプトは「co」を TLD として使用するためです。

ユーザーが「sub.domain.com」と入力すると、スクリプトは「sub」をベースとして、「domain.com」をTLD。

また、Marcus Adams さんは、whois サーバーが「利用可能」と表示されていても、それが利用可能であることを保証するものではなく、レジストラに問い合わせる必要があるとおっしゃいました。しかし、どうすればそれについて行くでしょうか?何か案は?

みんなありがとう :)

4

4 に答える 4

1

私はそのようなコードを実装しましたが、PHPでは実装していません。これが私が学んだことです。

アルゴリズム

一部のドメインには第1レベルと第2レベルのトップレベルドメインが含まれる場合があるため、注意してください。たとえばexample.inexample.co.in

最初に先頭と末尾の空白のドメインをトリミングして小文字に変換することをお勧めします。

多くのTLDには独自のwhoisサーバーがあるため、もちろん、すべての可能なTLDのテーブルまたは配列を小文字で作成することもできます。

次に、期間があるかどうかを確認します。期間がない場合は、これ以上何もする必要はありません。

期間がある場合は、TLDを抽出する必要があります。左側から始めて、最初の期間を見つけます。そこで文字列を分割します。右側がリスト内のTLDの1つと一致する場合、左側のすべてが名前であり、右側のすべてがTLDでした。TLDに一致するものがない場合は、次の期間に移動して、一致するものが見つかるか、期間がなくなるまで繰り返します。

一致するものが見つからない場合、それらは有効なドメインに入っていません。おそらく彼らが入ったので、あなたは右側の最後の期間で分割を試みることができwww.wiki.exampleます。

一致するものを見つけた場合でも、分割の左側に別のピリオドがあるかどうかを確認し、そこでトリミングするか、無効と見なす必要があります。

whoisサーバーを見つける

IANAは、whoisサーバーを含む各TLDに関する基本情報を提供します。

ルートゾーンデータベース

結果は標準化されていないため、おそらく各whoisサーバーからの結果を評価するための正規表現を作成することに注意してください。

Whoisデータベースはレジストラデータベースと同じではありません

whoisサーバーが「利用可能」であると報告したからといって、ドメインが利用可能であると信頼することはできません。ほとんどの場合、それは正確ですが、ユーザーが登録できることをユーザーに約束しないでください。ドメインが利用可能かどうかを確認するには、レジストラにクエリを実行する必要があります。

最も注目すべき例外は、ドメインが削除されようとしているときです。whoisサーバーに記録がない期間が最大1日ありますが、レジストラからはまだリリースされていません。

国際化ドメイン名

IDNをサポートする予定はありますか?

于 2011-11-23T21:20:11.663 に答える
1

特定のトップレベル ドメインにドメインを登録できる最高レベルを見つけるアルゴリズム的な方法はありません (ポリシーはレジストリごとに異なります)。唯一の方法は、すべてのトップレベル ドメインとレベルのリストを作成することです。登録できるドメイン。

これが、 Public Suffix Listが存在しない主な理由です。

このリストに収集された定義を使用すると、ドメイン名をその部分に簡単に解析して、TLD、ドメイン、およびサブドメインを抽出できます。

于 2011-12-22T20:14:39.613 に答える
0

このためのスクリプトがすでに存在するかどうかはわかりませんが、提案されたソリューションは機能します。

すべてのwhoisルックアップロジックがソリューションと呼ばれるメソッドにあると仮定すると、check_whois($base, $tld)次のようになります。

$pieces = explode(".", $user_input);
$base = $pieces[0];
$tld = $pieces[1];
if ($tld == null) {
  $default_tlds = array("com","net","org");
  foreach( $default_tlds as $tld ) {
    check_whois($base, $tld);
  }
} else {
  check_whois($base, $tld);
}
于 2011-11-23T21:11:40.357 に答える
0

チェックする最善の方法は、考えられるすべてのドメイン拡張子をループし、explode で文字列を分割してから、ドットの後に来るものをすべてチェックすることです。

これはステップ 3 と 4 用です。

function isFullDomain($domain){
    $domain=explode('.', $domain);
    foreach($possibleDomainExts as $ext){
        if($ext==$domain[count($domain)-1) return $ext;
    }
    return false;
}

次のように呼び出します。

if(!$ext=isFullDomain($domain)){
    //is only the base
}
else{
    //is the full domain and $ext will hold the value of the domain extension
}

PHP の whois スクリプトは既にあるので、それを分解して可能なドメインのリストを取得し、ステップ 5 と 6 のヘルプも参照してください。

于 2011-11-23T20:53:33.573 に答える