PAGE TOP


3文字または、4文字ドメインの見つけ方

2018年8月10日PHP

実装概要

3文字または、4文字ドメインを見つける為のプログラムです。実行する場合は、レンタルサーバーでは、全パターンを一気に出力しようとするとタイムアウトしてしまうので、おそらく不可能でしょう。なので、ローカル環境で走らせてください。また、ローカル環境においても、全て出力しようとすると、タイムアウトしますので、Apacheのphp.iniなど必要に応じて変更してから実行してください。すべて出力すると、3文字ドメインだと環境によっては1時以上かかりますので、分割して出力できるようにするとよいかもしれません。
今回作るに至ったのは、インターネット上にある3・4文字ドメイン検索サイトはリアルタイムでデータを取得していなかったりするので、データが古くなっており、既に使われてしまっていることが多く、検索するだけ2度手間なので作ってみることにしました。

<追記>
サブドメイン下に3文字ドメインを検索する、簡易サービスを即席でつくりました。
記事を投稿後にサーバーでもどのくらいまで耐えれるか実験してみましたが、やはり、出力件数が多いとタイムアウトするので、とりあえず、20件ずつ出力するようなサービスです。ただ、一度に出力できないので、使う人は大変面倒なことになるでしょう。
3文字ドメイン検索サービス:https://domain.sumidai.net/

ドメインを検索する関数

作成した関数は、第1引数に、whoisサーバーと、第2引数にドメインをセットし、利用可能なドメインならtrue、不可能ならfalseが返ってくるというものです。関数の要約を説明するなら、まずはfsockopen()でUnixドメインソケット接続を開いて、ドメイン情報を読み込んだ変数の文字列に、該当する文字列をマッチさせることで、ドメインの有無を確認しています。

各ドメイン(TLD)のwhoisサーバーについては、IANAのレジストリ情報を参考にRoot Zone Databaseを参照することができます。

function check($whois, $domain) {
  $result='';
  $set = 2; //接続できなかったときにトライする回数のトータル
  $num = 0;
  do {
    $sock = fsockopen($whois,43);
    if ($sock) break;
    echo $sock;
    $num++;
    
    if ($num >= $set) echo("接続エラー");
  } while ($num < $set);

  fputs($sock,"$domain\r\n");
  while(!feof($sock))
    $result .= fgets($sock,128);
  fclose($sock);
  if(preg_match("/No match/",$result)||preg_match("/NOT FOUND/",$result))
    return true;
  else
    return false;
}

試しに、TRUEの場合は、oj7.netで調べてみました。(事前に使用可能であることは調べ済み)
この場合、変数 $result には下記のような値が格納されており、No match ということで使用可能となります。

No match for “OJ7.NET”.
>>> Last update of whois database: 2018-08-09T15:32:56Z <<<

一方でFalseの場合は、abc.netで調べてみました。ドメインの情報が返ってきます。

Domain Name: ABC.NET
Registry Domain ID: 2851804_DOMAIN_NET-VRSN
Registrar WHOIS Server: whois.namebright.com
Registrar URL: http://www.NameBright.com
Updated Date: 2018-05-24T04:22:57Z
Creation Date: 1995-06-11T04:00:00Z
Registry Expiry Date: 2019-06-10T04:00:00Z
Registrar: TurnCommerce, Inc. DBA NameBright.com
Registrar IANA ID: 1441
Registrar Abuse Contact Email:
Registrar Abuse Contact Phone:
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Name Server: NS1.DIGITALOCEAN.COM
Name Server: NS2.DIGITALOCEAN.COM
Name Server: NS3.DIGITALOCEAN.COM
DNSSEC: unsigned
URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
>>> Last update of whois database: 2018-08-09T15:35:27Z <<<

For more information on Whois status codes, please visit https://icann.org/epp

検索と出力

出力するにあたり、少し変更してみました。まず、先ほど説明した、関数の引数の$domainの部分をセカンドレベルドメイン(SLD) $sldとトップレベルドメイン(TLD) $tldの2つに分けてみました。この方が出力時に、ドメインのTLDを除いた、SLDだけ出力できます。また、先ほどの関数では、返り値は、ブーリアン型でしたが、今回は、出力文字をカラー別に当てはめました。TUREなら紫、FALSEなら灰色です。

