Fehler - _getDOSOutput

  • Hey zusamm

    Skript:

    [autoit]


    $p = _getDOSOutput("telnet 1111111111 11")
    msgbox(0,0,$p)

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

    Func _getDOSOutput($command,$sleep=10)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, @SystemDir, @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid, False, False)
    If @error Then ExitLoop
    Sleep($sleep)
    WEnd
    Return $text

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

    EndFunc ;==>_getDOSOutput

    [/autoit]

    Fehler: Ich erhalte aber immer " " da (ich denke mal) die CMD immer läd..

    Code
    Verbindungsaufbau zu 1111111111...

    Nur leider erhalte ich nicht diesen Verbindungsaufbau-Text oder diesen Text hier:

    Code
    Verbindungsaufbau zu 1111111111...Es konnte keine
    t werden, auf Port 11: Verbindungsfehler

    Wer kann diesen Skript so verbessern dass er auf den Verbindungsfehler wartet bevor er Returned aus der Funktion?

    Thx im Vorraus 8o

    Nur keine Hektik - das Leben ist stressig genug

  • Normal Connected man mit telnet per tcp, wollte auch mal sowas machen aber habe auch keine rückmeldung bekommen
    ist eh irgendwo hier im forum unter dem name strato telnet
    Vlt funktioniert deins ja mit tcp

    Mfg. Simon

  • Hmm. Aber ich kann damit ja keinen PC Connecten (ok, dass kann ich schon) ich kann aber nicht dann Datein kopieren usw. wie bei der TeleNet.exe
    kann mir iwer weiter helfen?

    Nur keine Hektik - das Leben ist stressig genug

  • Aus dem gesammten Thema geht immer noch nicht hervor ( oder ich habe es nicht herauslesen können), ob es Dir um einen möglichen Fehler der "_getDOSOutput"-Funktion oder eine mögliche Telnet-Lösung geht.

    Falls Du Telnet nicht nur als Beispiel genommen hast, hätte ich hier noch aus "grauer Vorzeit" einen Mini-Telnet-Client per TCP:

    Spoiler anzeigen
    [autoit]

    ; Telnet.au3
    ; Telnet-Connect-Beispiel
    ; von [email='micha_he@autoit.de'][/email]
    ; 23.02.2007

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

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>

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

    Dim $ip
    Dim $port = "23"
    $ip = InputBox("Telnet-Server ?","Bitte IP-Adresse des Telnet-Servers eingeben ?","","",260,-1)
    if $ip <> "" then
    GUICreate ("Telnet-Test",440,400)
    $eingabe = GUICtrlCreateInput ("",20,20,350)
    $ausgabe = GUICtrlCreateEdit ("",20,60,400,320,$WS_VSCROLL + $ES_AUTOVSCROLL)
    GUISetState ()
    GuiCtrlSetState($eingabe,$GUI_FOCUS)

    TCPStartup()

    $ConnectedSocket = TCPConnect($ip, $port)
    If $ConnectedSocket = -1 Then
    MsgBox(16, "Error", "Unable to connect.")
    Exit
    EndIf

    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $eingabe
    TCPSend($ConnectedSocket, GuiCtrlRead($eingabe) & @CRLF)
    if StringLower(GuiCtrlRead($eingabe)) = "exit" then
    TCPSend($ConnectedSocket,"exit" & @CRLF)
    sleep(500)
    ExitLoop
    else
    GuiCtrlSetData($eingabe,"")
    endif
    EndSelect
    $daten = ""
    do
    $datenneu = TCPRecv($ConnectedSocket, 512)
    $daten &= $datenneu
    until $datenneu = ""
    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
    if $daten <> "" then
    GUICtrlSetData ($ausgabe, GuiCtrlRead($ausgabe) & $daten)
    controlsend("","",$ausgabe,"{END}")
    GuiCtrlSetState($eingabe,$GUI_FOCUS)
    endif
    sleep(100)
    WEnd

    TCPCloseSocket($ConnectedSocket)
    TCPShutdown()
    endif

    [/autoit]

    Edit: Hier nochmal etwas abgeändert als Funktion, weil ich einen Router-Reconnect per Telnet brauchte:

    Spoiler anzeigen
    [autoit]

    ; o2Reconnect V1.0
    ; von [email='micha_he@autoit.de'][/email]
    ; 29.07.2009
    ;
    ; Script um bei einem o2Router, Typ "Zyxel P-2602HWN-D7A",
    ; eine neue WAN-Verbindung herzustellen und damit die IP-
    ; Adresse zu erneuern

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

    If $cmdline[0] <> 2 Then
    Msgbox(48,"Fehler","o2Reconnect.exe [RouterIP] [Passwort]")
    Exit
    EndIf

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

    Global $aKommandos[4] = ["admin",$cmdline[2],"poe drop poe0","exit"]
    _Telnet($cmdline[1], $aKommandos, 23, 400)
    Sleep(3000)

    [/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]

    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"

    Einmal editiert, zuletzt von Micha_he (29. April 2010 um 20:46)