Switch programmieren

  • Hallo, ich habe erst vor ein paar Tagen meine ersten gehversuche mit Autoit unternommen und muss sagen es hilft doch schon ander einen oder anderen Stelle ganz gut. Jetzt stehe ich aber vor einem Problem und komme irgendwie nicht vorran.

    Also ich möchte über Telnet Switche konfigurieren, bzw. ein Backup machen. Das GUI ist mit UP DOWN ENTER und SPACE-Tasten gut zu händeln. Jetzt ist mein Problem, dass ich den jeweilige Festerstext in der CMD nicht lesen/auswerten kann. Die Titelleiste des Telnetfensters verändert sich nicht und an den Text komme ich nicht mit der Funktion WinWaitActive. Wie weiss ich ob, sich der Anzeigetext in meiner Telnet-Command ändert.

    Wäre für einen Tip echt dankbar. Wäre fatal wenn ich anstelle zu backuppen den Switch mit ner falschen Datei flashen würde ...

    THX

    Avon

  • wie soll ich das denn machen ? Bin für jede einfache idee dankbar. wenn ich nicht gleich snmt lernen muss... ne aber die switche sind per telnet konfigurierbar und das läuft nunmal im cmd fenster. ich möchte ganz normal das dingen steuern und dann zu einem zeitpunkt x schauen was da in dem fenster steht. das ist alles. quasi sowas wie StdouRead, nur das ich das nicht von anfang an haben will sondern einfach zu einem zeitpunkt wissen will was für ein text in dem fenster steht....

  • Ja genau da habe ich gestern schonmal geschaut, aber leider nichts gefunden. Ich will ja nicht senden oder den Rückgabewert eines Programms abfangen. Soweit ich weiss hat das Controlsend damit nix zu tun, da kannst du nur Befehle abschicken und den Rückgabewert erfahren. Hilf mir das aber nicht bei Telnet weiter... probiers mal selber aus. Gib telnet in die Konsole ein. danach mach nen connect auf nen FTP. Gib da was mit Send ein (Send("help")). Jetzt willst du wissen ob die Befehlsauflistung auf dem Fenster erschienen ist. Wie kann ich jetzt nachdem ich das Send("help") abgeschickt habe auf das Fenster zugreifen und den darin enthalten Text durchsuchen nach beispielsweise "LIST".

    Wie gesagt das bedienen geht ja auch, mein problem ist aber sollte mal eine Netzstörung auftauen und ein Befehl nicht bis zum switch durchkommen, dann löscht("Flashed") er das Bios ...

  • ohne wirklich viel ahnung zu haben, aber evtl. musst du das problem anders lösen ? - vielleicht muss man den weg über das abfangen der kommunikationsprotokolle auf dem telnet port lösen.... ich weiss zwar nicht welche befehle/möglichkteiten autoIP dafür vorsieht auf einem bestimmten port trafic zu sniffen, aber sicher gibts da was..... den trafic könntest du dann auswerten.

  • Hi,
    also ich bearbeite meine Switche die ich betreue auch über telnet mit Autoit. Telnet nachgebaut und die Befehle mit Send hingeschickt und die Ausgabe sehe ich dann in einer Editbox.
    So mache ich z.B. Backups der aktuellen Configstände und der glechen.

    Über SNMP wirst du bestimmt schlechte Karten habe da was zu ändern, SNMPO ist eher was zum auslesen, weil du nur einen Wert änderst und nicht weist ob du noch an einer anderen Stelle was ändern musst.

    MfG
    Der_Doc

  • Hi Xenobiologist,
    naja wie schon gesagt, ich nutze es lieber zum auslesen, da kann nix schief gehen. Den Rest lieber über telnet mit den vom Hersteller festgelegten Befehlen. Mit SNMP wäre es so, wenn man ein Prog nur über die Registry installert. Man sollte also wissen was man tut!

    Telnet ist zum configurieren einach einfacher ;) ist aber nur meine Meinung, da ich dafür gerade stehen muss, wenn ich ein 15 T€ Gerät im laufenden Betrieb hinrichte. :huh::S

    MfG
    Der_Doc

  • Also SNMT ist wie gesagt ne sehr gute variante und so müsste man es eigenltich auch machen, habe ich aber keine ahnung von und auch aktuell keine zeit mich damit zu beschäftigen. Aber da habt ihr schon Recht, dass das der richtig weg wäre.


    @The_DOC Hast du Telnet als windows anwendung nachgebaut ? Falls ja würdest du die mir zukommen lassen ? Ich bin mir zwar n icht ganz sicher ob das so klappt aber nen versuch wäre es wert. Aber es muss halt die Navigation mit den Pfeiltasten und co funktionieren. Funktioniert das bei deiner telnetversion ????


    Ansonsten, falls jemand noch nen Lösungsansatz für Autoit hat ohne irgend eine zusätzliche Application zu bauen wäre ich dankebar ....

  • Das ist eine AutoIt-GUI für PLINK aus dem Putty-Paket

    Spoiler anzeigen
    [autoit]

    ; Nach einem Script aus dem engl. Forum, Autor unbekannt :)
    #include <GUIConstants.au3>
    #include <Constants.au3>

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

    Global $plink_exe ="plink.exe"

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

    ;GUI Creation
    GuiCreate("Telnet Client", 500, 390,-1, -1 )

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

    ;----------> GUI Control Creation Anfang <----------

    ;Edit Control für Chat Text
    $Edit = GuiCtrlCreateEdit("", 10, 10, 480, 330,$GUI_SS_DEFAULT_EDIT+$ES_READONLY)
    GUICtrlSetFont(-1,10,0,-1,"Courier New")

    ;Input Control für Chat Text Eingabe
    $Input = GuiCtrlCreateInput("", 10, 360, 480, 20)

    ;-----------> GUI Control Creation Ende <-----------

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

    ;user input for host and port

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

    $HostI = InputBox ( "Telnet Client", "Please enter the name of the host you want to connect to","void.dune.net" )
    $PortI = InputBox ( "Telnet Client", "Please enter the port of the host","3000" )

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

    ;GUI sichtbar machen

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

    GUISetState ()
    ControlSend ( "Telnet Client","", $Edit, "{TAB}")
    ;Client Hostname auflösen
    ;$Host = TCPNameToIP ( $HostI )

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

    ;Mit Host Connecten
    $Conection = Run('"' & $plink_exe & '" -telnet -P '& $PortI & " " & $HostI, @ScriptDir,@SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
    If @error Then Exit
    AdlibEnable("_Update",500)
    While 1
    $msg = GuiGetMsg()
    If $msg = $GUI_EVENT_CLOSE And ( MsgBox(36,"AutoIt Telnet","Sitzung wirklich beenden?") = 6 ) Then Exit

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


    If $msg = $Input Then
    $text = GUICtrlRead ( $Edit )
    $eingabe = GUICtrlRead ( $Input )
    GUICtrlSetData ( $Edit, $text & $eingabe &@CRLF)
    GUICtrlSetData ( $Input, "" )

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

    ;TCPSend ( $Conection, $eingabe & Chr ( 10 ) )
    StdinWrite($Conection, $eingabe & Chr ( 10 ) )

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

    If @error Then
    MsgBox (0,"AutoIt Telnet","Error - Wird beendet")
    Exit
    EndIf
    GUICtrlSendMsg($edit, 0x00B7,0,0)
    EndIf
    WEnd

    Func OnAutoItExit()
    ProcessClose($Conection)
    EndFunc

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

    Func _Update()
    If StdoutRead ( $Conection,0,1) = 0 Then Return
    $recv = StdoutRead ( $Conection)

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

    If NOT @error Then
    $recv = StringReplace($recv, @LF, @CRLF)
    $recv = StringReplace($recv, @CRLF&@CR, @CRLF)
    $text = GUICtrlRead ( $Edit )
    GUICtrlSetData ( $Edit,$text & $recv)
    GUICtrlSendMsg($edit, 0x00B7,0,0)

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

    EndIf
    EndFunc

    [/autoit]


    Das ist das ganze mit Pure AutoIt:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    ; Nach einem Script aus dem engl. Forum, Autor unbekannt :)

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

    ;TCP starten
    TCPStartup ()

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

    ;GUI Creation
    GuiCreate("Telnet Client", 500, 390,-1, -1 )

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

    ;----------> GUI Control Creation Anfang <----------

    ;Edit Control für Chat Text
    $Edit = GuiCtrlCreateEdit("", 10, 10, 480, 330,$GUI_SS_DEFAULT_EDIT+$ES_READONLY)
    GUICtrlSetFont(-1,10,0,-1,"Courier New")

    ;Input Control für Chat Text Eingabe
    $Input = GuiCtrlCreateInput("", 10, 360, 480, 20)

    ;-----------> GUI Control Creation Ende <-----------

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

    ;user input for host and port

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

    $HostI = InputBox ( "Telnet Client", "Please enter the name of the host you want to connect to","void.dune.net" )
    $PortI = InputBox ( "Telnet Client", "Please enter the port of the host","3000" )

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

    ;GUI sichtbar machen

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

    GUISetState ()
    ControlSend ( "Telnet Client","", $Edit, "{TAB}")
    ;Client Hostname auflösen
    $Host = TCPNameToIP ( $HostI )

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

    ;Mit Host Connecten
    $Conection = TCPConnect ( $Host, $PortI )
    If @error Then Exit

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

    While 1
    $msg = GuiGetMsg()
    If $msg = $GUI_EVENT_CLOSE And ( MsgBox(36,"AutoIt Telnet","Sitzung wirklich beenden?") = 6 ) Then Exit
    $recv = TCPRecv ( $Conection,2048 )
    If $recv <> "" Then
    $recv = StringReplace($recv, @LF, @CRLF)
    $recv = StringReplace($recv, @CRLF&@CR, @CRLF)
    $text = GUICtrlRead ( $Edit )
    GUICtrlSetData ( $Edit,$text & $recv)
    GUICtrlSendMsg($edit, 0x00B7,0,0)

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

    EndIf

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


    If $msg = $Input Then
    $text = GUICtrlRead ( $Edit )
    $eingabe = GUICtrlRead ( $Input )
    GUICtrlSetData ( $Edit, $text & $eingabe &@CRLF)
    GUICtrlSetData ( $Input, "" )

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

    TCPSend ( $Conection, $eingabe & Chr ( 10 ) )

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

    If @error Then
    MsgBox (0,"AutoIt Telnet","Error - Wird beendet")
    Exit
    EndIf
    GUICtrlSendMsg($edit, 0x00B7,0,0)
    EndIf
    WEnd

    Func OnAutoItExit()
    TCPCloseSocket($Conection)
    TCPShutdown()
    EndFunc

    [/autoit]