我想创建一个执行WHOIS查询的内容,以查看域是否可用。现在,我已经找到了相当多的现成脚本,但它们似乎都是相同的,因为你需要指定基础,然后选择你想要的扩展,它会做到这一点(例如,输入'test',检查.com,它将检查test.com是否可用)
然而,我正试图做一些其他事情。我想要它做的是检查用户是仅输入了基本URL还是完整的URL,然后相应地进行一个或多个查询。例如:
如果用户输入'test',我希望脚本检查test.com,test.org,test.net等。 如果用户输入'test.com',我希望脚本检查JUST for test.com。
我真的不知道要建立什么,但Mike Nott's PHP Whois Script看起来没问题。当然,建议随时欢迎。
现在我猜测脚本流应该是这样的:
当然,如果有一个脚本已经这样做了,请告诉我。
编辑:只是你知道,我可以做简单的if语句等,但我的“工作流程”中的第3,4,5和6步是我无法弄清楚的部分
编辑2:感谢您的所有答案,伙计们!马库斯·亚当的理论确实有效。我的域名经销商(我从中获取域名的人)不提供像.co.uk这样的二级域顶级域名,所以这不是问题。他们也不支持IDN。
从你们的答案中,我得出结论,爆炸功能用于分隔域名。但是,当它遇到多个点时会发生什么?我猜它只会在数组中添加另一个条目,但这会导致问题。因为如果用户然后输入(例如)以.co.uk结尾的域,该脚本将以'co'作为TLD。
检查数组中超过2个字符串也不是一个选项(我认为),因为如果用户输入'sub.domain.com',脚本将以'sub'为基础和'domain.com '作为顶级域名。
另外,Marcus Adams,你说如果whois服务器显示'可用',那不能保证它可用,我必须查询注册商。但是我该怎么做呢?有什么想法吗?
谢谢你们:)
答案 0 :(得分:1)
我已经实现了这样的代码,但不是在PHP中。这是我学到的。
算法
要小心,因为某些域可以拥有第一级和第二级顶级域。例如example.in
和example.co.in
。
我建议首先修剪前导和尾随空格的域并将它们转换为小写。
由于许多TLD都有自己的whois服务器,因此您也可以创建一个包含每个可能TLD的表或数组,当然是小写。
然后,检查是否有一段时间。如果没有时期,那就没有什么可做的。
如果有一段时间,则必须提取TLD。从左侧开始,找到第一个时期。在那里拆分字符串。如果右侧与列表中的某个TLD匹配,则左侧的所有内容均为名称,右侧的所有内容均为TLD。如果没有TLD匹配,则转到下一个时段并重复,直到找到匹配或用完时段。
如果找不到匹配项,则表示他们未输入有效域名。您可以尝试在右侧的最后一个时段进行拆分,因为他们可能会输入www.wiki.example
。
如果找到匹配项,您仍然需要查看拆分左侧是否有另一个句点,并在那里修剪或认为它无效。
查找whois服务器
IANA提供有关每个TLD的基本信息,包括whois服务器。
请注意,您可能正在创建正则表达式来评估每个whois服务器的结果,因为结果未标准化。
Whois数据库与注册商数据库不同
您不能仅仅因为whois服务器报告它“可用”而依赖可用的域。在大多数情况下,它是准确的,但不向用户做出任何可以注册的承诺。您必须向注册商查询域名是否可用。
最值得注意的例外是即将删除某个域。有一段时间,whois服务器将没有记录,但尚未从注册商处发布。
国际化域名
您打算支持IDNs吗?
答案 1 :(得分:1)
没有算法方法可以找到可以为特定顶级域注册域的最高级别(策略因每个注册表而异),唯一的方法是创建所有顶级域的列表以及域名注册的级别。
这是Public Suffix List退出的主要原因。
使用此列表中收集的定义,您可以轻松地将域名解析为其部分,提取TLD,域和子域。
答案 2 :(得分:0)
检查的最佳方法是遍历所有可能的域扩展,使用explode拆分字符串,然后检查点后面的内容。
这是针对第3步& 4:
function isFullDomain($domain){
$domain=explode('.', $domain);
foreach($possibleDomainExts as $ext){
if($ext==$domain[count($domain)-1) return $ext;
}
return false;
}
这样称呼:
if(!$ext=isFullDomain($domain)){
//is only the base
}
else{
//is the full domain and $ext will hold the value of the domain extension
}
您已经拥有了PHP whois脚本,因此请将其拆分以获取可能的域列表,并获取有关步骤5&的帮助。 6
答案 3 :(得分:0)
我不确定脚本是否已存在,但您提出的解决方案是可行的。
假设所有whois查找逻辑都在一个名为check_whois($base, $tld)
的方法中,解决方案可能如下所示:
$pieces = explode(".", $user_input);
$base = $pieces[0];
$tld = $pieces[1];
if ($tld == null) {
$default_tlds = array("com","net","org");
foreach( $default_tlds as $tld ) {
check_whois($base, $tld);
}
} else {
check_whois($base, $tld);
}