Reverse DNS Abfrage mit vorgegebenem DNS Server

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
KusiE
User
Beiträge: 3
Registriert: Montag 31. August 2020, 06:47

Hallo allerseits

In unserem Umfeld haben wir seit einer Weile mehrere DNS Domänen. Dies führt nun dazu, dass meine Prüfscrips bei der reverse Namensauflösung nur noch bei den IP's funktionieren, welche in der gleichen DNS Domäne sind, wie der Rechner auf dem das Script läuft. Daher wollte ich meine Scripts so anpassen, dass ich den abzufragenden DNS Server angeben kann. Dies scheint die socket Bibliothek nicht zu bieten. Ich bin beim Suchen im Netz auf dnspython gestossen. Denke damit müsste ich so etwas programmieren können. Aber anscheinend bin ich zu doof dazu.

Wenn es wirklich machbar ist, wäre ich extrem dankbar für ein Codebeispiel.

Und damit es keine Missverständnisse gibt. Ich möchte in Python das machen was in der Windows Eingabeaufforderung so aussieht:
nslookup <aufzulösende IP Adresse> <verwendeter DNS Server>

Bedanke mich schon im Voraus für Eure Lösungsvorschläge. :)
AlexL
User
Beiträge: 16
Registriert: Donnerstag 5. August 2021, 10:38

KusiE hat geschrieben: Donnerstag 12. August 2021, 13:32 Hallo allerseits

In unserem Umfeld haben wir seit einer Weile mehrere DNS Domänen. Dies führt nun dazu, dass meine Prüfscrips bei der reverse Namensauflösung nur noch bei den IP's funktionieren, welche in der gleichen DNS Domäne sind, wie der Rechner auf dem das Script läuft. Daher wollte ich meine Scripts so anpassen, dass ich den abzufragenden DNS Server angeben kann. Dies scheint die socket Bibliothek nicht zu bieten. Ich bin beim Suchen im Netz auf dnspython gestossen. Denke damit müsste ich so etwas programmieren können.
Hallo ebenfalls.
Ich habe erst mal 3 Fragen:
1. Was bedeutet "Umfeld" konkret?
2. Wie sieht dein bisheriges Skript aus?
3. Wozu brauchst du für nslookup ein Skript? - Btw. - meiner Unkenntnis geschuldet: das letzte Mal, dass ich ein nslookup gemacht hatte, liegt mindestens 20 Jahre zurück. Klar, ich betreibe auch keine Nameserver.
Benutzeravatar
frogi001
User
Beiträge: 15
Registriert: Samstag 17. März 2018, 00:35

Hallo,
müsste irgendwie so gehen:

Code: Alles auswählen

import dns
from dns import resolver, reversename
  
# eigenen nameserver setzen
my_resolver = dns.resolver.Resolver()
my_resolver.nameservers = ['8.8.8.8']

revName = dns.reversename.from_address("172.217.22.227")
hostName = my_resolver.query(revName, "PTR")[0]

print(revName.to_text())
# 227.22.217.172.in-addr.arpa.
print(hostName)
# muc11s02-in-f3.1e100.net.

Viele Grüße
HS
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Ich schlage die Verwendung von dnspython vor.
KusiE
User
Beiträge: 3
Registriert: Montag 31. August 2020, 06:47

AlexL hat geschrieben: Donnerstag 12. August 2021, 16:59
KusiE hat geschrieben: Donnerstag 12. August 2021, 13:32 Hallo allerseits

In unserem Umfeld haben wir seit einer Weile mehrere DNS Domänen. Dies führt nun dazu, dass meine Prüfscrips bei der reverse Namensauflösung nur noch bei den IP's funktionieren, welche in der gleichen DNS Domäne sind, wie der Rechner auf dem das Script läuft. Daher wollte ich meine Scripts so anpassen, dass ich den abzufragenden DNS Server angeben kann. Dies scheint die socket Bibliothek nicht zu bieten. Ich bin beim Suchen im Netz auf dnspython gestossen. Denke damit müsste ich so etwas programmieren können.
Hallo ebenfalls.
Ich habe erst mal 3 Fragen:
1. Was bedeutet "Umfeld" konkret?
2. Wie sieht dein bisheriges Skript aus?
3. Wozu brauchst du für nslookup ein Skript? - Btw. - meiner Unkenntnis geschuldet: das letzte Mal, dass ich ein nslookup gemacht hatte, liegt mindestens 20 Jahre zurück. Klar, ich betreibe auch keine Nameserver.
Merci für Dein Feedback. Ich hoffe mit den Zeilen unten kann ich Deine Fragen beantworten.

1. Umfeld
Firmennetzwerk (Zentrale/Aussenstandorte) mit einigen hundert VLANs. Diverse VLAN's werden seit einiger Zeit nicht mehr von unserem DNS, sondern vom DNS des übergeordneten Konzern verwaltet. Dies führt zu meinem Problem.

2. Skript (auf das Minimum reduziert, als Beispiel was ich machen will)
Beispiel 1:

Code: Alles auswählen

import socket

in_file = open("ips.csv","r")
out_file = open("ergenis.csv","w")

for ip in in_file:
    hostname = socket.getfqdn(ip.rstrip())
     
    out_file.write(ip.rstrip()+";"+hostname+"\n")

in_file.close()
out_file.close()
Beispiel2:

Code: Alles auswählen

import socket

in_file = open("hostnames.csv","r")
out_file = open("ergebis.csv","w")

for hostname in in_file:
    ip = socket.gethostbyname(hostname.rstrip())

    out_file.write(ip+";"+hostname+"\n")

in_file.close()
out_file.close()
Neu müsste ich dem getfqdn und dem gethostbyname den zu verwendenden DNS angeben können.

3. nslookup
Damit wollte ich nur verdeutlichen, was das Script rein von der Funktion her machen soll.
KusiE
User
Beiträge: 3
Registriert: Montag 31. August 2020, 06:47

frogi001 hat geschrieben: Donnerstag 12. August 2021, 20:05 Hallo,
müsste irgendwie so gehen:

Code: Alles auswählen

import dns
from dns import resolver, reversename
  
# eigenen nameserver setzen
my_resolver = dns.resolver.Resolver()
my_resolver.nameservers = ['8.8.8.8']

revName = dns.reversename.from_address("172.217.22.227")
hostName = my_resolver.query(revName, "PTR")[0]

print(revName.to_text())
# 227.22.217.172.in-addr.arpa.
print(hostName)
# muc11s02-in-f3.1e100.net.

Super, besten Dank. Hab es mit Deinem Beispielcode hinbekommen!
Antworten