Ip an port auslesen kriege nur die letzte ip oft hin

  • Möchte ganz gerne die ip an einem Port auslesen die letzte ip krieg ich schon hin aber da die ip immer unterschiedlich gross ist
    kommen da probleme da ip nicht nur 1 stelle hat sondern bis zu 3 stellen haben kann.

    das ist mein script geht leider nur die letzte ip auszulesen aber nicht jede einzelne.
    währe schön wenn mir wer helfen kann wie ich alle 4 ip zahlen in eine Vriable kriege.
    z.b.
    $ip1 $ip2 $ip3 $ip4 $port
    193 168 2 10 1473

    Einmal editiert, zuletzt von Mogash (12. Juli 2008 um 10:22)

  • Hm zwar nicht ganz so wie Du es hattest, bei mir geht es aber:

    Spoiler anzeigen
    [autoit]


    ; Demonstrates StdoutRead()
    #include <Constants.au3>
    #include <array.au3>

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

    ;<-- Variablen & Constanten setzen
    Local $line = ''
    Local $str = ''
    Local $arrData, $count, $pos
    Local $ip[4]
    Local $port
    Local $searchPort = 4711

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

    If _HoleVerbindungen() Then
    If _Daten_aufbereiten('Lokal') Then
    $str = StringFormat("IP[1] = %s\nIP[2] = %s\nIP[3] = %s\nIP[4] = %s\nPort = %s",$ip[1],$ip[2],$ip[3],$ip[4],$port)
    MsgBox(64,"Info",$str)
    Else
    MsgBox(48,"Hinweis","Port nicht gefunden.")
    EndIf
    Else
    MsgBox(16,"Fehler","Konnte Daten nicht lesen.")
    EndIf

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

    ;Hier werden die Verbindungsdateneingelesen
    ;Wenn in $str Daten stehen wird TRUE zurückgegeben ansonsten FALSE
    Func _HoleVerbindungen()

    Local $cmd = Run(@ComSpec & " /c netstat -anop TCP", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) ;<-- Dos Befehl ausführen

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

    While 1 ;<-- Schleife zum einlesen der Daten
    $line = StdoutRead($cmd) ;<-- Einlesen in $line
    If @error Then ExitLoop ;<-- Bei einem Error die Schleife verlassen
    If $line <> "" Then ;<-- Prüfung ob in $line was drinnensteht
    $str &= $line ;<-- Wenn was drinnen steht soll es an die Variable $str gehängt werden
    EndIf ;<-- Ende der If Prüfung auf Dateninhalt
    Wend ;<-- Schleifenende

    If $str <> '' Then Return True ;<-- Steht was in $str gib TRUE zurück
    Return False ;<-- Wenn das Script bis hier her kommt wird FALSE zurückgegeben
    EndFunc

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

    ;Hier werden die Daten aufbereitet in einem Array
    Func _Daten_aufbereiten($RemoteLokal = 'Lokal')
    $str = StringStripCR($str)
    $arrData = StringSplit($str,@LF)
    For $count = $arrData[0] To 0 Step -1
    If StringInStr($arrData[$count],"TCP") > 0 Then
    Switch $RemoteLokal
    Case 'Lokal'
    $pos = StringSplit(StringStripWS(StringMid($arrData[$count],10,23),3),":")
    Case 'Remote'
    $pos = StringSplit(StringStripWS(StringMid($arrData[$count],33,23),3),":")
    EndSwitch
    $ip = StringSplit($pos[1],'.')
    $port = $pos[2]
    If $port = $searchPort Then Return True
    EndIf
    Next
    Return False
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
    Kurz Version
    [autoit]


    #include <Constants.au3>

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

    $port = 80
    $str = ""
    Local $cmd = Run(@ComSpec & " /c netstat -anop TCP", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) ;<-- Dos Befehl ausführen

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

    While 1
    $line = StdoutRead($cmd)
    If @error Then ExitLoop
    If $line <> "" Then
    $str &= $line
    EndIf
    WEnd

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

    $arr = StringSplit($str,@LF)
    For $x = 1 To $arr[0]
    If StringRegExp($arr[$x],"(:"& $port & " )",0) = 1 then
    ConsoleWrite($arr[$x] & @LF)
    $pos = StringSplit(StringStripWS(StringMid($arr[$x],33,23),3),":")
    $ip = StringSplit($pos[1],'.')
    ExitLoop
    EndIf
    Next
    $str = StringFormat("IP[1] = %s\nIP[2] = %s\nIP[3] = %s\nIP[4] = %s\nPort = %s",$ip[1],$ip[2],$ip[3],$ip[4],$port)
    MsgBox(64,"Info",$str)

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

    Einmal editiert, zuletzt von McPoldy (12. Juli 2008 um 01:08)

  • danke dir
    sind wieder einige neue befehle bei die noch nicht kenne funktioniert aber
    muss mich mal genau reinlesen wie wo was passiert