Telnet aus CMD auslesen

  • Hi,

    Ich hab ein kleines Problem damit Telnet aus der CMD auszulesen. Ich hab ein funktionierendes Script, das allerdings nur wegen eines Sleep läuft und wenn die Verbindung grottig ist, haut er die Anmeldedaten natürlich ins Leere. Daher wollte ich abfragen, ab wann der login bereit ist.

    Ums kurz zu halten, hab ich nur die zum testen wirklich benötigten Passagen verwendet. Normalerweise käme statt der MsgBox eine Abfrage StringInStr nach "login:"
    Sollten in dem Aufruf unbenötigte Elemente sein bitte nicht wundern, arbeite heute das erste mal damit und freu mich dass es soweit läuft :P

    [autoit]

    #include <Constants.au3>
    dim $test=Run(@ComSpec & " /c " & 'ipconfig', "",@SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    MsgBox(0,"",StdoutRead($test))

    [/autoit]

    funktioniert

    [autoit]

    #include <Constants.au3>
    dim $test=Run(@ComSpec & " /c " & 'telnet xxx', "",@SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    MsgBox(0,"",StdoutRead($test))

    [/autoit]

    funktioniert nicht. Liegt m.E. daran, dass der befehl ja noch nicht komplett abgearbeitet ist, sondern er noch auf eine Eingabe wartet.

    Gibt es eine Möglichkeit auch solche Zustände abzufragen/auszulesen?

  • Surfy: So gehts!

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>

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

    $PID = Run(@ComSpec & " /c " & 'ipconfig', "",@SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $Line
    While 1
    $Line &= StdoutRead($PID)
    If @error Then ExitLoop
    Wend
    MsgBox(0, "", $Line)

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

    $aLine = StringSplit($Line, @CRLF, 3)

    [/autoit]
  • Hi,
    das mit dem ipconfig ist auch kein Problem. Ersetze mal ipconfig mit telnet und nix geht mehr.......
    Es sieht so aus, als würde telnet einen anderen IO Stream nutzen.....

    Mit den AutoIT Boardmitteln habe ich das nicht hinbekommen....

    ;-((
    Stefan

  • Ich hatte für einen Router-Reconnect mal folgendes verwendet:

    Spoiler anzeigen
    [autoit]

    Global $aKommandos[4] = ["Befehl1","Befehl2","Befehl3","Quit"]
    $ret = _Telnet("192.168.0.1", $aKommandos, 23, 400)
    MsgBox(0,"",$ret)

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

    Func _Telnet($sIP, $aCommands, $sPort = 23, $iDelay=200)
    Local $ConnectedSocket, $daten, $datenneu, $recv, $position, $steuercode
    If $sIP = "" Or $sPort = "" Or Not IsArray($aCommands) Then Return SetError(1, 0, 0)
    TCPStartup()
    $connectedSocket = -1
    $ConnectedSocket = TCPConnect($sIP, $sPort)
    If $ConnectedSocket = -1 Then Return SetError(1, 0, 0)
    For $i = 0 To UBound($aCommands)-1
    TCPSend($ConnectedSocket,$aCommands[$i] & @CRLF)
    Sleep($iDelay)
    $daten &= TCPRecv($ConnectedSocket, 2048)

    ; Standard-Steuercode in Anfrage suchen und passend beantworten
    while StringInStr($daten,chr(255)) > 0
    $position = StringInstr($daten,chr(255))
    $steuercode = StringMid($daten,$position,3)
    $daten = StringLeft($daten,$position-1) & StringMid($daten,$position+3)
    select
    case StringMid($steuercode,2,1) = chr(251)
    StringReplace($steuercode,2,chr(254),1)
    case StringMid($steuercode,2,1) = chr(252)
    StringReplace($steuercode,2,chr(254),1)
    case StringMid($steuercode,2,1) = chr(253)
    StringReplace($steuercode,2,chr(252),1)
    case StringMid($steuercode,2,1) = chr(254)
    StringReplace($steuercode,2,chr(252),1)
    EndSelect
    TCPSend($ConnectedSocket, $steuercode)
    ; Echo beim Server einschalten
    ; TCPSend($ConnectedSocket,chr(255) & chr(253) & chr(1))
    Wend

    ; ESC-Steuercodes heruasfiltern
    $daten = StringReplace($daten, chr(27) & chr(55), "")

    Next
    TCPCloseSocket($ConnectedSocket)
    TCPShutdown()
    Return $daten
    EndFunc

    [/autoit]

    Hierbei werden die Befehle der Reihe nach in ein Array geschrieben und
    anschließend an die Telnet-Funktion übergeben.

    Nun bei den Steuerzeichen war ich noch nicht sicher, ob es so in jedem
    Fall geht.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"