Ich versuche, einen Webservice einzurichten, der tatsächlich die Überprüfung von Whois-Datenbanken erfordert. Was ich gerade mache ist hässlich und ich möchte es so gut wie möglich vermeiden: Ich rufe gwhois command auf und parse seine Ausgabe. Hässlich.
Ich habe ein wenig gesucht, um zu versuchen, einen pythonischen Weg zu finden, um diese Aufgabe zu erledigen. Im Allgemeinen habe ich ziemlich viel nichts - dieser alte Diskussionslistenlink hat einen Weg dazu Überprüfen Sie, ob die Domain existiert. Ziemlich nicht das, was ich suchte ... Aber dennoch, es war das beste Anwser Google gab mir - alles andere ist nur eine Reihe von unbeantworteten Fragen.
Jeder von euch hat es geschafft, eine Methode zum Laufen zu bringen? Ich würde einige Tipps sehr schätzen, oder sollte ich einfach Open Source machen, mich hinsetzen und etwas selbst programmieren? :)
Es ist nichts falsch daran, ein Befehlszeilendienstprogramm zu verwenden, um das zu tun, was Sie wollen. Wenn Sie einen netten Wrapper um den Service legen, können Sie die Interna beliebig implementieren! Zum Beispiel:
%Vor%Nun, ob Sie Ihre eigenen mit urllib rollen oder nicht, wickeln Sie ein Befehlszeilendienstprogramm um (wie Sie es tun) oder importieren Sie eine Drittanbieterbibliothek und verwenden Sie diese (wie Sie sagen ), diese Schnittstelle bleibt gleich.
Dieser Ansatz wird im Allgemeinen nicht als hässlich betrachtet - manchmal führen Befehlsprogramme das aus, was Sie wollen, und Sie sollten in der Lage sein, sie zu nutzen . Wenn die Geschwindigkeit zu einem Engpass wird, macht Ihre Abstraktion den Übergang zu einer nativen Python-Implementierung für Ihren Client-Code transparent.
Praktikabilität schlägt Reinheit - das ist Pythonic. :)
Sieh dir das an: Ссылка
pywhois - Python-Modul zum Abrufen von WHOIS-Informationen von Domänen
Ziel: - Erstellen Sie ein einfaches importierbares Python-Modul, das geparste WHOIS-Daten für eine bestimmte Domäne erzeugt. - Möglichkeit, Daten für alle gängigen TLDs (com, org, net, ...) zu extrahieren - Fragen Sie einen WHOIS-Server direkt ab, statt wie viele andere einen Web-Zwischenservice zu durchlaufen. - Arbeitet mit Python 2.4+ und keine externen Abhängigkeiten
Beispiel:
%Vor%Diese Frage wurde im Verlauf meiner eigenen Suche nach einer Python-Whois-Bibliothek gefunden.
Ich weiß nicht, dass ich mit der Antwort von cdleary übereinstimme, dass ich eine Bibliothek verwende, die umschließt Ein Befehl ist immer der beste Weg zu gehen - aber ich kann seine Gründe sehen, warum er das gesagt hat.
Pro: cmd-line whois erledigt die ganze harte Arbeit (Socket-Aufrufe, Parsing, etc)
Con: nicht tragbar; Modul funktioniert möglicherweise nicht abhängig vom zugrunde liegenden Whois-Befehl. Langsamer, seit dem Ausführen eines Befehls und höchstwahrscheinlich Shell zusätzlich zum Whois-Befehl. Betroffen sind, wenn nicht UNIX (Windows), anderes UNIX, älteres UNIX, oder älterer whois Befehl
Ich bin auf der Suche nach einem Whois-Modul, das whois IP-Lookups verarbeiten kann und ich bin nicht daran interessiert, meinen eigenen Whois-Client zu programmieren.
Hier sind die Module, die ich (leicht) ausprobiert habe und weitere Informationen dazu:
pywhoisapi:
BulkWhois
pywhois:
python-whois:
whoisclient - Abzweigung von python-whois
Update: Ich habe pywhoisapi für die umgekehrten IP-Lookups verwendet, die ich gemacht habe
Hier ist der Whois-Client, der in Python neu implementiert wurde: Ссылка
Ich weiß nicht, ob gwhois etwas Besonderes mit der Serverausgabe macht; Sie können jedoch einfach eine Verbindung zum whois-Server über den Port whois (43) herstellen, Ihre Abfrage senden, alle Daten in der Antwort lesen und analysieren. Um das Leben etwas einfacher zu machen, könnten Sie die Telnetlib.Telnet-Klasse (auch wenn das Whois-Protokoll viel einfacher als das Telnet-Protokoll ist) anstelle von einfachen Sockets verwenden.
Die heiklen Teile:
Eine andere Möglichkeit besteht darin, das Modul urllib2
zu verwenden, um den Whois-Dienst einer anderen Seite zu analysieren (viele solcher Seiten existieren). Aber das scheint noch mehr ein Hack zu sein als das, was du jetzt tust, und würde dir eine Abhängigkeit von der von dir gewählten Website geben, die schlecht ist.
Ich hasse es zu sagen, aber wenn Sie whois
in Ihrem Programm nicht neu implementieren wollen (was das Rad neu erfinden würde), führen Sie whois
auf dem OS aus und analysieren Sie die Ausgabe (dh was Sie sind jetzt tun) scheint der richtige Weg, es zu tun.
Parsing einer anderen Webseite wäre nicht so schlimm (vorausgesetzt, ihr HTML wäre nicht sehr schlecht), aber es würde mich tatsächlich an sie binden - wenn sie unten sind, bin ich down :)
Tatsächlich habe ich ein altes Projekt auf Sourceforge gefunden: rwhois.py . Was mich ein wenig erschreckt ist, dass ihr letztes Update von 2003 ist. Aber es könnte ein guter Ort sein, um die Neuimplementierung dessen, was ich gerade tue, zu beginnen ... Nun, ich fühlte mich verpflichtet, den Link zu diesem Projekt trotzdem zu posten als weitere Referenz.
Hier ist eine gebrauchsfertige Lösung, die für mich funktioniert. geschrieben für Python 3.1 (achten Sie bei der Rückportierung auf Py2.x besonders auf die Unterscheidung von Bytes und Unicode-Texten). Ihr einziger Zugangspunkt ist die Methode DRWHO.whois()
, die erwartet, dass ein Domainname übergeben wird; Anschließend wird versucht, den Namen mithilfe des als DRWHO.whois_providers[ '*' ]
konfigurierten Providers aufzulösen (eine vollständigere Lösung könnte Anbieter nach der Top-Level-Domain unterscheiden). DRWHO.whois()
gibt ein Wörterbuch mit einem einzelnen Eintrag text
zurück, das den vom WHOIS-Server zurückgesendeten Antworttext enthält. Wiederum würde eine vollständigere Lösung dann versuchen, den Text zu parsen (was für jeden Anbieter separat zu tun ist, da es kein Standardformat gibt) und ein strukturierteres Format zurückgeben (z. B. ein Flag available
setzen, das angibt, ob oder nicht) die Domain erscheint verfügbar). Viel Spaß!