2016-04-28 19 views
1

文書化されていないライブラリuwhoisdを使用しようとしています。UWhoisオブジェクトでwhois()関数を正常に呼び出す方法を理解できません。python:uwhoisdプロキシを使用してwhoisを実行する方法

私は次の内容のUwhoisDeamon.pyファイルを呼び出すことにより、デーモンを起動します。

import uwhoisd 
uwhoisd.main() 

私のpythonに与える引数は、私がダウンロードしたときに余分ディレクトリに含まれていた*.ini fileです

:デーモンを起動するソースコードは

次の出力で成功しています

2016-04-21 19:00:19,830情報:uwhoisd設定ファイルを '/path/to/my/ini/uwhoisd.ini'に読み込みます。2016-04-21 19:00:19,838情報:uwhoisd 0.0.0.0:4243 2016年4月21日 19:00:19842 INFO:uwhoisdキャッシュが有効化[2016年4月21日午前17時00分19秒] {}ディーゼルWARNING |ディーゼル

を起動する今、私は」メートル(私はthisコードを再利用)、別のpythonのインスタンスを起動することによって、google.comでのwhoisを実行し、私は顔に平手打ちを取得しよう:

from os import path 
import uwhoisd 
from uwhoisd.utils import make_config_parser 

HERE = path.dirname(__file__) 

def create_uwhois(): 
    """Prepare a UWhois object for testing.""" 
    config = path.join(HERE, 'uwhoisd.ini') 
    parser = make_config_parser(uwhoisd.CONFIG, config) 
    uwhois = uwhoisd.UWhois() 
    uwhois.read_config(parser) 
    return uwhois 

uwhois = create_uwhois() 
# uwhois = uwhoisd.UWhois() 
result = uwhois.whois("google.com") 
print result 

そして、ここresul T:

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' 

クライアントとデーモンアプリケーション間の通信にuwhoisdで使用されdieselライブラリはそれを動作させるためにいくつかの特別な条件を必要と私には思えます。私は謎のcurrent_loopが実行されていないことがわかります。しかし、以前はディーゼルを使用していなかったので、何をすべきか分かりません。これらのwhoisクエリーを実行するには、あとでディーゼルループを始める必要があるようです。

実例は素晴らしいでしょう。私がuwhoisdを選んだ主な理由は、 "win.win"のようなエキゾチックなウェブサイトでwhoisを実行できることです。また、レスポンスがキャッシュされるため、より高速でネットワークが少なくなります。

答えて

1

ここに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... 

ここにあなたが必要なすべてのシステム・パッケージがインストールされていたと仮定すると、あなたが得るべきだ:ここでは例です

$ env/bin/uwhoisd 
Usage: uwhoisd <config> 

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 

2行目はデーモンが実行されているものをアドレスとポートを示します。この場合、ポート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 

あなたが直接uwhoisの内部を使用すべきではない:それはデーモンだと確かにそのようなディーゼルのイベントループの外で、ライブラリとして使用するように設計されていない、いますそのトレースバックを得た理由です。しかし、設定ファイルでデーモンを実行すると、金色になります。

残念ながら、私は必要なデーモンのすべてのドキュメントを書く時間がありませんでしたが、私はすぐにこれを解決することを望んでいます。

+0

ありがとうございました!私はそれが自分自身の出力を解析する必要があることを意味すると思いますが、それは大きな問題ではありません。 – evolution

+0

gTLDについては、今日は固定フォーマットがありますが、これは簡単に解析できます:https://www.icann.org/resources/pages/approved-with-specs-2013-09-17-en #whois 薄いレジストリ(.com、.net、.jobs、&c。)の場合、すべてのレジストラがそのフォーマットを使用するわけではありません。 ccTLD(2文字のドメイン名)の場合、それは完全に駄目です。 : - / –

関連する問題