警告:这很长,可能只能由专业的perl程序员或域名注册商或注册管理机构公司的人员来回答。
我经营网站托管,设计和域名注册业务。我们是某些TLD的注册商,其中一些要求我们为在我们注册的域名拥有whois服务器。我有一个whois服务器设置正在工作,但我知道它没有正确的方式,所以我想弄清楚我需要改变什么。
我的脚本设置为通过浏览器访问whois.xxxxxxxxxx.com或者从shell运行whois -h whois.xxxxxxxxxx.com。在我们这里注册的域名中的whois提供了whois数据,而未注册我们的域名表示它未在我们这里注册。
如果需要,我可以提供whois网址,或者可以从我的个人资料中找到它。我只是不想把它放在这里看起来像广告或搜索引擎最终去。
问题是我的脚本是如何做到的。 我的whois url在apache的httpd.conf文件中设置为正常的子域,用于侦听端口80,它也设置为侦听端口43.当通过浏览器调用时,它正常工作,提供一个表单来提供域和检查我们的数据库中的该域。从shell调用它的工作原理也很好,但它如何区分2是奇怪的,它如何获得域也很奇怪。它有效,但它不是正确的方法。
它如何区分shell和http:
if ($ENV{REQUEST_METHOD} ne "GET") {
&shell_process;
}
else {
&http_process;
}
这样做更合乎逻辑:
if ($ENV{SERVER_PORT} eq 43) {
&shell_process;
}
else {
&http_process;
}
这不起作用,因为即使通过端口43作为whois请求调用,ENV变量也会说“SERVER_PORT = 80”。
从shell调用时如何获取域名是:
$domain = lc($ENV{REQUEST_METHOD});
你会认为在ARGV变量中域名将是QUERY_STRING或者更有可能,但事实并非如此。
这是通过http:
调用的ENV vars(重要)SERVER_NAME = whois.xxxxxxxxxxxxx.com
REQUEST_METHOD = GET
QUERY_STRING = domain=roughdraft.ws&submit=+Get+Whois+
SERVER_PORT = 80
REQUEST_URI = /index.cgi?domain=premierwebsitesolutions.ws&submit=+Get+Whois+
HTTP_HOST = whois.xxxxxxxxxxxxxx.com
以下是通过shell调用的ENV变量(重要):
SERVER_NAME = whois.xxxxxxxxxxxxxx.com
REQUEST_METHOD = premierwebsitesolutions.ws
QUERY_STRING =
SERVER_PORT = 80
REQUEST_URI =
请注意,SERVER_PORT在任何一种方式都保持80,即使通过shell在端口43上设置它。
注意如何通过shell将REQUEST_METHOD作为正在查找的域。
我已经做了很多搜索并找到了swhoisd:简单的Whois守护程序,但这只适用于小型数据库。我还找到了Daemon :: Whois perl模块,但是它使用了一个我一无所知的cdb数据库,它没有任何指令,而且它是一个我真的不需要的守护进程,因为通过apache调用脚本工作正常在43号港口。
有谁知道应该怎么做? 我可以让脚本看到它是通过端口43调用的吗? 以这种方式使用REQUEST_METHOD是正常的吗? whois服务器应该作为守护进程运行吗?
感谢您的帮助或尝试。
麦克
答案 0 :(得分:1)
WHOIS不是类似HTTP的协议,因此尝试通过端口43上的Apache提供服务将无法正常工作。您需要编写一个单独的守护程序来为WHOIS提供服务 - 如果您不想使用守护程序:: Whois,您可能至少希望使用类似Net::Daemon之类的东西来为您简化操作。
答案 1 :(得分:0)
https://stackoverflow.com/a/933373/66519表示可以设置一些内容来检测cli与web。在这种情况下它适用于php。基于这里缺乏答案,也许它可以帮助你找到有用的东西。很抱歉我正在使用移动SO应用程序格式化。