Benutzer mit den meisten Antworten
Ip Dns Übereinstimmung

Frage
-
Ich brauche ein Script, daß Ip Adressen auf ihre Konsistenz prüft. Folgendes habe ich bereits:
$ip_address= "beliebige adresse"
$dns_name= [Net.Dns]::GetHostEntry($ip_address).HostName
$ip_address2= [Net.Dns]::GetHostEntry($dns_name).AddressList[0].IPAddressToString
echo $ip_address "-----" $dns_name "----" $ip_address2`n`n
if ($ip_address -eq $ip_address2){
echo "übereinstimmung"`n`n`n
}
else
{echo "$ip_adress ist nicht konsistent"}Nun soll ja nicht nur eine Adresse sondern alle verfügbaren geprüft werden. Dazu will ich eine for schleife einsetzen, die sie durch geht, etwa in der art:
for ($i = 2; $i -le 254; $i ++) {
for ($j =2; $j -le 254; $j ++) {echo $i"."$j}}
}also werden meine Ip adressen aus z.B. 165.65. und dann die Elemente aus der for Schleife bestehen. Und schließlich eine foreach Schleife, die jedes element aus der for Schleife mit dem Oberen Scriptteil durchgeht. Leider hab ich nicht die geringste Ahnung wie ich das realisieren soll. Ob ich die for Schleife in eine Variable schreiben kann, oder ob ich irgendwie mit einer Function was tun muss. Brauche dringend Hilfe dabei, da ich ein ziemliche Anfänger in Sachen scripten und Powershell bin.
Antworten
-
Zufällig ja. :) (Erklärungen im Code):
# Pfad + Filename für Logfile $logfile = "d:\test.txt" # Teste ob Logfile existiert, wenn nicht.. if (!([system.io.file]::exists($logfile))){ # erstelle Logfile new-item $logfile -type "File" } for ($i = 2; $i -le 254; $i ++) { for ($j =2; $j -le 254; $j ++) { $ip_address = "165.65." + $i + "."+ $j $dns_name= [Net.Dns]::GetHostEntry($ip_address).HostName $ip_address2= [Net.Dns]::GetHostEntry($dns_name).AddressList[0].IPAddressToString # Erstelle Textzeile if ($ip_address -eq $ip_address2){ $logtext = "Übereinstimmung: $ip_address $dns_name $ip_address2"} else { $logtext = "Inkonsistent: $ip_address $dns_name $ip_address2"} #Bildschirmausgabe write-host $logtext # Füge Textzeile zum Logfile hinzu add-content $logfile $logtext } }
Abgesehen davon: abhängig davon wie viele von diesen IP's wirklich existent sind wird dieses Skript eine kleine Ewigkeit laufen (du machst immerhin etwa 127.000 DNS Abfragen).Wenn es dir nur darum geht, die A-records mit den PTR-records zu vergleichen, würde ich mal überlegen ob es nicht sinvoller ist die DNS-Zonen in eine Textdatei zu exportieren und dann zu vergleichen. Was den export betrifft, findet Google/Bing da einige Beispielskripte.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".
- Als Antwort markiert Kosak1985 Donnerstag, 25. August 2011 12:41
-
Du hast es ja im Prinzip schon. Du must nur noch die IP zusammenbauen und den Code von oben einfügen:
for ($i = 2; $i -le 254; $i ++) { for ($j =2; $j -le 254; $j ++) { $ip_address = "165.65." + $i + "."+ $j $dns_name= [Net.Dns]::GetHostEntry($ip_address).HostName $ip_address2= [Net.Dns]::GetHostEntry($dns_name).AddressList[0].IPAddressToString echo $ip_address "-----" $dns_name "----" $ip_address2`n`n if ($ip_address -eq $ip_address2){ echo "übereinstimmung"`n`n`n } else {echo "$ip_adress ist nicht konsistent"} } }
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". -
>Gibt es eine Möglichkeit die Ip Addressen rauszufiltern bei denen noch gar kein Name gesetzt ist, also die noch nicht vergeben sind?
Ich nehme an du hast gemerkt das bei nicht vorhandenen Einträgen die Antwort mehrere Sekunden braucht? :) Nach meinen Schätzungen dauert die Abfrage aller deiner Adressen -wenn etwa 60% vorhanden sind- ungefähr 6 Tage, in denen du rund um die Uhr deinen DNS mit Abfragen bombardierst.
Ich würde ja nochmal über die Export-Variante nachdenken...
Was deine Frage betrifft: Ausfiltern im Sinne von Überspringen: Jain. Wenn die erste Abfrage nicht erfolgreich war kannst du zumindest die zweite überspringen.Die Antwort der ersten DNS-Abfrage auf eine vorhandene IP-Adresse ist der Hostname. Bei einer nicht vorhandenen IP kommt kein Fehler, sondern diese IP als Antwort zurück. Daher musst du einfach diese Antwort überprüfen:
for ($i = 2; $i -le 254; $i ++) {
for ($j =2; $j -le 254; $j ++) {
$ip_address = "165.65." + $i + "."+ $j
$dns_name= [Net.Dns]::GetHostEntry($ip_address).HostName
if ($dns_name -eq $ip_address){ write-host "Kein Eintrag für $ip_address" }
else {
$ip_address2= [Net.Dns]::GetHostEntry($dns_name).AddressList[0].IPAddressToString
if ($ip_address -eq $ip_address2){ echo "Übereinstimmung: $ip_address ----- $dns_name ---- $ip_address2"}
else {echo "Inkonsistent: $ip_address ----- $dns_name ---- $ip_address2"}
}
}
}Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".
- Bearbeitet Denniver ReiningMVP, Moderator Freitag, 2. September 2011 22:55
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 2. September 2011 22:55
Alle Antworten
-
Du hast es ja im Prinzip schon. Du must nur noch die IP zusammenbauen und den Code von oben einfügen:
for ($i = 2; $i -le 254; $i ++) { for ($j =2; $j -le 254; $j ++) { $ip_address = "165.65." + $i + "."+ $j $dns_name= [Net.Dns]::GetHostEntry($ip_address).HostName $ip_address2= [Net.Dns]::GetHostEntry($dns_name).AddressList[0].IPAddressToString echo $ip_address "-----" $dns_name "----" $ip_address2`n`n if ($ip_address -eq $ip_address2){ echo "übereinstimmung"`n`n`n } else {echo "$ip_adress ist nicht konsistent"} } }
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". -
Weißt du zufällig auch wie ich die ausgabe formatieren kann? Im moment schreibt er mir alles untereinander und ich hätte gerne die erste ip adresse, den dns namen und die 2 ip adresse nebeneinander. Und wie kann ich die Ausgabe in z.B. eine Textdatei umleiten?
-
Zufällig ja. :) (Erklärungen im Code):
# Pfad + Filename für Logfile $logfile = "d:\test.txt" # Teste ob Logfile existiert, wenn nicht.. if (!([system.io.file]::exists($logfile))){ # erstelle Logfile new-item $logfile -type "File" } for ($i = 2; $i -le 254; $i ++) { for ($j =2; $j -le 254; $j ++) { $ip_address = "165.65." + $i + "."+ $j $dns_name= [Net.Dns]::GetHostEntry($ip_address).HostName $ip_address2= [Net.Dns]::GetHostEntry($dns_name).AddressList[0].IPAddressToString # Erstelle Textzeile if ($ip_address -eq $ip_address2){ $logtext = "Übereinstimmung: $ip_address $dns_name $ip_address2"} else { $logtext = "Inkonsistent: $ip_address $dns_name $ip_address2"} #Bildschirmausgabe write-host $logtext # Füge Textzeile zum Logfile hinzu add-content $logfile $logtext } }
Abgesehen davon: abhängig davon wie viele von diesen IP's wirklich existent sind wird dieses Skript eine kleine Ewigkeit laufen (du machst immerhin etwa 127.000 DNS Abfragen).Wenn es dir nur darum geht, die A-records mit den PTR-records zu vergleichen, würde ich mal überlegen ob es nicht sinvoller ist die DNS-Zonen in eine Textdatei zu exportieren und dann zu vergleichen. Was den export betrifft, findet Google/Bing da einige Beispielskripte.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".
- Als Antwort markiert Kosak1985 Donnerstag, 25. August 2011 12:41
-
Gibt es eine Möglichkeit die Ip Addressen rauszufiltern bei denen noch gar kein Name gesetzt ist, also die noch nicht vergeben sind? Bei diesem Script unterscheidet Powershell bisher nicht zwischen nicht vorhandenen Namen und veralteten Namen. In beiden Fällen kommt der Fehler das der angegebene Host unbekannt ist.
-
>Gibt es eine Möglichkeit die Ip Addressen rauszufiltern bei denen noch gar kein Name gesetzt ist, also die noch nicht vergeben sind?
Ich nehme an du hast gemerkt das bei nicht vorhandenen Einträgen die Antwort mehrere Sekunden braucht? :) Nach meinen Schätzungen dauert die Abfrage aller deiner Adressen -wenn etwa 60% vorhanden sind- ungefähr 6 Tage, in denen du rund um die Uhr deinen DNS mit Abfragen bombardierst.
Ich würde ja nochmal über die Export-Variante nachdenken...
Was deine Frage betrifft: Ausfiltern im Sinne von Überspringen: Jain. Wenn die erste Abfrage nicht erfolgreich war kannst du zumindest die zweite überspringen.Die Antwort der ersten DNS-Abfrage auf eine vorhandene IP-Adresse ist der Hostname. Bei einer nicht vorhandenen IP kommt kein Fehler, sondern diese IP als Antwort zurück. Daher musst du einfach diese Antwort überprüfen:
for ($i = 2; $i -le 254; $i ++) {
for ($j =2; $j -le 254; $j ++) {
$ip_address = "165.65." + $i + "."+ $j
$dns_name= [Net.Dns]::GetHostEntry($ip_address).HostName
if ($dns_name -eq $ip_address){ write-host "Kein Eintrag für $ip_address" }
else {
$ip_address2= [Net.Dns]::GetHostEntry($dns_name).AddressList[0].IPAddressToString
if ($ip_address -eq $ip_address2){ echo "Übereinstimmung: $ip_address ----- $dns_name ---- $ip_address2"}
else {echo "Inkonsistent: $ip_address ----- $dns_name ---- $ip_address2"}
}
}
}Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".
- Bearbeitet Denniver ReiningMVP, Moderator Freitag, 2. September 2011 22:55
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 2. September 2011 22:55
-
Ich habe mir jetzt die Dns Zonenliste exportiert, so daß sie mir local vorliegt. Nun müsste ich sie ja Zeile für Zeile auslesen und die Zeilen rausfiltern die nicht die A Records enthalten. Die Liste ist so aufgebaut, daß bei den A Records an erster Stelle der Name steht, dann mehrere blanks, dann IN, blanks, A, blanks und schließlich die IP Adresse. Nun bin ich mir nicht sicher wie ich das Filtern und das Auslesen des Namens und der IP Adresse zum späteren Vergleich bewerkstelligen soll. Wär sehr dankbar für nen Programmansatz, da ich dabei irgendwie auf dem Schlauch stehe.