5

我的服务器上没有安装 whois(显然它正在开发中,但没有真正的消息)。我想知道是否有人知道模拟它的功能的方法。我想我会将一些数据发布到一个 url,但我不知道什么或在哪里。

基本上我完全不知所措,我会很感激任何帮助,甚至是我可以调查的东西。

4

5 回答 5

5

您可以使用PHP Whois API。这将允许您访问所有 whois 记录。要使用该功能,该页面底部有一个指向的链接。确保你也包括在内。

于 2009-02-17T10:07:33.350 回答
3

您可以尝试在您的系统上运行它,例如假设您使用的是 linux 并且您安装了 /usr/bin/whois 库,那么您可以使用 php exec 运行 php

<?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/
于 2009-02-17T11:51:23.973 回答
1

这是我不久前用一个简单的技巧写的一个(没有列出所有的 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>";
于 2009-02-17T10:19:17.550 回答
1

您也可以为此使用Net_Whois pear 包

免责声明:我是这个包的维护者。

于 2010-09-06T11:39:09.510 回答
0

看看RFC3912,它定义了whois协议。基本上,您只需要在端口 43 上打开一个 TCP 套接字,在以 CR+LF 终止的一行上发送您的请求,然后从服务器读回一团文本。

该标准(不幸的是)没有定义查询的格式,也没有定义回复的格式,也没有定义如何根据您需要做的事情找到合适的 whois 服务器进行查询。

请查看我的其他回复以获取更多详细信息:https ://unix.stackexchange.com/a/407030/211833

于 2018-01-04T21:26:26.200 回答