whois-Abfrage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Peak_me
User
Beiträge: 92
Registriert: Sonntag 27. Januar 2008, 03:09

Ich möchte eine whois-Abfrage zu einer .de-Domain machen.
Wieso funktioniert dies nicht:

Code: Alles auswählen

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("whois.denic.de", 43))
s.send("test.de")
print s.recv(1024)
Auf welche Weise muss ich mit dem Server kommunizieren, dass er mir eine Antwort gibt?


Gruß
Paul
lunar

Die Anfrage „funktioniert nicht“, weil sie nicht dem Protokoll entspricht. Du musst nach dem Servernamen noch "\r\n" senden. Steht im Übrigen sogar bei Wikipedia ...
Peak_me
User
Beiträge: 92
Registriert: Sonntag 27. Januar 2008, 03:09

Das nenn ich mal effiziente Kommunikation!
ein Antwort, die das Problem löst, in unter 9 Minuten

danke! :D

Es ging auch kurz, jetzt kommt aber
Error: 55000000002 Connection refused; access control limit exceeded :roll:

Ich möchte abfragen, ob eine (große) Liste von Domains schon registriert ist.
Dazu taugt dann die oben genannten Möglichkeit wohl nicht.

Ich habe diese weiteren Möglichkeiten gefunden:

Code: Alles auswählen

try:
    socket.gethostbyname(url)
    #anweisungen
except:
    pass

Code: Alles auswählen

nsurl="nslookup "+url
    nslookup=os.popen(nsurl).readlines()
    if len(nslookup)>3:
        #Anweisungen

Code: Alles auswählen

try:
    urllib2.urlopen(url)
    #Anweisungen
except:
    pass
Soll eine Liste mit URLs überprüft werden, von denen erwartet wird, dass sie überwiegend aktiv sind, dann hat gethostbyname deutlich die Nase vorn:
Pro URL braucht
gethostbyname ca 0,0005 Sekunden,
nslookup ca 0,1 Sekunden und
urllib ca 0,15 Sekunden.
Meine CPU-Auslastung (Dualcore 2 GHz) liegt währen dieser Operationen bei:
gethostbyname 60 %
nslookup 30 %
urllib 1%
Erstaunlich ist die im Vergleich hohe CPU-Auslastung von nslookup gegenüber urllib, obwohl beide etwa gleichlange brauchen.
Was macht nslookup, was urllib nicht macht?

Sollen jedoch Listen überprüft werden, in denen unregistrierte URLs überwiegen, liegt nslookup vorne:
gethostbyname braucht ca 0,3 Sekunden,
nslookup ca 0,2 Sekunden und
urllib ca 1 Sekunde.
Diese Zeiten schwanken natürlich stark, jenachdem wie die URLs aufgeteilt sind, aber es zeichnet sich in etwa dieser Trend ab.
Um mehr URLs pro Zeiteinheit überprüfen zu können, kann man auch die Listen in parallele Prozesse aufteilen, was jedoch auch Probleme nach sich zieht:
nslookup und gethostbyname erreichen CPU-bedingt schnell eine Grenze
urllib hat bei parallelen Prozessen hohe Ausfallquoten: bei 20 oder mehr Prozessen werden bei meiner 2-Mbit-Leitung nur noch unter 30 % aller registrierten URLs erkannt, der Rest wird Traffic-bedingt nicht erkannt. Diesen Effekt kann man durch heraufsetzen der setdefaulttimeout-Zeit abschwächen, was jedoch dann wieder in kleinerer Überprüfungsfrequenz resultiert.

Ein weiteres Problem ist, dass ich bei gethostbyname kein setdefaulttimeout implementieren kann.


Wenn jemand Gedanken zu diesen Problemen hat und vielleicht weitere Überprüfungsmethoden kennt, würde ich mich darüber sehr freuen.


Gruß
paul
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du weißt aber schon, das Domains registriert sein können, selbst wenn ihnen keine Adressen zugeordnet ist? Daher kannst du es vergessen mit ``urllib`` zu versuchen da Informationen zu bekommen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Peak_me
User
Beiträge: 92
Registriert: Sonntag 27. Januar 2008, 03:09

Ja, das ist mir bewusst.
Mit urllib hat die Liste mit den gefundenen URLs keinen Anspruch auf Vollständigkeit.
svenXY
User
Beiträge: 27
Registriert: Dienstag 16. Juni 2009, 10:36
Kontaktdaten:

:arrow: http://www.denic.de/de/whois/index.jsp:
Um Massen-Abfragen auf unseren whois-Servern zu vermeiden und dafür Sorge zu tragen, dass der Dienst allen Nutzern zur Verfügung steht, existiert eine Beschränkung der Anzahl der Abfragen aus einem bestimmten Bereich pro Zeitintervall. Wird dieser Wert überschritten, werden alle weiteren Abfragen mit "Connection refused; access control limit exceeded" beantwortet.
Hast Du einen guten Grund zum Domaingrabbing?
Peak_me
User
Beiträge: 92
Registriert: Sonntag 27. Januar 2008, 03:09

Das ist mir klar, dass denic das begrenzt.
Deswegen sind ja die anderen Methoden, die ihre Antworten aus der "normalen" Internetstruktur (von den DNS-Servern etc.) beziehen, besser geeignet.

Und Domaingrabbing will ich nicht betreiben, ich will die Dinger ja nicht registrieren sondern nur statistisch auswerten.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Peak_me hat geschrieben:Und Domaingrabbing will ich nicht betreiben, ich will die Dinger ja nicht registrieren sondern nur statistisch auswerten.
Hast du schon versucht die Registrare zu kontaktieren? Die Zahlen müssten ihnen ja mehr oder weniger leicht zugänglich sein und ruecken sie eventuell aus.
Peak_me
User
Beiträge: 92
Registriert: Sonntag 27. Januar 2008, 03:09

also ich denke nicht, dass Strato und Co ihre registrierten Domains rausrücken
Antworten