AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Telnet mit IdTelnet - Cursortasten senden
Thema durchsuchen
Ansicht
Themen-Optionen

Telnet mit IdTelnet - Cursortasten senden

Offene Frage von "c.wuensch"
Ein Thema von c.wuensch · begonnen am 29. Sep 2006 · letzter Beitrag vom 30. Sep 2006
Antwort Antwort
Seite 3 von 3     123   
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#21

Re: Telnet mit IdTelnet - Cursortasten senden

  Alt 30. Sep 2006, 15:26
Nach einigem Ausprobieren bin ich zu folgendem Code gekommen:

Delphi-Quellcode:
  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 ;-((
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 ;-(

Hast du da vielleicht ein paar Tipps, was ich noch testen könnte / sollte?

Cu, Chris
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#22

Re: Telnet mit IdTelnet - Cursortasten senden

  Alt 30. Sep 2006, 17:08
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
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#23

Re: Telnet mit IdTelnet - Cursortasten senden

  Alt 30. Sep 2006, 17:37
Zitat:
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.
Hab´s versucht. Leider (oder eher glücklicherweise) geht der Seitenaufbau jedoch so schnell, dass ich mit dem Tippen nicht hinterherkomme. Mit Delphi kann ich das ja auch nicht wirklich testen, da ich dann ja wieder bei dem ursprünglichen Problem bin

Zitat:
dann kann er mit dem GA (Go-Ahead) Kommando signalisieren, dass er bereit für Benutzereingaben ist
Super! Kann ich das in Delphi irgendwie abfragen?

-> 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:
Außerdem vermute ich, dass dein Telnet-Client das Password als Text übermitteln muss.
Ich dachte, der Unterschied zwischen SendCmd und SendCh bestünde nur darin, dass bei SendCmd ein #13 am Ende übergeben wird. Das mit dem Passwort funktioniert auf jeden Fall so auch, aber ich probiere das gerne auch noch mit SendCh.

Hier noch ein Ausschnitt aus meiner aktuellen Memo-Ausgabe (besonders interessante Zeilen habe ich mit Sternchen hervorgehoben):
Delphi-Quellcode:
[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
Wie man sieht, wird meine Escape-Sequenz zum Cursor-Bewegen anscheinend im Klartext angezeigt (kann das richtig sein?).
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#24

Re: Telnet mit IdTelnet - Cursortasten senden

  Alt 30. Sep 2006, 19:44
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
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#25

Re: Telnet mit IdTelnet - Cursortasten senden

  Alt 30. Sep 2006, 20:45
Zitat:
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.
Wie gesagt, das könnte auch an der Ausgabe liegen, da das Programm selbst ja in den Telnet-Client sendet, die Ausgaben aber durch eine separate Ereignisbehandlung ins Memo geschrieben werden, also möglicherweise zeitversetzt.
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.
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#26

Re: Telnet mit IdTelnet - Cursortasten senden

  Alt 30. Sep 2006, 23:55
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:
TNC_GA findest du übrigens auch in dieser Unit.
Jep, habe ich gefunden. Allerdings ist das bloß als Konstante deklariert und wird nirgends verwendet, oder? Oder wie kann ich darauf zugreifen?

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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz