![]() |
Re: Telnet mit IdTelnet - Cursortasten senden
Nach einigem Ausprobieren bin ich zu folgendem Code gekommen:
Delphi-Quellcode:
Die Probleme des Codes habe ich als Kommentare eingefügt. Wo genau der / die Fehler liegen, kann ich nicht wirklich sagen, nur hinterher steht immernoch das alte Gateway drin ;-(
try
IdTelnet1.Connect(); finally If IdTelnet1.Connected Then Memo1.Lines.Add('Verbindung zu 192.168.1.1 hergestellt!') end; IdTelnet1.SendCmd('*******'); // Passworteingabe, zensiert fürs Forum ;-) IdTelnet1.SendCh('1'); // erster Menüeintrag idtelnet1.SendCh(#13); IdTelnet1.SendCh('2'); // zweiter Menüeintrag idtelnet1.SendCh(#13); // hier muss irgendwie gewartet werden, bis fertig // vielleicht ist das auch das Problem (?) idtelnet1.SendCh(#27); idtelnet1.SendCh('['); idtelnet1.SendCh('3'); idtelnet1.SendCh('B'); // damit sollte der Cursor 3 Zeilen nach unten bewegt werden // idtelnet1.SendCmd(#27+'[3B'); // alternative Möglichkeit, k.A. welche besser ist // hier noch die alte IP speichern, wird dann aus der Ausgabe extrahiert idtelnet1.SendCmd('192.168.178.2'); // Eingabe der neuen IP idtelnet1.SendCh(#13); // verlassen des Menüs IdTelnet1.SendCh('0'); // zurück zum Hauptmenü idtelnet1.SendCh(#13); IdTelnet1.SendCh('e'); // Menü verlassen (muss noch in try-Block) idtelnet1.SendCh(#13); // hier muss irgendwie noch das Disconnect hin, aber wenn ich es einfüge, // dann wird die Verbindung schon beendet, bevor nur die erste Ausgabe erfolgt ist ;-(( Hast du da vielleicht ein paar Tipps, was ich noch testen könnte / sollte? Cu, Chris |
Re: Telnet mit IdTelnet - Cursortasten senden
Telnet arbeitet zwar Vollduplex, aber wenn der Server eine formatierte Seite aufbaut, dann kann er mit dem GA (Go-Ahead) Kommando signalisieren, dass er bereit für Benutzereingaben ist. Teste doch mal mit dem MS Telnet Client, ob die sofortige Betätigung der Cursor-Tasten nach Eingabe des Passwords vom Server (Router) gepuffert wird oder ob er diese Eingaben verwirft und erst nach dem Seitenaufbau wieder auf Eingaben wartet.
Außerdem vermute ich, dass dein Telnet-Client das Password als Text übermitteln muss. Wenn es im MS Client nicht zu sehen ist, dann sicher weil der Server dem Client Ersatzzeichen oder garnichts als Echo zurückgibt - SendCmd() verstehe ich eher als Methode zur Übermittlung von Protokollbefehlen. Grüße, marabu |
Re: Telnet mit IdTelnet - Cursortasten senden
Zitat:
Zitat:
-> Vielleicht ist es auch nicht gerade die Methode der Wahl, die Ausgabe über das OnDataAvailable-Ereignis zu realisieren? Aber falls nicht, gibt es denn eine andere Möglichkeit? Zitat:
Hier noch ein Ausschnitt aus meiner aktuellen Memo-Ausgabe (besonders interessante Zeilen habe ich mit Sternchen hervorgehoben):
Delphi-Quellcode:
Wie man sieht, wird meine Escape-Sequenz zum Cursor-Bewegen anscheinend im Klartext angezeigt (kann das richtig sein?).
[1;8H** WAN Port Setup **
[5;8H 1. Sevice Type = [Regular Service] [6;8H 2. Regular Service Setup [7;8H 3. PPPoE Service Setup [10;8H 0. Back To Last Menu *** [14;8HEnter your choice ->[3B 1 [2J [1;8H** WAN Port Setup ** [5;8H 1. Sevice Type = [Regular Service] [6;8H 2. Regular Service Setup [7;8H 3. PPPoE Service Setup [10;8H 0. Back To Last Menu *** [14;8HEnter your choice ->92 *** .1 [2J [1;8H** WAN Port Setup ** [5;8H 1. Sevice Type = [Regular Service] [6;8H 2. Regular Service Setup [7;8H 3. PPPoE Service Setup [10;8H 0. Back To Last Menu *** [14;8HEnter your choice ->68.1 [2J [1;8H** WAN Port Setup ** [5;8H 1. Sevice Type = [Regular Service] [6;8H 2. Regular Service Setup [7;8H 3. PPPoE Service Setup [10;8H 0. Back To Last Menu *** [14;8HEnter your choice ->78.2 Außerdem sieht man, dass die IP, die ich sende, anscheinend an der Choice-Stelle eingegeben wird (bin mir aber nicht sicher, ob das vielleicht auch an der Memo-Ausgabe liegt). Vielleicht kannst du ja daran den Fehler erkennen? Cu, Chris |
Re: Telnet mit IdTelnet - Cursortasten senden
Es sieht so aus, als ob deine Eingaben nicht gepuffert werden, sondern sofort und damit zum falschen Zeitpunkt verarbeitet werden. Der Menü-Wechsel scheint ja garnicht zu funktionieren.
Der Unterschied zwischen SendCmd() und SendCh() ist in der Unit IdTelnet nachlesbar: SendCh() übermittelt einfach ein Zeichen. SendCmd() verschickt eine Zeile inklusive CR/LF - und wartet auf einen handshake. TNC_GA findest du übrigens auch in dieser Unit. Grüße, marabu |
Re: Telnet mit IdTelnet - Cursortasten senden
Zitat:
Weißt du da eine andere Möglichkeit der Ausgabe (es gibt Readln, aber ich kann leider nicht ermitteln, wie viele Zeilen vorhanden sind). Ein Menüwechsel sollte in diesem kurzen Ausschnitt auch nicht erfolgen. Hier hat er nur jedesmal nach Eingabe von 3 Zeichen (nämlich aus der IP, die ja fälschlicherweise an dieser Stelle eingetragen wurde) das Menü neu aufgebaut. |
Re: Telnet mit IdTelnet - Cursortasten senden
Ich habe eine Lösung gefunden!!!
Man bekommt den Cursor in die nächste Zeile durch eingeben einer IP-Nummer und anschließendes Enter. Also lese ich zuerst die eingestellten IPs aus der Ausgabe aus, und trage diese dann nochmal ein, bis ich zum gewünschten Feld komme... Bleibt nur noch die Frage nach der Ausgabe: Die Version über OnDataAvailable gibt die Daten immer verspätet aus (habe ich jetzt durch manuelles Eingeben der Telnet-Kommandos über ein Edit-Feld herausgefunden). Hat denn irgendjemand eine Idee, wie ich das über die vielen Methoden von TIdTelnet bewerkstelligen könnte (z.B. gibt es Readln oder Readbuffer, damit komme ich aber nicht zurecht, da ich nicht weiß, wie viele Zeilen / Zeichen vorhanden sind). Zitat:
Cu, Chris Nachtrag: Das mit den Escape-Sequenzen konnte schon deshalb nicht funktionieren, da die Escape-Taste als Signal zum Zurückkehren zum übergeordneten Menü betrachtet wird! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz