Есть ли способ эмулировать инструмент whois с помощью php? - PullRequest
5 голосов
/ 17 февраля 2009

У меня не установлен whois на моем сервере (по-видимому, он в работе, но никаких реальных новостей о нем). Мне было интересно, если кто-нибудь знает способ подражать функциональности этого, хотя. Я решил опубликовать некоторые данные в URL, но я не знаю, что и где.

По сути, я в полной растерянности и был бы признателен за любую помощь или даже за то, что я мог бы изучить.

Ответы [ 5 ]

5 голосов
/ 17 февраля 2009

Вы можете использовать PHP Whois API . Это позволит вам получить доступ ко всем записям whois. Для использования этой функции в нижней части этой страницы есть ссылка на класс . Убедитесь, что вы включили это тоже.

3 голосов
/ 17 февраля 2009

Вы можете попытаться запустить его в своей системе, например, при условии, что вы используете linux и у вас установлена ​​/ usr / bin / whois lib, вы можете запустить php с помощью php exec

<?php exec("/usr/bin/whois $strDomain",$arrOutPut);?>

Это будет работать только в том случае, если php разрешено использовать функцию exec на вашем сервере и убедиться, что проверены аргументы, переданные команде ... это может оказаться уродливым для машины.

В качестве альтернативы вы можете попробовать использовать API

  1. http://www.nott.org/blog/php-whois-script.html
  2. http://www.tevine.com/projects/whois/
1 голос
/ 06 сентября 2010

Вы также можете использовать для этого пакет Net_Whois pear .

Отказ от ответственности: я поддерживаю этот пакет.

1 голос
/ 17 февраля 2009

Вот один, который я написал некоторое время назад, используя простой прием (без перечисления всех серверов whois). Я конвертировал его из Perl, а также в C # и COM-объект.

Это не делает все поиски whois, так как некоторые из регистраторов доменов жадные * &! $ И хотят, чтобы вы платили за поиск или оставляли его закрытым. На этой странице есть подробности.

Обновление
Вот код для сохранения загрузки. Я написал его с использованием PHP 3.x, поэтому может понадобиться некоторый массаж для PHP5:

class Whois
{
    /*
     * Optional parameter for the server to be used for the lookup.
     * If this is not set, an appropriate whois server for the domain name
     * specified is automagically found by the Whois class. 
     * @type string
     * @access public
     */
    var $whois_server;
    /*
     * The timeout, in seconds, for the lookup. Default is 30. 
     * @type integer
     * @access public
     */
    var $timeout = 30;

    /*
     * Returns a string, with new-lines (\n) converted to non-breaking spaces (&lt;BR&gt;),
     * with details for the domain specified by $domain. 
     * @access public
     * @param string $domain the domain to lookup, excluding http:// and www
     * @return string the results of the whois
     */
    function lookup($domain)
    {
        $result = "";
        $parts  = array();
        $host   = "";

        // .tv don't allow access to their whois
        if (strstr($domain,".tv"))
        {
            $result = "'.tv' domain names require you to have an account to do whois searches.";
        // New domains fix (half work, half don't)
        } elseif (strstr($domain,".name") || strstr($domain,".pro") >0){
            $result = ".name,.pro require you to have an account to do whois searches.";
        } else{
            if (empty($this->whois_server))
            {
                $parts    = explode(".",$domain);
                $testhost = $parts[sizeof($parts)-1];
                $whoisserver   = $testhost . ".whois-servers.net";
                $this->host     = gethostbyname($whoisserver);
                $this->host     = gethostbyaddr($this->host);

                if ($this->host == $testhost)
                {
                    $this->host = "whois.internic.net";
                }
                flush();
            }
            $whoisSocket = fsockopen($this->host,43, $errno, $errstr, $this->timeout);

            if ($whoisSocket)
            {
                fputs($whoisSocket, $domain."\015\012");
                while (!feof($whoisSocket))
                {
                    $result .= fgets($whoisSocket,128) . "<br>";
                }
                fclose($whoisSocket);
            }
        }
        return $result;
    }
}

Пример использования

$whois = new Whois();
echo "<B>compaq.it</B><BR>";
echo $whois->lookup("compaq.it");
echo "<HR>";
0 голосов
/ 05 января 2018

Посмотрите на RFC3912 , он определяет протокол whois. По сути, вам просто нужно открыть сокет TCP на порту 43, отправить запрос по одной строке, оканчивающейся CR + LF, и прочитать обратно текстовый блок с сервера.

Стандарт (к сожалению) не определяет ни формат запроса, ни ответ, ни то, как найти соответствующий сервер whois для запроса на основе того, что вам нужно сделать.

Пожалуйста, посмотрите на этот мой ответ для более подробной информации: https://unix.stackexchange.com/a/407030/211833

...