2016-04-28 12 views
1

Ich versuche, die undokumentierte Bibliothek uwhoisd zu verwenden, und ich kann nicht herausfinden, wie erfolgreich die whois() Funktion auf dem Objekt UWhois aufgerufen wird.Python: wie whois mit uwhoisd Proxy ausführen

beginne ich die deamon, indem eine Datei UwhoisDeamon.py mit folgendem Inhalt Aufruf:

import uwhoisd 
uwhoisd.main() 

Das Argument, das ich zu Python gebe die *.ini file, die im zusätzlichen Verzeichnis aufgenommen wurde, als ich die heruntergeladene Quellcode

die deamon starten erfolgreich mit folgenden Ausgang:

2016-04-21 19: 00: 19.830 INFO: uwhoisd Lesen der Konfigurationsdatei unter '/pfad/zu/my/ini/uwhoisd.ini' 2016-04-21 19: 00: 19,838 INFO: uwhoisd Anhören auf 0.0.0.0:4243 2016.04.21 19: 00: 19.842 INFO: uwhoisd Caching aktiviert [2016.04.21 17.00.19] {Diesel} WARNUNG | Dieselstart

Jetzt bin ich versuchen, auf google.com whois durchführen, indem eine separate python-Instanz starten und bekomme ich ins Gesicht geschlagen (wiederverwendet ich this Code):

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 

und hier die 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' 

Es scheint mir, dass die diesel-Bibliothek, die von uwhoisd verwendet wird zwischen Client und Deamon Anwendung erfordert einige besondere Bedingungen zu kommunizieren, damit es funktioniert. Von dem, was ich sehen kann, läuft das mysteriöse current_loop nicht. Allerdings habe ich noch nie Diesel verwendet und ich habe keine Ahnung was zu tun ist. Es scheint mir, dass ich diese Dieselschleife irgendwie starten muss, bevor ich diese Whois-Abfragen durchführen kann.

Ein funktionierendes Beispiel wäre großartig. Der Hauptgrund, warum ich mich für uwhoisd entschieden habe, ist, dass ich Whois auf exotischen Webseiten wie "win.win" ausführen kann. Es speichert auch Antworten, was mehr Geschwindigkeit und weniger Netzwerk bedeutet.

Antwort

1

Autor von uwhoisd hier.

Zuerst, loswerden UwhoisDeamon.py: Es ist ein Daemon, keine Bibliothek. Sie sollten den Daemon ausführen und ihn dann mit einem Whois-Client abfragen. Sie müssen keinen zusätzlichen Code schreiben, um es zu starten. Es installiert bereits ein Arbeitskonsolenskript, das das Richtige tut.

Wenn Sie es beispielsweise in eine virtuelle Umgebung installieren, wird ein Skript namens uwhoisd erstellt, mit dem Sie den Dämon ausführen. Hier ein Beispiel:

$ 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... 

Wenn Sie den Daemon ausführen, ohne, hier ist was Sie sollten erhalten, vorausgesetzt, Sie alle hatten notwendigen Systempakete installiert:

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

uwhoisd erfordert eine Konfigurationsdatei, die es erzählt, wie um mit den verschiedenen WHOIS-Servern zu sprechen, die es braucht, um abfragen zu können.Sie können die Datei herunterladen, etwa so:

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

den Daemon mit dieser Konfigurationsdatei, Laufen sollten Sie Folgendes geben:

$ 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 

Die zweite Zeile gibt an, welche Adresse und Port der Daemon auf läuft. In diesem Fall läuft es auf allen Schnittstellen auf Port 4243, so können Sie jetzt Anfragen erteilen an diesem Port (in einem anderen Terminal-Fenster):

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

Und Sie sollten die folgenden zusätzlichen Protokollzeilen in die sehen

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 

Sie sollten nicht mit Einbauten uwhois der direkt: Terminal der Dämon in läuft es ein Dämon ist und ausgelegt ist, nicht als Bibliothek genutzt werden, schon gar nicht außerhalb der Ereignisschleife Diesel wie das, was Deshalb hast du diese Rückverfolgung. Führen Sie den Daemon jedoch mit der Konfigurationsdatei aus, und Sie werden golden sein.

Leider hatte ich nicht die Zeit, um die gesamte Dokumentation für den Daemon zu schreiben, aber ich hoffe, das bald zu lösen.

+0

Vielen Dank! Ich denke, das bedeutet, dass ich die Ausgabe selbst parsen muss, aber das ist kein großes Problem. – evolution

+0

Unvermeidlich, ich fürchte, obwohl es für gTLDs heutzutage ein festes Format gibt, das leicht zu analysieren ist: https://www.icann.org/resources/pages/approved-with-specs-2013-09-17-de #whois Für Thin-Registries (.com, .net, .jobs usw.) verwenden leider nicht alle Registrare dieses Format. Für ccTLDs (Zwei-Buchstaben-Domain-Namen) ist es ein totales Craps-Shooting. : - / –