2

警告:这很长,可能只能由专业的 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});

您会认为域将是 QUERY_STRING 或更可能,在 ARGV 变量中,但事实并非如此。

以下是通过 http 调用时的 ENV 变量(重要):

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: Simple Whois Daemon,但这仅适用于小型数据库。我还找到了 Daemon::Whois perl 模块,但它使用了一个我一无所知的 cdb 数据库,它没有任何指令,而且它是一个我并不真正需要的守护进程,因为通过 apache 调用该脚本可以正常工作在 43 端口。

有谁知道这应该怎么做?我可以让脚本查看它是通过端口 43 调用的吗?这样使用 REQUEST_METHOD 正常吗?whois 服务器应该作为守护进程运行吗?

感谢您的帮助或尝试。

麦克风

4

2 回答 2

1

WHOIS 不是类似 HTTP 的协议,因此尝试通过 Apache 在端口 43 上提供服务将无法正常工作。您将需要编写一个单独的守护程序来为 W​​HOIS 服务——如果您不想使用 Daemon::Whois,您可能至少想要使用Net::Daemon之类的东西来为您简化事情。

于 2014-05-16T03:36:41.320 回答
0

https://stackoverflow.com/a/933373/66519声明可以设置一些东西来检测 cli vs web。在这种情况下,它适用于 php。基于这里缺乏答案,它可能会帮助你找到有用的东西。抱歉,我使用的是移动 SO 应用程序的格式。

于 2014-05-16T03:25:02.737 回答