使用PHP/Python从URL获取域名信息

0 投票
3 回答
2247 浏览
提问于 2025-04-17 23:15

我想知道怎么用PHP或Python代码获取一个域名的信息,比如它的拥有者或者服务器的详细信息。我希望能不使用任何第三方网站。

这样做可以吗?

3 个回答

0

其实,之前的回答现在已经不对了,urlparse 这个东西现在改成了 urllib.parse,所以应该是:

import requests
import urllib.parse
import whois
url = 'http://docs.python.org/3/'
requests.head(url).headers['server']
'Apache/2.2.22 (Debian)'
hostname = urllib.parse.urlparse(url).netloc
print (whois.whois(hostname))
1

首先,让你的生活更简单:

pip install python-whois
pip install requests

然后做一些像这样的事情:

>>> import requests
>>> import urlparse
>>> import whois
>>> url = 'http://docs.python.org/3/'
>>> requests.head(url).headers['server']
'Apache/2.2.22 (Debian)'
>>> hostname = urlparse.urlparse(url).netloc
>>> print whois.whois(hostname)
creation_date: 1995-03-27 05:00:00
domain_name: PYTHON.ORG
emails: ['e89d6901ba3e470e8cedc3eaa32a0074-1697561@contact.gandi.net', 'e89d6901ba3e470e8cedc3eaa32a0074-1697561@contact.gandi.net', 'infrastructure-staff@python.org']
expiration_date: []
name_servers: ['NS3.P11.DYNECT.NET', 'NS1.P11.DYNECT.NET', 'NS2.P11.DYNECT.NET', 'NS4.P11.DYNECT.NET', '', '', '', '', '', '', '', '', '']
referral_url: 
registrar: Gandi SAS (R42-LROR)
status: clientTransferProhibited
updated_date: 2013-08-15 00:20:19
whois_server: 
>>> 
2

你可以参考下面这个whois脚本:http://www.phpeasycode.com/whois/

这里有一个在线演示。

这个脚本首先会检查正确的whois服务器,然后在43号端口上打开一个连接。下面是一个简化的查询功能,基于上面演示中的代码。

每个顶级域名(TLD)都有自己的whois服务器。你可以在这里找到完整的列表:http://www.iana.org/domains/root/db/http://www.whois365.com/en/listtld/

<?php
$whoisserver = "whois.pir.org";
$domain = "example.org";
$port = 43;
$timeout = 10;
$fp = @fsockopen($whoisserver, $port, $errno, $errstr, $timeout) or die("Socket Error " . $errno . " - " . $errstr);
fputs($fp, $domain . "\r\n");
$out = "";
while(!feof($fp)){
    $out .= fgets($fp);
}
fclose($fp);

$res = "";
if((strpos(strtolower($out), "error") === FALSE) && (strpos(strtolower($out), "not allocated") === FALSE)) {
    $rows = explode("\n", $out);
    foreach($rows as $row) {
        $row = trim($row);
        if(($row != '') && ($row{0} != '#') && ($row{0} != '%')) {
            $res .= $row."\n";
        }
    }
}
print $res;

撰写回答