【问题标题】:Coding a domain lookup tool编写域查找工具
【发布时间】:2023-03-05 23:59:01
【问题描述】:

我一直在编写一个域检查器并且真的坚持使用 php.ini。这是我到目前为止所拥有的:

<?php
set_time_limit(0);
ob_start();
$domain = $_GET['domain'];
########### Extensions to be checked
$extensions = array(
    '.com'      => array('whois.crsnic.net','No match for'),
    '.info'     => array('whois.afilias.net','NOT FOUND'),  
    '.net'      => array('whois.crsnic.net','No match for'),
    '.co.uk'    => array('whois.nic.uk','No match'),        
    '.nl'       => array('whois.domain-registry.nl','not a registered domain'),
    '.ca'       => array('whois.cira.ca', 'AVAIL'),
    '.name'     => array('whois.nic.name','No match'),
    '.ws'       => array('whois.website.ws','No Match'),
    '.be'       => array('whois.ripe.net','No entries'),
    '.org'      => array('whois.pir.org','NOT FOUND'),
    '.biz'      => array('whois.biz','Not found'),
    '.tv'       => array('whois.nic.tv', 'No match for'),
);
###########

if(isset($domain))
{
    $newdomain = str_replace(array('www.', 'http://'), NULL, $domain);
    $finaldomain = str_replace($extensions, NULL, $newdomain);

    if(strlen($finaldomain) > 0)
    {
        foreach($extensions as $extension => $who)
        {
            $buffer = NULL;

            $sock = fsockopen($who[0], 43) or die('Error Connecting To Server:' . $server);
            fputs($sock, $finaldomain.$extension . "\r\n");

                while( !feof($sock) )
                {
                    $buffer .= fgets($sock,128);
                }

            fclose($sock);

            if(eregi($who[1], $buffer))
            {
                echo '<h4 class="available"><span>Available</span>' . $finaldomain. '<b>' . $extension .'</b> is Available</h4>';
            }
            else
            {
                echo '<h4 class="taken"><span>Taken</span>' . $finaldomain . '<b>' .$extension .'</b> is Taken</h4>';
            }
            echo '<br />';  

            ob_flush();
            flush();
            sleep(0.3);

        }
    }
    else
    {
        echo 'Please enter the domain name';
    }
}
?>

我遇到的问题是我不知道如何从传递的域中删除扩展名。

然后当它返回结果时,我希望他们键入的扩展名是结果列表中的第一个。

我是 php 新手,但我的项目需要这个。感谢所有帮助。

谢谢 乔

【问题讨论】:

  • Joe 你有没有得到这个工作?我想试试副本?

标签: php dns str-replace whois


【解决方案1】:

首先,扩展名被称为顶级域(简称TLD)。其次,.co.uk 不是顶级域,.uk 是。它还有其他子域,如.org.uk、.gov.uk 等。

现在,要返回文件名/域名的扩展名部分,您可以使用pathinfo:

$tld = pathinfo('helloworld.co.uk', PATHINFO_EXTENSION);
echo $tld;   // uk

您可能必须修改您的数组以删除您放在那里的标题点,或者干脆:

$tld = '.' . pathinfo('helloworld.co.uk', PATHINFO_EXTENSION);
$whois_server = $extensions[$tld];

【讨论】:

  • 您好,感谢您的回复。我知道 tld,但对于编码这个想法,最好这样写:)。我对你的意思有点困惑。由于 pathinfo() 只是将 .uk 位存储在 $tld 变量中。我会用 $tld 执行 str_replace() 以将其从 $domain.xml 中删除吗?现在,如果它仅以我编写代码的方式删除 .uk 位,它将查找 example.co.com、example.co.co.uk 等...另外,一旦我将其删除,我将如何安排结果所以 (tld) 是第一个。再加上你从哪里得到 $whois_server,再次感谢 netcoder 的出色回答。 :)
  • @Joe2010:你现在的做法是错误的。通过获取 TLD(即:$tld),您可以直接确定要查询的服务器,而无需 foreach。 $whois_server 是我创建的变量,相当于您的代码中的 $who。至于str_replace,你不需要它。只需使用pathinfo 获取 TLD,将其与服务器匹配,查询并返回您想要返回的内容。
  • 注意:您不应该使用ereg,它已被弃用。请改用preg_match。但是,在您的代码中,一个简单的 strpos 就可以了。
【解决方案2】:

您可以查询TLD.whois-servers.net,而不是为每个 TLD 拥有所有这些 Whois 服务器。

来自Wikipedia:

whois-servers.net 提供 DNS 别名 TLD WHOIS 服务器的记录 (CNAME) 形式为 .whois-servers.net。 GNU WHOIS 实用程序自动 使用 whois-servers.net 服务。

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 2013-10-09
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多