PHP で whois 情報を取得する

Yossy
2023-06-13
2023-06-13

PHP で Whois 情報を取得するコードを書いてみたのですが、そもそも、Whois の仕組みを知らなかったので、まとめておこうと思います。

(1) 問い合わせ先の WhoisServer は、TLD(Top Level Domain)ごとに存在する
(3) 最近?Whois への問い合わせ、1回では情報が取得できないケースがある(連絡先などのメールアドレスなどを含む情報)>Whois Proxy Serve へのアクセスが必要

ということと踏まえつつ、最近、なにかと話題のAIの力を借りでコードを書いてみました。

なお、Whois サーバーへ負荷をかけることはよろしくないので、実際に利用するときは、連続実行しないように利用したいと思います。
※連続してアクセスすると、接続制限を受けることもあるようです。

<?php
function getWhoisInfo($whois_server, $domain)
{
    $whois_string = '';

    // Whois Server から情報取得
    $sock = fsockopen($whois_server, 43);
    if (!$sock)
    {
        die('Whois サーバーにアクセスできませんでした。');
    }
    fputs($sock, $domain."\r\n");
   
    // whois
    while (!feof($sock)) {
        $whois_string .= fgets($sock, 128);
    }
    fclose($sock);
   
    // Whois Server から取得した文字列に、Proxy サーバーの情報が含まれていた場合、再取得
    if (strpos($whois_string, 'Registrar WHOIS Server:') !== false) {
        preg_match('/Registrar WHOIS Server: (.*)/', $whois_string, $matches);
        if (isset($matches[1]))
        {
            $proxy_server = trim($matches[1]);
   
            $sock = fsockopen($proxy_server, 43);
            if (!$sock) {
                die('Error: Whois Proxy サーバーにアクセスできませんでした。');
            }
       
            fputs($sock, $domain."\r\n");
       
            $whois_string = '';
            while (!feof($sock)) {
                $whois_string .= fgets($sock, 128);
            }
            fclose($sock);
        }
    }
    return $whois_string;

}