また、関数の引数に総当りに設定する文字列は、forでまわすために、$cに配列として格納しておきました。とりあえず、4文字全部出力してしまうと、1日では無理かもしれませんので、3文字ドメインのnetを設定してみます。

<?php

function check($whois, $sld, $tld) {
  $result='';
  $set = 2; //接続できなかったときにトライする回数のトータル
  $num = 0;
  do {
    $sock = fsockopen($whois,43);
    if ($sock) break;
    echo $sock;
    $num++;
    
    if ($num >= $set) echo("接続エラー");
  } while ($num < $set);

  fputs($sock,"$sld.$tld\r\n");
  while(!feof($sock))
    $result .= fgets($sock,128);
  fclose($sock);
  if(preg_match("/No match/",$result)||preg_match("/NOT FOUND/",$result))
    return "<span style='color:#FF00FF;'>". $sld ." </span>";
  else
    return "<span style='color:	#C0C0C0;'>". $sld ." </span>";
}


$c = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","1","2","3","4","5","6","7","8","9","0");


//for ($i = 0; $i <36; $i++) { //4文字ドメインの場合
   for ($j = 0; $j <36; $j++) {  //3文字ドメイン↓
    for ($k = 0; $k <36; $k++) {
     for ($l = 0; $l<36; $l++) {    

      echo check("whois.nsiregistry.net",$c[$j].$c[$k].$c[$l],"net");
        
      ob_flush();
      flush();
    }
   }
  }
//}


?>

意味のある文字列を見つけたい場合は?

特に、4文字ドメインでは、意味不明の文字列ばかりで、英単語としても意味のなりたつようなものを見つけたいと思われてた方も多いと思います。その場合は、出力のやり方にもよりますが、翻訳サイトや翻訳ソフトに、出力したものを丸ごとコピペし翻訳し、その中でも、意味が翻訳されたものが単語としての意味ありの文字列なので、区別することができます。ただ、どうでもいいような生物の学名・亜種名や、かなりマイナーな単語ばかりで、よいものが見つかることは稀です。

感想

現在、comの3文字を調べましたが全滅でした。netは60個ほどです。また、4文字ドメインは、アルファベットと数字の混在がcomとnetの双方にかなりありそうです。アルファベットのみも双方に少なからずあります。数が多すぎて、途中で検索やめました。
ところで、短いドメインは、価値があるといわれますが、私自身、3文字も4文字ドメインも持っていますが、特別なメリットは何も感じませんでした。ただ、誰が見ても覚えやすいぐらいのメリットしかありません。特に、双方、意味のある文字列が含まれており、一見レアな感じがしたので取得しましたが、ただ持っているだけでは、普通のドメインとなんら変わりません。唯一、取得した時からGoogle Analyticsで監視していましたが、海外からの効果のないアクセスが多いような気がします。おそらく、今回紹介したようなドメイン検索ツールなどを使って総当りで調べている人々が世界中にいるのではないかと思います。あまり文字数にこだわることないのかなと思いました。

現時点、(2018.8.10の23:00)で、利用可能な.netの3文字ドメインは、b6i d1a d7y d7z e0q g5t g5y g0q h7t j6v j8f k0p l1c l8u m9h n1o n4r n7g n0s oj7 o2q o2t o4n o4q p9m q8l q9p s6q s6w s7j t1h t0o u5v u5x u7s v6i v7o v0g 1g4 1l2 1l7 2i0 2ot 2w8 3il 3y6 4p8 6y7 7c3 7g5 7if 7p3 7s0 7z0 8a9 8d4 8q7 9m4 9t2 0d5 0k8 0pl 0qc 0um です。アルファベットと数値が混在したものが残っているようです。見る限り欲しいとは思わないようなドメイン名ですね。また、検索結果は、毎日少しずつ変わりますので、そのうちよいものがでてくるかもしれません。