Welchen Python-Weg würden Sie vorschlagen, um Whois-Datenbank-Datensätze zu überprüfen?

8

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? :)

    
kender 08.09.2008, 18:43
quelle

9 Antworten

5

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. :)

    
cdleary 10.09.2008, 21:44
quelle
8

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%     
Aziz 02.11.2010 13:53
quelle
6

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:

  • Startseite: Ссылка
  • Design: REST-Client greift auf ARIN whois REST-Service zu
  • Pro: Kann mit IP-Adress-Lookups umgehen
  • Nachteile: Kann Informationen von whois Servern anderer RIRs abrufen?

BulkWhois

  • Startseite: Ссылка
  • Design: Telnet-Client, der von RIR (?)
  • auf die Whois-Telnet-Query-Schnittstelle zugreift
  • Pro: Kann mit IP-Adress-Lookups umgehen
  • Nachteile: Kann Informationen von whois Servern anderer RIRs abrufen?

pywhois:

  • Startseite: Ссылка
  • Design: REST-Client greift auf RRID whois-Dienste zu
  • Pros: greift auf viele RRIDs zu; hat Python 3.x Zweig
  • Nachteile: scheint nicht mit IP-Adressen-Lookups zu arbeiten

python-whois:

  • Startseite: Ссылка
  • Design: Wraps "whois" -Befehl
  • Nachteile: scheint nicht mit IP-Adressen-Lookups zu arbeiten

whoisclient - Abzweigung von python-whois

  • Zuhause: Ссылка
  • Design: Wraps "whois" -Befehl
  • Abhängig von: IPy.py
  • Nachteile: scheint nicht mit IP-Adressen-Lookups zu arbeiten

Update: Ich habe pywhoisapi für die umgekehrten IP-Lookups verwendet, die ich gemacht habe

    
Lars Nordin 05.07.2012 12:03
quelle
4

Hier ist der Whois-Client, der in Python neu implementiert wurde: Ссылка

    
Boden Garman 31.03.2011 00:37
quelle
1

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:

  • Welchen Whois-Server werden Sie fragen? RIPE, ARIN, APNIC, LACNIC, AFRINIC, JPNIC, VERIO usw. LACNIC könnte ein nützlicher Rückfall sein, da sie dazu neigen, mit nützlichen Daten auf Anfragen außerhalb ihrer Domäne zu antworten.
  • Was sind die genauen Optionen und Argumente für jeden whois Server? manche bieten Hilfe an, andere nicht. Im Allgemeinen funktionieren reine Domain-Namen ohne spezielle Optionen.
tzot 16.09.2008 00:23
quelle
0

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.

    
Justin Standard 08.09.2008 18:53
quelle
0

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.

    
kender 08.09.2008 19:00
quelle
0
%Vor%

Wenn es einen Gaierror zurückgibt, wissen Sie, dass es bei keinem DNS registriert ist

    
Ryan 09.03.2010 10:07
quelle
0

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ß!

%Vor%     
flow 09.03.2010 16:17
quelle

Tags und Links