Ich bräuchte etwas hilfe bei meiner Umsetzung. Ich google jetzt schon seit Stunden und komme einfach nicht weiter und hoffe hier den richtigen anstoß zu finden.
Folgendes Szenario:
Ich habe mir auf FreeBSD mit der Shell das folgende kleine Script zusammen gebastelt:
Code: Alles auswählen
#!/bin/sh
#lösche Verzeichnis falls bereits vorhanden
if [-e verzeichnis.txt]: then
sudo rm verzeichnis.txt
fi
for net in $(seq 196 199)
do
for loct in $(seq 1 254)
do
name="$(drill -x 192.168.${net}.${loct} | grep -A1 "ANSWER" | tail -n1 | awk '{print $5}' | cut -d'.' -f 1)"
if ! [ "${name}" = "" ]; then
printf "Hostname: $name\n IP Adresse: 192.168.${net}.${loct}\n" >> verzeichnis.txt
fi
done
done
Dieses Script wollte ich mir nun in Python "übersetzen" da ich anschließend einträge in Redmine via Python Script machen möchte. Leider bin ich mit der Sprache noch nicht bewandert und habe mich nun Stunden ohne wirklichen Erfolg daran versucht mein bisheriges Werk zumindest mal zu übesetzen bevor ich an der neuen Lösung arbeiten kann.
Folgendes ist bisher dabei herumgekommen. Bis zur Definition von Destination läuft alles so wie gehabt, allerdings scheitert es dann mit einem unkown host.
Bei meiner googlelei stoße ich immer auf socket.gethostbyaddr also dachte ich mir, das sollte mein drill von der unix bash ersetzen und habe mich darauf gestürzt. Leider sind so gut wie alle stackoverflow oder python beispiel codes darauf ausgelegt, beim Aufruf des Python scripts eine IP Adresse zu übergeben. Da ich das ganze aber automatisiert machen möchte über 4 komplette Netzbereiche, wirkt das ganze hier etwas ausladend.
Den Teil mit in Datei schreiben habe ich bewusst außen vorgelassen.
Code: Alles auswählen
import socket
for net in range(196, 198):
# print(net)
for host in range(0, 255):
#print(host)
network = ("192.168."+str(net))
destination = network+"."+str(host)
#print(destination)
hostname = socket.gethostbyaddr(destination)
if hostname is not None:
print('IP: ', destination, '\n\' 'Hostname: ', hostname)