【发布时间】:2014-04-28 13:38:47
【问题描述】:
如何使用 PHP 或 Python 代码获取有关域名的信息(例如所有者或服务器详细信息)?我想避免使用任何第三方网站。
这可能吗?
【问题讨论】:
-
仅排除第 3 方网络工具吗? whois db、DNS 根据定义是第三方服务。在不使用第三方库的情况下,对服务器详细信息进行指纹识别是一个很难自行解决的问题。
如何使用 PHP 或 Python 代码获取有关域名的信息(例如所有者或服务器详细信息)?我想避免使用任何第三方网站。
这可能吗?
【问题讨论】:
其实现在之前的答案是错误的,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))
【讨论】:
您可以基于以下 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;
【讨论】:
首先让您的生活更轻松:
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:
>>>
【讨论】: