Kategorien
Technik

Freie Domains (.de) per Python Skript ermitteln

Kleines Python 3 Skript, mit dem sich ermitteln lässt, welche .de Domains noch nicht vergeben sind.

Warum das Ganze?

Ich hatte kürzlich die Idee, zukünftig für die Anmeldung bei Online-Diensten eine Catchall Mailadresse einzurichten und dann je Dienst eine eigene Mailadresse zu verwenden, um bei Datenleaks etc. zu sehen, wo sie abhanden gekommen sind und vor allem auch, um gezielt sperren zu können.

Ich hätte also gerne Adressen wie amazon@xyz.de und facebook@xyz.de zur Verfügung. Und dafür wäre es doch schön, eine möglichst kurze Domain zu besitzen. xyz.de ist natürlich schon vergeben, aber vielleicht gibt es da ja noch etwas anderes mit wenigen Buchstaben?

Doch wie findet man das nun heraus? Es gibt zwar zig Seiten, bei denen man prüfen kann, ob eine Name schon vergeben ist, aber um gezielt freie Domains zu finden ist das natürlich viel zu aufwändig. Zum Glück gibt es einen Service, der genau das macht: WHOIS.

Folgendes Skript ist dabei herausbekommen. Sicher kein Musterbeispiel der sauberen Programmierkunst, aber es tut genau das was ich möchte: Alle freien .de Domains mit max. 5 Zeichen vor dem Punkt ermitteln.

Dazu nutzt es das „whois“ Paket von Python. Dieses meldet eine Exception, wenn ein Eintrag nicht gepflegt ist und genau das machen wir uns zu nütze. Da so ziemlich viele Anfragen zusammenkommen, fängt der whois Server irgendwann an, nur noch leere Responses zurückzugeben. Daher habe ich eine kleine Wartefunktion für diesen Fall eingebaut, die es dann immer wieder probiert. Zuerst nach 2s, dann nach 4s, nach 8s, etc., schließlich wollen wir den Server ja nicht unnötig zuspammen.

Die Ergebnisse werden live in der Konsole ausgegeben für jede geprüfte Domain und eine Liste aller gefundenen unvergebenen Domains wird in einer Textdatei abgespeichert.

Wer auch auf der Suche ist: Viel Spaß damit 🙂

import sys
import whois  #pip install python-whois
#include ctypes if you're on Windows
import ctypes
kernel32 = ctypes.windll.kernel32
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
#end ctypes
import time
import string
import itertools

def main():
    characters = list(string.ascii_lowercase)
    log = open("c:\\Temp\\whoisresult.txt", "w")
    ##domain names generator
    for r in range(1, 5) :
        for name in itertools.product(characters, repeat=r) : #from 'a.de' to 'zzzzz.de'
            url = ''.join(name) + '.de'
            waitsecs = 2
            try :
                success = False
                while success == False:
                    print('Checking ' + url + ' ... ', end = '')
                    w = whois.whois(url)
                    if (w.status != None):
                        success = True
                        print("Exists!")
                    else:
                        print("Probably the rate limit has been reached. Trying again in " + str(waitsecs) + "s.", end = '\r')
                        time.sleep(waitsecs)
                        sys.stdout.write('\x1b[2K\r')
                        waitsecs = waitsecs * 2
            except (whois.parser.PywhoisError):
                print('Exception! (probably unregistered name here)')
                print(url, file = log)

def print_statusline(msg: str):
    last_msg_length = len(print_statusline.last_msg) if hasattr(print_statusline, 'last_msg') else 0
    print(' ' * last_msg_length, end='\r')
    print(msg, end='\r')
    sys.stdout.flush()  # Some say they needed this, I didn't.
    print_statusline.last_msg = msg

if __name__ == '__main__':
    main()

Um das Skript ausführen zu können, müsst ihr Python 3 installiert haben und das Paket whois per pip install python-whois installiert haben. Dann kann das Skript z.B. als domaincheck.py Datei abgespeichert und per python ./domaincheck.py ausgeführt werden.

Ergebnis (Stand heute)

Berücksichtigt sind nur Domains, die ausschließlich aus den Buchstaben a-z bestehen.

Freie 1-Stellige .de Domains: 0 von 26 (0%)

Freie 2-Stellige .de Domains: 0 von 676 (0%)

Freie 3-Stellige .de Domains: 0 von 17576 (0%)

Freie 4-Stellige .de Domains: 49694 von 456976 (10,87%)

Quellen

https://stackoverflow.com/questions/31597125/how-to-find-out-programmatically-if-a-domain-name-is-registered-or-not

https://stackoverflow.com/questions/5419389/how-to-overwrite-the-previous-print-to-stdout-in-python

Wenn diese Seite für dich hilfreich war und du dich bei mir bedanken möchtest, dann freue ich mich ganz außerordentlich darüber, wenn du für deinen nächsten Einkauf bei amazon.de über diesen Link gehst. Ich bekomme dann eine kleine Provision, für dich kostet es keinen Cent extra. Wenn du mir lieber direkt etwas zukommen lassen möchtest, dann kannst du das hier.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.