IP Liste erstellen, mal gehts mal gehts nicht...

  • Hallo zusammen,

    ich stehe momentan etwas auf dem Schlauch. Ich habe ein kleines Script gebastelt dessen Ziel es einen Angegebenen IP Adressbereich in eine IP Liste auf zu lösen (z.B. 192.168.0.1 - 192.168.0.10 in 192.168.0.1, 192.168.0.2, 192.168.0.3 usw.), dazu werden noch andere Angaben vom User eingegeben und in der Zieldatei verarbeitet.

    Mein Problem ist nun folgendes. Wenn ich den Adressbereich 192.168.0.1 - 192.168.0.10 angebe funktioniert alles wie gewollt.
    Gebe ich den Bereich192.168.0.90 - 192.168.0.110 gibt es Fehler....

    Durch verschiedene Tests habe ich heraus gefunden dass das Problem wohl in der Zeile 60 des Scripts liegt. Das Script erkennt hier beim ersten Beispiel dass 1 kleiner ist als 10, im zweiten Beispiel aber nicht das 90 kleiner ist als 110...

    Ich weiß nicht mehr weiter und hoffe das einer von euch meinen Denkfehler findet...

    Falls noch was fehlen sollte einfach Fragen.

    anbei der Quellcode...

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    $von = 0
    $bis = 0
    $server = 0
    $kunde = 0
    $while = 0
    $err = 1
    #Region ### START Koda GUI section ### Form=c:\scripte\ip liste erstellen\gui.kxf
    $Form1_1 = GUICreate("Form1", 177, 264, 1323, 317)
    $Adressbereichvon = GUICtrlCreateInput("Adressbereich von:", 16, 72, 145, 21)
    $Adressbereichbis = GUICtrlCreateInput("Adressbereich bis:", 16, 104, 145, 21)
    $FQDN = GUICtrlCreateCheckbox("FQDN", 16, 168, 57, 33)
    $Kundenname = GUICtrlCreateInput("Kundenname", 16, 8, 145, 21)
    $DNS = GUICtrlCreateInput("DNS Server", 16, 40, 145, 21)
    $Create = GUICtrlCreateButton("Liste erstellen", 16, 208, 145, 33)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While $while = 0
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Create
    $von = GUICtrlRead($Adressbereichvon)
    $bis = GUICtrlRead($Adressbereichbis)
    $server = GUICtrlRead($DNS)
    $kunde = GUICtrlRead($Kundenname)
    If _fddf($von) = 0 Then
    MsgBox(0,"FALSCHEINGABE","Der Startwert wurde nicht im korekten Format eingegeben (XXX.XXX.XXX.XXX)")
    $err = 1
    ElseIf _fddf($bis) = 0 Then
    MsgBox(0,"FALSCHEINGABE","Der Endwert wurde nicht im korekten Format eingegeben (XXX.XXX.XXX.XXX)")
    $err = 1
    ElseIf _fddf($server) = 0 Then
    MsgBox(0,"FALSCHEINGABE","Die ServerIP wurde nicht im korekten Format eingegeben (XXX.XXX.XXX.XXX)")
    $err = 1
    ElseIf $kunde = "" Then
    MsgBox(0,"FALSCHEINGABE","Es wurde kein Kunde angegeben")
    $err = 1
    Else
    MsgBox(0,"Eingabe akzeptiert","Liste wird erstellt")
    $err = 0
    EndIf
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    If $err = 0 Then $while = 1
    WEnd
    $von = StringSplit($von,".")
    $bis = StringSplit($bis,".")
    ;_arrayDisplay($von)
    ;_arrayDisplay($bis)
    FileWrite("IP Liste.txt","Kunde: " & $kunde & @CRLF & "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&")
    FileWrite("IP Liste.txt","DNS Server: " & $server & @CRLF)
    While 1
    FileWrite("IP Liste.txt","Client: " & $von[1] & "." & $von[2] & "." & $von[3] & "." & $von[4] & @CRLF)
    MsgBox(0,"",$von[4] < $bis[4])
    If ($von[4] < $bis[4]) Then
    $von[4] = $von[4] + 1
    Else
    ExitLoop
    EndIf
    WEnd
    FileWrite("IP Liste.txt","END OF FILE")
    Func _fddf ($ip)
    If StringRegExp($ip,"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})",0) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von CrazyCrac (28. Januar 2014 um 16:58)

  • Das Problem ist, dass du Strings vergleichst und keine Integer. Bei String wird von vorne nach hinten verglichen und da 9 (90) höher als 1 (110) ist wird richtigerweise abgebrochen.

    So geht es:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    $von = 0
    $bis = 0
    $server = 0
    $kunde = 0
    $while = 0
    $err = 1
    #region ### START Koda GUI section ### Form=c:\scripte\ip liste erstellen\gui.kxf
    $Form1_1 = GUICreate("Form1", 177, 264, 1323, 317)
    $Adressbereichvon = GUICtrlCreateInput("Adressbereich von:", 16, 72, 145, 21)
    $Adressbereichbis = GUICtrlCreateInput("Adressbereich bis:", 16, 104, 145, 21)
    $FQDN = GUICtrlCreateCheckbox("FQDN", 16, 168, 57, 33)
    $Kundenname = GUICtrlCreateInput("Kundenname", 16, 8, 145, 21)
    $DNS = GUICtrlCreateInput("DNS Server", 16, 40, 145, 21)
    $Create = GUICtrlCreateButton("Liste erstellen", 16, 208, 145, 33)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###
    While $while = 0
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Create
    $von = GUICtrlRead($Adressbereichvon)
    $bis = GUICtrlRead($Adressbereichbis)
    $server = GUICtrlRead($DNS)
    $kunde = GUICtrlRead($Kundenname)
    If _fddf($von) = 0 Then
    MsgBox(0, "FALSCHEINGABE", "Der Startwert wurde nicht im korekten Format eingegeben (XXX.XXX.XXX.XXX)")
    $err = 1
    ElseIf _fddf($bis) = 0 Then
    MsgBox(0, "FALSCHEINGABE", "Der Endwert wurde nicht im korekten Format eingegeben (XXX.XXX.XXX.XXX)")
    $err = 1
    ElseIf _fddf($server) = 0 Then
    MsgBox(0, "FALSCHEINGABE", "Die ServerIP wurde nicht im korekten Format eingegeben (XXX.XXX.XXX.XXX)")
    $err = 1
    ElseIf $kunde = "" Then
    MsgBox(0, "FALSCHEINGABE", "Es wurde kein Kunde angegeben")
    $err = 1
    Else
    MsgBox(0, "Eingabe akzeptiert", "Liste wird erstellt")
    $err = 0
    EndIf
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    If $err = 0 Then $while = 1
    WEnd
    $von = StringSplit($von, ".")
    $bis = StringSplit($bis, ".")
    ;_arrayDisplay($von)
    ;_arrayDisplay($bis)
    FileWrite("IP Liste.txt", "Kunde: " & $kunde & @CRLF & "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&")
    FileWrite("IP Liste.txt", "DNS Server: " & $server & @CRLF)
    While 1
    FileWrite("IP Liste.txt", "Client: " & $von[1] & "." & $von[2] & "." & $von[3] & "." & $von[4] & @CRLF)
    MsgBox(0, "", Int($von[4]) < Int($bis[4]))
    If (Int($von[4]) < Int($bis[4])) Then
    $von[4] = Int($von[4]) + 1
    Else
    ExitLoop
    EndIf
    WEnd
    FileWrite("IP Liste.txt", "END OF FILE")
    Func _fddf($ip)
    If StringRegExp($ip, "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", 0) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>_fddf

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.