【问题标题】:how to handle whois data如何处理whois数据
【发布时间】:2011-05-06 11:35:54
【问题描述】:

我需要将 whois 数据放在一个表格中,例如

  • 注册人,
  • 创建日期,
  • 过期日期等

我有从 whois 服务器提取数据的脚本,但每个域扩展的输出都不同。

例如,.com 域的注册人详细信息为总地址,.org 域的注册人详细信息为注册人名称、street1、street2、street3 等。

所以我无法将注册人详细信息作为一个单元提取到数据库中。

我听说如果我们获得 xml 数据,我们可以提取它,有人可以帮助解决这个问题吗?谢谢!

【问题讨论】:

标签: php mysql xml whois


【解决方案1】:

其实问题远不止于此。

  • 请求没有统一的语法
  • 未定义功能集
  • 没有明确的答案方案
  • 地方立法使内容不同
  • 没有标准化错误集
  • 记录信息质量较差
  • 你必须处理内化

WHOIS 服务由 RFC3912 定义。这是一个非常基本的请求协议,它根本没有定义回答内容的格式。因此,答案通常反映了包含数据的数据库的格式,并且您可能会为每个数据库获得不同的语法。由于 WHOIS 可用于您想要的任何内容,因此您不能对您将获得的答案格式做出太多假设。但是,希望您可以期望收到可解析的内容,以及每个请求的类似格式的答案。

因此,您需要为每个服务器开发一个解析逻辑,您必须以非常经验的方式进行。

不过,这里有一些来自 RFC 的开发技巧。

  • 您需要使用 TCP 端口 43 发送请求,单行以 CR+LF ASCII 字符结尾

  • 您必须期望 TCP 连接结束,这意味着答案已完成。

关于域名,您可能需要注意,以前对 ASCII 编码的限制使一些注册人使用 Punycode 来编码 DNS 系统中的一些(以示例为重点)字符串,因此您可能希望能够在如果您在某些回复中遇到,也可以提供 Whois 答案。自 2003 年以来国际化域名的存在将要求您支持 unicode 编码。转换名称的算法很复杂,RFC 3490 应该为您提供一些有用的细节。

祝你好运!

【讨论】:

  • 明确地说。 whois 数据没有一套标准的表格。我们必须尝试提取可能的顶级域名。因为经常引入新的顶级域名...
  • 问题的症结在于,如上所述,现在有数百个 TLD 可供选择,而且还在不断增加 - 这意味着每个制定自己的解决方案的人都必须编写超过一千个 WHOIS 记录解析器。如果您想为用户提供高质量的体验,这是不可行的。如果您打算自己动手,请远离正则表达式,这对我来说是可怕的结局。我搬到jsonwhoisapi.com 寻求托管解决方案,因为它很便宜,我猜得花钱赚钱!
【解决方案2】:

您需要检测格式并为它们使用不同的正则表达式。或者,正如您提到的,您可以使用 XML 甚至 JSON API http://whoisxmlapi.com/ http://www.domaintools.com/api/docs/

【讨论】:

  • 我期待开源.. 以上服务不是免费的。
  • 您期待吗?你的代码运行了吗?现在源头在哪里?
【解决方案3】:

您需要扩展您的数据库和处理以更好地处理问题。

远程服务提供的数据格式与您已经注意到的不同。所以你需要将获取数据和解析数据的关注点分开,因为这两件事是相互独立的。例如,一个 TLD 的格式可能会随着时间而改变

所以首先你获取每个域的纯文本数据并存储它的元数据:

  • whois 服务器
  • 获取操作的时间戳
  • 回复
  • 状态码(如果协议有这个)

您可以稍后在第二个处理中进行解析。您可以使用已经存在的元数据来决定您需要哪种解析算法。这也有助于您随着时间的推移维护您的应用程序。

解析正确后,你就得到了你想要的规范化格式。

除了这些技术处理之外,您还应该注意 whois 服务提供的使用条件。并非所有技术上可行的,在法律上或道德上都被接受。以应有的尊重照顾和对待他人的个人记录。保护您收集的数据,例如归档和加扰/锁定您不再需要的数据以进行持续处理。

参见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多