python:如何使用uwhoisd代理执行whois

2024-10-03 23:26:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用未文档化的库uwhoisd,但我不知道如何成功调用UWhois对象上的whois()函数。在

我通过调用一个文件来开始执事乌霍伊斯达蒙.py包含以下内容:

import uwhoisd
uwhoisd.main()

我给python的参数是在下载源代码时包含在extra目录中的*.ini file

成功启动deamon,输出如下:

2016-04-21 19:00:19,830 INFO:uwhoisd Reading config file at '/path/to/my/ini/uwhoisd.ini' 2016-04-21 19:00:19,838 INFO:uwhoisd Listen on 0.0.0.0:4243 2016-04-21 19:00:19,842 INFO:uwhoisd Caching activated [2016/04/21 17:00:19] {diesel} WARNING|Starting diesel

现在我在试着表演谷歌通过启动一个单独的python实例,我被扇了一耳光(我重用了this代码):

^{pr2}$

结果是:

Traceback (most recent call last):
  File "/home/user/.eclipse/org.eclipse.platform_3.8_155965261/plugins/org.python.pydev_3.9.0.201411111611/pysrc/pydevd.py", line 2183, in <module>
    globals = debugger.run(setup['file'], None, None)
  File "/home/user/.eclipse/org.eclipse.platform_3.8_155965261/plugins/org.python.pydev_3.9.0.201411111611/pysrc/pydevd.py", line 1622, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/path/to/my/project/Whois/WhoisChecker.py", line 17, in <module>
    result = uwhois.whois("google.com")
  File "/usr/local/lib/python2.7/dist-packages/uwhoisd/__init__.py", line 137, in whois
    with net.WhoisClient(server, port) as client:
  File "/usr/local/lib/python2.7/dist-packages/diesel/client.py", line 16, in __init__
    ip = self._resolve(self.addr)
  File "/usr/local/lib/python2.7/dist-packages/diesel/client.py", line 21, in _resolve
    return resolve_dns_name(addr)
  File "/usr/local/lib/python2.7/dist-packages/diesel/resolver.py", line 67, in resolve_dns_name
    except (NotFound, Timeout):
  File "/usr/local/lib/python2.7/dist-packages/diesel/util/lock.py", line 24, in __exit__
    self.release()
  File "/usr/local/lib/python2.7/dist-packages/diesel/util/lock.py", line 18, in release
    fire(self)
  File "/usr/local/lib/python2.7/dist-packages/diesel/core.py", line 92, in fire
    return current_loop.fire(*args, **kw)
AttributeError: 'NoneType' object has no attribute 'fire'

在我看来,uhoisd用来在客户机和deamon应用程序之间通信的diesel库需要一些特殊条件才能工作。据我所见,神秘的current_loop没有运行。但是我以前从来没有用过柴油,我也不知道该怎么办。在我看来,在执行whois查询之前,我必须以某种方式启动diesel循环。在

一个有效的例子会很好。我选择UHOISD的主要原因是我可以在异国情调的网站上表演whois,比如赢。赢". 它还缓存响应,这意味着更快的速度和更少的网络。在


Tags: inpyorglibpackagesusrlocaldist
1条回答
网友
1楼 · 发布于 2024-10-03 23:26:46

uwhoisd的作者。在

首先,去掉UwhoisDeamon.py:它是一个守护进程,而不是一个库。您需要运行守护进程,然后使用whois客户机查询它。您不必编写任何额外的代码来启动和运行它。它已经安装了一个可以正常工作的控制台脚本。在

例如,当您将它安装到一个虚拟环境中时,它将创建一个名为uwhoisd的脚本,您可以使用它来运行守护进程。下面是一个例子:

$ virtualenv env
$ env/bin/pip install uwhoisd
Downloading/unpacking uwhoisd
  Downloading uwhoisd-0.0.7-py2-none-any.whl
... installation log ...
Successfully installed uwhoisd diesel greenlet twiggy pyopenssl flask http-parser dnspython six cryptography Werkzeug Jinja2 itsdangerous idna pyasn1 setuptools enum34 ipaddress cffi MarkupSafe pycparser
Cleaning up...

如果您在没有的情况下运行守护程序,假设您安装了所有必需的系统软件包,那么您应该得到以下结果:

^{pr2}$

uwhoisd需要一个配置文件,告诉它如何与它需要查询的各种WHOIS服务器通信。您可以这样下载文件:

$ wget https://raw.githubusercontent.com/kgaughan/uwhoisd/master/extra/uwhoisd.ini

使用此配置文件运行守护程序将提供以下信息:

$ env/bin/uwhoisd uwhoisd.ini 
2016-05-03 17:41:25,028 INFO:uwhoisd    Reading config file at 'uwhoisd.ini'
2016-05-03 17:41:25,038 INFO:uwhoisd    Listen on 0.0.0.0:4243
2016-05-03 17:41:25,058 INFO:uwhoisd    Caching activated

第二行指示守护进程在哪个地址和端口上运行。在本例中,它在端口4243上的所有接口上运行,因此您现在可以在该端口上向它发出请求(在另一个终端窗口中):

$ whois -h localhost -p 4243 stackoverflow.com
Domain Name: STACKOVERFLOW.COM 
Registry Domain ID: 108907621_DOMAIN_COM-VRSN 
...

在运行守护程序的终端中,您应该可以看到以下附加的日志行:

2016-05-03 17:43:36,841 INFO:uwhoisd    Querying whois.verisign-grs.com about stackoverflow.com
2016-05-03 17:43:37,283 INFO:uwhoisd    Recursive query to whois.name.com about stackoverflow.com

你不应该直接使用uwhis的内部结构:它是一个守护进程,并不是被设计成用作库的,当然不是在diesel的事件循环之外使用的,这就是为什么要进行回溯。不过,用配置文件运行守护进程,您将是黄金。在

不幸的是,我还没有时间为守护进程编写所需的所有文档,但我希望很快解决这个问题。在

相关问题 更多 >