[Gelöst] pydig Domain, PTR, CNAME, IP und ipaddress

  • Ich wollte mir ein kleines Programm schreiben, welches mir die IP mit einer Domain abfragen und vergleichen soll.

    Jetzt habe ich ein paar kleine Probleme damit.

    Das Programm soweit:

    Und die Ausgabe:

    Code
    Ergebnis PTR Anfrage =  ['github.com.']
    Ergebnis der A Anfrage ist  ['github.com.', '140.82.121.4']
    Ergebnis der CNAME Anfrage ist  ['github.com.']
    ['github.com.', '140.82.121.4']
    ['github.com.', '140.82.121.4']
    Domain ['github.com.'] hat die IP 

    Problem 1: Es ist so, dass z.B. github ja mehr als eine IP hat und mal auf .3 und mal auf .4 endet, da ich die IP aber noch mit ipaddress als IP verifizieren will, kann ich da nichts abschneiden.

    Problem 2: Ich bekomme die Klammern und Anführungszeichen nicht weg, habs mit replace probiert, aber geht irgendwie nicht.

    Problem 3: Ich bekomme die IP alleine nicht raus und pydig mag auch kein HIP, die IP wollte ich aber mit {} und .format in der Ausgabe in Zeile 15 und 17 stehen haben.

    :helpnew:

  • [Gelöst] pydig Domain, PTR, CNAME, IP und ipaddress? Schau mal ob du hier fündig wirst!

  • Hab keine Ahnung von Python aber das scheinen Listen zu sein.

    Versuch mal :

    Code
    print("Ergebnis PTR Anfrage = ", PTRAnfrage[0])
    print("Ergebnis der A Anfrage ist ", Aanfrage[0])
    print("Ergebnis der CNAME Anfrage ist ", CNAMEAnfrage[0])

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Ja Super, das erspart mir doch schon ein Haufen:

    Ausgabe:

    Code
    IP =  140.82.121.4
    Domain =  github.com.
    Domain github.com. hat die IP 140.82.121.4

    Mal gucken, ob ich alleine weiterkomme.

    :danke_ATDE:

  • Hallo,

    zu 2 und 3 so? :

    Habe jetzt nur die eine 'print' angepasst, weis gar nicht genau, ob du das gesucht hast?

    Grüße

    Dennis

    Edit: War war ich wohl zu langsam :sleepy:

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Github nutzt wohl RoundRobin DNS, um die Last auf ihre Server zu verteilen.

    Tätigt man die gleiche Anfrage, bekommt man mal die .3 und dann wieder die .4.

    Antwort 2)

    Die eckigen Klammern in der Ausgabe sind vom Typ list und kein str. Du siehst die Repräsentation.

    Mittels Subscription kann man auf die Elemente innerhalb einer Liste zugreifen:

    Code
    my_list = ["domain.tld", "1.1.1.1"]
    print(my_list[1])
    # 1.1.1.1

    Das Indexing fängt bei 0 an.

    Antwort 3)

    Der PTR-Query ist falsch.

    Ein PTR löst eine ip-addresse in eine Domain auf.

    Die Anfrage müsste so aussehen: 4.121.82.140.in-addr.arpa

    Python
    from ipaddress import ip_address
    
    
    print(ip_address("140.82.121.4").reverse_pointer)

    Ich finde pydig gar nicht mal so schlecht. Wenn man sich die anderen Pakete ansieht, sind die teils recht komplex aufgebaut.

    Was mir nicht gefällt, dass z.B. die Prioritäten beim mx-query nicht in int umgewandelt werden. Aber mit einfachen Mitteln kann man das selbst machen.


    Hier ein kleines Beispiel:

  • Eine Kleinigkeit wäre da noch, im Moment sieht es so aus:

    Und die Ausgabe so:

    Code
    IP der Domain github.com. ist 140.82.121.3
    Domain mit Punkt am Ende = github.com.
    Domain ohne Punkt am Ende = github.com
    ['github.com.', '140.82.121.3']
    ['github.com.', '140.82.121.4']
    Domain github.com hat jetzt die IP 140.82.121.3
    140.82.121.3 ist eine gültige IPv4

    Kann ich jetzt einfach eine Liste mit IPs anlegen, oder ist das doof ?

    Also LISTE_IPs=[140.82.121.3, 140.82.121.4] und dann im Code abfragen ? :denker:

  • Hallo,

    wenn es sich immer nur um die zwei IP's handelt. Wäre es keine Option eine Datei mit IP-Adressen anzulegen und diese jedes mal einzulesen. Dann wäre das Hinzufügen oder Löschen von IP-Adressen angenehmer.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Ich verstehe nicht ganz was der Sinn des Programms ist, aber wenn du eine *.csv-Datei machst die zum Beispiel so aussieht:

    Code: Irgendwas.csv
    Webseite,IP1,IP2
    Github,140.82.121.3,140.82.121.4

    Dann kannst du so darauf zugreifen:

    Code
    with open('Absoluter/Pfad/zur/Irgendwas.csv', newline='') as csvfile:
        reader = csv.DictReader(csvfile, delimiter=',')
        for row in reader:
            print(row['Webseite'], row['IP1'], row['IP2'])

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Ich verstehe zwar nicht, was du mit der letzten Zahl im IP-Block willst, aber das, was du machst, sieht etwas umständlich aus.

    Ein IPvxAddress Object kann in ein int umgewandelt werden und dann kann man mit ein bisschen bit-shiften und maskieren, die einzelnen Blöcke als Zahlen ausgeben.

    Code
    ip = ipaddress.ip_address("10.20.30.40")
    ip_blocks = [int(ip) >> (shift * 8) & 0xFF for shift in reversed(range(4))]
    # [10, 20, 30, 40]

    IPv4 -> 32 bit, 4 Blöcke, pro Block 8 Bit

    IPv6 -> 128 Bit, 8 Blöcke mit jeweils 16 Bit

    IPv4 jeweils um 8 Bit shiften (4 mal) und mit 0xFF maskieren

    IPv6 jeweils um 16 bit shiften (8 mal) und mit 0xFFFF maskieren.

    Ohne list-comprehension sähe das manuell so aus:


    Einen ganz anderen Weg kann man über die str-Verarbeitung gehen:

    Code
    ip_blocks = list(map(int, str(ip).split(".")))

    Das object ip wird in ein str umgewandelt und beim "." wird gesplittet. Die Funktion map wendet dann für jedes Element die Funktion int an. Da map "lazy evaluation" macht, muss das resultierende map-objekt z.B. durch list konsumiert werden.

  • Danke für die gute Erklärung, aber das ist mir noch viel zu hoch, da muss ich mich erst reinarbeiten. :stumm:

    Edit: Wobei ich viel zu kompliziert denke, bei nur 2 IPs reicht es ja einfach so: :lol:

    Ausgabe:

    Code
    IP der Domain github.com ist 140.82.121.4
    Domain github.com hat die IP 140.82.121.4
    140.82.121.4 ist eine gültige IPv4
  • Wobei ich feststellen muss, dass das ganze so eh nicht funktioniert, da je nach abgefragter Domain nur die IP und keine Domain mit ausgeliefert wird, zudem funktioniert mein Vergleich nicht:

    Mein Fehler, muss es natürlich ein elif in Zeile 29 sein.

    Ausgabe:

    Code
    ['193.99.144.80'] ['193.99.144.80'] ['1.2.3.4'] 193.99.144.80 193.99.144.80 1.2.3.4
    Erste korrekte IP sollte 193.99.144.80 sein, und ist 193.99.144.80
    IP soll 193.99.144.80 oder 1.2.3.4 sein, IP ist aber 193.99.144.80
    193.99.144.80 ist eine gültige IPv4

    Mit dem elif:

    Ausgabe:

    Code
    ['193.99.144.80'] ['193.99.144.80'] ['1.2.3.4'] 193.99.144.80 193.99.144.80 1.2.3.4
    Erste korrekte IP sollte 193.99.144.80 sein, und ist 193.99.144.80
    193.99.144.80 ist eine gültige IPv4
  • Stimmt trotzdem nicht:

    Ausgabe:

    Code
    ['193.99.144.80'] ['1.2.3.4'] ['193.99.144.80'] 193.99.144.80 1.2.3.4 193.99.144.80
    IP soll 1.2.3.4 oder 193.99.144.80 sein, IP ist aber 193.99.144.80
    193.99.144.80 ist eine gültige IPv4

    Ich gebs auf. ;(

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!