您建议使用哪种Python方法来检查whois数据库记录?

ken*_*der 9 python sysadmin whois

我正在尝试启动并运行实际需要检查whois数据库的Web服务.我现在正在做的是丑陋的,我想尽可能地避免它:我调用gwhois命令并解析其输出.丑陋.

我做了一些搜索,试图找到一种pythonic方式来完成这项任务.一般来说,我什么都没有 - 这个旧的讨论列表链接有一种方法来检查域是否存在.不是我想要的......但是,谷歌给了我最好的东西 - 其他一切只是一堆未经证实的问题.

你们中的任何人都成功地启动并运行了一些方法吗?我非常感谢一些提示,或者我应该以开源方式,坐下来自己编写代码?:)

小智 8

看看这个:http: //code.google.com/p/pywhois/

pywhois - 用于检索域的WHOIS信息的Python模块

目标: - 创建一个简单的可导入Python模块,该模块将为给定域生成已解析的WHOIS数据. - 能够提取所有流行顶级域名(com,org,net,...)的数据 - 直接查询WHOIS服务器,而不是像许多其他人一样通过中间Web服务. - 适用于Python 2.4+,没有外部依赖

例:

>>> import pywhois
>>> w = pywhois.whois('google.com')
>>> w.expiration_date
['14-sep-2011']
>>> w.emails
['contact-admin@google.com',
 'dns-admin@google.com',
 'dns-admin@google.com',
 'dns-admin@google.com']
>>> print w
...
Run Code Online (Sandbox Code Playgroud)


Lar*_*din 6

在我自己搜索python whois库的过程中发现了这个问题.

不知道我同意cdleary的答案,即使用包装命令的库总是最好的方法 - 但我可以看到他说这个的原因.

Pro:cmd-line whois处理所有的辛苦工作(套接字调用,解析等)

骗局:不便携; 模块可能无法工作,具体取决于底层whois命令.更慢,因为除了whois命令之外还运行命令并且很可能是shell.如果不是UNIX(Windows),不同的UNIX,较旧的UNIX或较旧的whois命令,则会受到影响

我正在寻找一个可以处理whois IP查找的whois模块,我对编写自己的whois客户端不感兴趣.

以下是我(轻松)尝试的模块以及有关它的更多信息:

pywhoisapi:

  • 主页:http://code.google.com/p/pywhoisapi/
  • 设计:REST客户端访问ARIN whois REST服务
  • 优点:能够处理IP地址查找
  • 缺点:能够从其他RIR的whois服务器获取信息吗?

BulkWhois

  • 主页:http://pypi.python.org/pypi/BulkWhois/0.2.1
  • 设计:telnet客户端从RIR访问whois telnet查询接口(?)
  • 优点:能够处理IP地址查找
  • 缺点:能够从其他RIR的whois服务器获取信息吗?

pywhois:

  • 主页:http://code.google.com/p/pywhois/
  • 设计:REST客户端访问RRID whois服务
  • 优点:访问许多RRID; 有python 3.x分支
  • 缺点:似乎没有处理IP地址查找

蟒蛇的WHOIS:

whoisclient - python-whois的分支

更新:我最终使用pywhoisapi进行我正在进行的反向IP查找


cdl*_*ary 5

使用命令行实用程序来执行您想要的操作没有任何问题.如果你在服务周围放置一个漂亮的包装器,你可以实现你想要的内部结构!例如:

class Whois(object):
    _whois_by_query_cache = {}

    def __init__(self, query):
        """Initializes the instance variables to defaults. See :meth:`lookup`
        for details on how to submit the query."""
        self.query = query
        self.domain = None
        # ... other fields.

    def lookup(self):
        """Submits the `whois` query and stores results internally."""
        # ... implementation
Run Code Online (Sandbox Code Playgroud)

现在,无论你是否使用urllib滚动自己,绕过命令行实用程序(就像你正在做的那样),或导入第三方库并使用它(就像你说的那样),这个界面保持不变.

这种方法通常不被认为是丑陋的 - 有时命令实用程序会按照您的要求执行,您应该能够利用它们.如果速度最终成为瓶颈,那么您的抽象使得切换到本机Python实现的过程对您的客户端代码是透明的.

实用性胜过纯洁 - 这就是Pythonic.:)

  • 有了良好的抽象障碍,只要方便,您就可以实现它!"现在总比没有好,虽然从来没有比现在更好*." :) (3认同)