Ip-Liste zwischen zwei IPs

  • Hey zusammen.

    Ich habe mich mit dieser Frage gerade beschäftigt und finde leider keine Lösung :S
    Also ich habe zwei IPs zB.

    Code
    111.111.111.01
    111.111.113.01


    Jetzt will ich zu folgendem Ergebniss kommen:

    Code
    111.111.111.01
    111.111.111.02
    111.111.111.03
    ....
    111.111.112.00
    111.111.112.01
    ...
    111.111.113.00
    111.111.113.01

    Dies soll dann auch mit zB.

    Code
    268.135.86.65
    205.41.542.25


    funktionieren.

    Thx4Help :thumbup:

    Nur keine Hektik - das Leben ist stressig genug

    Einmal editiert, zuletzt von Antispeed (22. Juni 2010 um 15:00)

  • Ja das stimmt. (=Ach neee.. ) :wacko:

    Ich habe das versucht. Versuch das mal selber, das ist viel schwieriger als es aussieht.
    Pls postet einen Skript. Währe sehr nett von euch.
    Sonst bitte den Anfang, den ich denn nur noch zu verstehen brauche & weiterführe.

    Thx4Help :thumbup:

    Nur keine Hektik - das Leben ist stressig genug

  • [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    $ip1 = '100.100.100.125'
    $ip2 = '100.100.102.01'

    [/autoit][autoit][/autoit][autoit]

    $ip1 = StringSplit( $ip1, '.' )
    $ip2 = StringSplit( $ip2, '.' )

    [/autoit][autoit][/autoit][autoit]

    Local $all[1] = [ $ip1 ]

    [/autoit][autoit][/autoit][autoit]

    For $a = $ip1[1] To $ip2[1]
    For $b = $ip1[2] To $ip2[2]
    For $c = $ip1[3] To $ip2[3]
    For $d = 0 To 255
    If $c = $ip2[3] And $d > $ip2[4] Then ExitLoop
    If $a = $ip1[1] And $b = $ip1[2] And $c = $ip1[3] And $d < $ip1[4] Then ContinueLoop

    _ArrayAdd( $all, $a & '.' & $b & '.' & $c & '.' & $d )
    Next
    Next
    Next
    Next

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay( $all )

    [/autoit]

    Weiß grad nicht, wie die IPs aussehen müssen - wirklich '.01', '.02', ... oder geht aucht '.1', '.2', ... ? ^^
    Naja, ansonsten halt einfach anpassen.. ;)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • limette:
    *hust* Das ist nicht gerade was ich wollte, denn der funkt. nicht... :S Guck mal ob dus bessa hin bekomms. thx
    Bsp wos net funkt.

    Code
    $ip1 = '10.80.100.125'
    $ip2 = '100.10.102.01'

    Pls weiter code posten! ^^
    thx4post

    Nur keine Hektik - das Leben ist stressig genug

  • Ich hatte grade fast was, aber dann ging es plötzlich nicht mehr :(
    Hier der Rest davon (es hat vorher, etwas anders schon mit : 111.111.111.01 bis 111.111.113.01 geklappt...)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Dim $result[1]
    $ip1="111.111.111.1"
    $ip2="111.111.113.1"
    $x=1

    [/autoit] [autoit][/autoit] [autoit]

    $splitted1=StringSplit($ip1,".")
    $splitted2=StringSplit($ip2,".")
    For $i=$splitted1[1] To $splitted2[1]

    [/autoit] [autoit][/autoit] [autoit]

    If $i=$splitted1[1] And $i <> $splitted2[1] Then
    $count2=255
    $from2=$splitted1[2]
    ElseIf $i=$splitted2[1] And $i <> $splitted1[1] Then
    $count2=$splitted2[2]
    $from2=0
    Else
    $count2=$splitted2[2]
    $from2=0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    For $j=$from2 To $count2

    [/autoit] [autoit][/autoit] [autoit]

    If $j=$splitted1[2] And $j <> $splitted2[2] Then
    $count3=255
    $from3=$splitted1[3]
    ElseIf $j=$splitted2[2] And $j <> $splitted1[2] Then
    $count3=$splitted2[3]
    $from3=0
    Else
    $from3=0
    $count3=$splitted2[3]
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    For $k=$from3 To $count3

    [/autoit] [autoit][/autoit] [autoit]

    If $k=$splitted1[3] And $k <> $splitted2[3] Then
    $count4=255
    $from4=$splitted1[4]
    ElseIf $k=$splitted2[3] And $k <> $splitted1[3] Then
    $count4=$splitted2[4]
    $from4=0
    Else
    $from4=0
    $count4=$splitted2[4]
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    For $l=$from4 To $count4
    _ArrayAdd($result,$i & "." & $j & "." & $k & "." & $l)
    ToolTip($x,0,0)
    $x+=1
    Next
    Next
    Next
    Next
    _ArrayDisplay($result)

    [/autoit]

    edit: Das von Limette funzt doch! Zumindest fast...
    Das Problem habe ich versucht, mit der If-Verzweigung zu umgehen, aber irgendwie klappt es nicht...

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Ich verstehe deine IP-Range nicht so wirklich.
    Sonst wäre das kein Problem 8)

    edit \ So müsste das ca. gehen:

    Spoiler anzeigen
    [autoit]


    $block1_A=100
    $block1_B=101
    $block2_A=200
    $block2_B=202
    $block3_A=300
    $block3_B=303
    $block4_A=400
    $block4_B=404

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    dim $array[99999] ;die benötigte Größe lässt sich auch ausrechnen

    [/autoit] [autoit][/autoit] [autoit]

    for $i=$block1_A to $block1_B

    [/autoit] [autoit][/autoit] [autoit]

    for $j=$block2_A to $block2_B

    [/autoit] [autoit][/autoit] [autoit]

    for $k=$block3_A to $block3_B

    [/autoit] [autoit][/autoit] [autoit]

    for $l=$block4_A to $block4_B

    [/autoit] [autoit][/autoit] [autoit]

    next

    next

    next

    next

    [/autoit]


    In den Schleifen wird dann das Array befüllt davor muss man abfragen ob "Block_A < Block_B" und entsprechend reagieren.

    Einmal editiert, zuletzt von nuts (22. Juni 2010 um 14:21)

  • @L3viathan: Hmm dein Skript zeigt nur den Tooltip an, der dann immer weiter geht.
    (Bei 10000) habe ich abgebrochen. Kam aber kein anderes Fenster. (Iwie zu langsam)
    nuts: Dann machs eben nach dei IP-Rang -habe vieleicht falsch erklert. Poste pls mal einen Skript.

    Thx4Post
    Thx4Help

    Nur keine Hektik - das Leben ist stressig genug

  • Bsp wos net funkt.

    [autoit]

    $ip1 = '10.80.100.125'
    $ip2 = '100.10.102.01'

    [/autoit]

    hast du dir mal ausgerechnet wieviele adressen das sin?
    ca 1,5 Mrd
    das wirste sowieso nie in ein array kriegen...

    für was brauchst du denn die ganzen ip's?

  • Ah, ich sehe das Problem ...
    Da 80 > 10 läuft die zweite For-Schleife schon nicht durch, deshalb added der nix zur Liste.
    Ich setz mich nochmal dran ;)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Das wäre nett wenn du dich nochmal dransetzt :thumbup: .

    Na ok das ist übertrieben mit den 1,5mio. IPs von mir.
    Währe schön wenn ich min. 100.000 durchsuchen könnte.

    Schnitzel: Mich interessierts und kann erst wieder schlafen wenn ich den Skript habe. Und wer weiß vieleicht braucht man ja mal sowas. Du solltest es als Herausforderung sehen.

    Thx4Help

    Nur keine Hektik - das Leben ist stressig genug

  • Hm? Für die meisten die hier helfen ist das wahrscheinlich eher eine Fleißaufgabe ;)
    Von daher könntest du auch etwas an der Lösung mitwirken :!:

    Hier nochmal eine verbesserte Version, musst nurnoch das Array befüllen.

    Spoiler anzeigen
    [autoit]


    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    global $ip_1='192.168.100.1'
    global $ip_2='192.162.10.100'

    [/autoit] [autoit][/autoit] [autoit]

    $aIP=_vergleicheIP($ip_1, $ip_2)
    _ArrayDisplay($aIP)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    dim $array[99999] ;die benötigte Größe lässt sich auch ausrechnen

    [/autoit] [autoit][/autoit] [autoit]

    for $i=$aIP[0][0] to $aIP[0][1]

    [/autoit] [autoit][/autoit] [autoit]

    for $j=$aIP[1][0] to $aIP[1][1]

    [/autoit] [autoit][/autoit] [autoit]

    for $k=$aIP[2][0] to $aIP[2][1]

    [/autoit] [autoit][/autoit] [autoit]

    for $l=$aIP[3][0] to $aIP[3][1]

    [/autoit] [autoit][/autoit] [autoit]

    next

    [/autoit] [autoit][/autoit] [autoit]

    next

    [/autoit] [autoit][/autoit] [autoit]

    next

    [/autoit] [autoit][/autoit] [autoit]

    next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _vergleicheIP($IP1, $IP2)
    local $aret[4][2]
    local $aIP1=StringSplit($IP1, '.')
    local $aIP2=StringSplit($IP2, '.')
    for $i=1 to $aIP1[0]
    if $aIP1[$i] < $aIP2[$i] then
    $aret[$i-1][0]=$aIP1[$i]
    $aret[$i-1][1]=$aIP2[$i]
    else
    $aret[$i-1][0]=$aIP2[$i]
    $aret[$i-1][1]=$aIP1[$i]
    endif
    next
    return $aret
    EndFunc

    [/autoit]
  • Ich hab es jetzt so gelöst:

    [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    $ip1 = '100.9.252.125'
    $ip2 = '100.10.10.01'

    [/autoit][autoit][/autoit][autoit]

    $ip1 = StringSplit( $ip1, '.' )
    $ip2 = StringSplit( $ip2, '.' )

    [/autoit][autoit][/autoit][autoit]

    Local $all[1]

    [/autoit][autoit][/autoit][autoit]

    For $a = $ip1[1] To $ip2[1]
    For $b = 0 To 255
    If $a = $ip1[1] And $b < $ip1[2] Then ContinueLoop
    For $c = 0 To 255
    If $a = $ip1[1] And $b = $ip1[2] And $c < $ip1[3] Then ContinueLoop
    For $d = 0 To 255
    If $a = $ip1[1] And $b = $ip1[2] And $c = $ip1[3] And $d < $ip1[4] Then ContinueLoop
    If $c = $ip2[3] And $b = $ip2[2] And $a = $ip2[1] And $d > $ip2[4] Then ExitLoop 4
    _ArrayAdd( $all, $a & '.' & $b & '.' & $c & '.' & $d )
    ToolTip( $a & '.' & $b & '.' & $c & '.' & $d )
    Next
    Next
    Next
    Next

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay( $all )

    [/autoit]

    Ich lasse die For-Schleifen generell erstmal von 0 bis 255 laufen.
    In den einzelnen Tiefen wird dann geprüft, ob der übergeordneten Teile noch beim Anfang (gegeben) sind - wenn ja, überspringt die Schleife die ganze Prozedur, bis sie bei ihrem Start-Wert angelangt ist.

    In der tiefsten Schleife wird noch geprüft, ob die 'End-IP' erreicht ist - und gegebenenfalls das ganze beendet. =)

    Bei mir funktionierts ;)


    Edit: Nein. Ich sehe, dass da was nicht stimmt. Die Bedingungen sind noch nicht exakt genug, da gibt es noch unbehandelte Ausnahmen.. moment ... ^^

    Edit2: Jetzt müsste das passen... :D

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

    Einmal editiert, zuletzt von limette (22. Juni 2010 um 14:50)

  • Jetzt hats mich doch auch interessiert :rofl:

    Spoiler anzeigen
    [autoit]


    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    global $ip_1='192.168.100.1'
    global $ip_2='192.162.90.10'

    [/autoit] [autoit][/autoit] [autoit]

    Global $aIP=_vergleicheIP($ip_1, $ip_2)
    ;_ArrayDisplay($aIP) ;debug

    [/autoit] [autoit][/autoit] [autoit]

    $iarray=($aIP[0][1]-$aIP[0][0]+1) * ($aIP[1][1]-$aIP[1][0]+1) * ($aIP[2][1]-$aIP[2][0]+1) * ($aIP[3][1]-$aIP[3][0]+1)
    ;ConsoleWrite($iarray) ;debug

    [/autoit] [autoit][/autoit] [autoit]

    global $array[$iarray]
    global $sIP
    Global $counter=0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    for $i=$aIP[0][0] to $aIP[0][1]

    [/autoit] [autoit][/autoit] [autoit]

    for $j=$aIP[1][0] to $aIP[1][1]
    for $k=$aIP[2][0] to $aIP[2][1]

    [/autoit] [autoit][/autoit] [autoit]

    for $l=$aIP[3][0] to $aIP[3][1]
    $sIP=$i & '.' & $j & '.' & $k & '.' & $l
    $array[$counter]=$sip
    ;ConsoleWrite($sip & @CRLF) ;debug
    $counter+=1
    next

    [/autoit] [autoit][/autoit] [autoit]

    next

    [/autoit] [autoit][/autoit] [autoit]

    next

    [/autoit] [autoit][/autoit] [autoit]

    next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($array)

    [/autoit] [autoit][/autoit] [autoit]

    Func _vergleicheIP($IP1, $IP2)
    local $aret[4][2]
    local $aIP1=StringSplit($IP1, '.')
    local $aIP2=StringSplit($IP2, '.')
    for $i=1 to $aIP1[0]
    if Number($aIP1[$i]) < Number($aIP2[$i]) then
    $aret[$i-1][0]=$aIP1[$i]
    $aret[$i-1][1]=$aIP2[$i]
    else
    $aret[$i-1][0]=$aIP2[$i]
    $aret[$i-1][1]=$aIP1[$i]
    endif
    next
    return $aret
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    edit \ So nochmal ohne Redim!

    2 Mal editiert, zuletzt von nuts (22. Juni 2010 um 15:40)

    • Offizieller Beitrag

    Und hier meine Variante:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $sIP1 = '100.9.252.125'
    $sIP2 = '100.10.10.01'

    [/autoit] [autoit][/autoit] [autoit]

    $array = _IPListToArray($sIP1, $sIP2)
    _ArrayDisplay($array)

    [/autoit] [autoit][/autoit] [autoit]

    Func _IPListToArray($sIP1, $sIP2)
    Local $sTmp, $aIP1, $aIP2, $sOut = '', $sNew
    $aIP1 = StringSplit($sIP1, '.', 2)
    $sIP1 = StringFormat('%03i.%03i.%03i.%03i', $aIP1[0], $aIP1[1], $aIP1[2], $aIP1[3])
    $aIP2 = StringSplit($sIP2, '.', 2)
    $sIP2 = StringFormat('%03i.%03i.%03i.%03i', $aIP2[0], $aIP2[1], $aIP2[2], $aIP2[3])
    If $sIP2 < $sIP1 Then
    $sTmp = $sIP1
    $sIP1 = $sIP2
    $sIP2 = $sTmp
    EndIf
    $aIP1 = StringSplit($sIP1, '.', 2)
    Do
    $sNew = StringFormat('%03i.%03i.%03i.%03i', $aIP1[0], $aIP1[1], $aIP1[2], $aIP1[3])
    $sOut &= $sNew & '|'
    $aIP1[3] += 1
    If $aIP1[3] = 256 Then
    $aIP1[3] = 0
    $aIP1[2] += 1
    If $aIP1[2] = 256 Then
    $aIP1[2] = 0
    $aIP1[1] += 1
    If $aIP1[1] = 256 Then
    $aIP1[1] = 0
    $aIP1[0] += 1
    EndIf
    EndIf
    EndIf
    Until $sNew = $sIP2
    Return StringSplit(StringTrimRight($sOut, 1), '|')
    EndFunc

    [/autoit]