Linux Bedienung über Telnet [Erledigt]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Linux Bedienung über Telnet [Erledigt]

Beitrag von Elektrolurch »

Hallo
Da ich noch neu im Forum hier bin und bis jetzt auch nur sporadisch mit Qbasic,VB und nun Purebasic zu tun hatte, möchte ich mal die Erfahrenen um einen Rat bitten.
Also ich beabsichtige eine Applikation zu schreiben mit der ich aus verschieden Optionen einen Satz Files erstelle und über das Netzwerk auf einen Linux Rechner kopiere.
Soweit kein Problem.
Danach möchte ich mich per Telnet auf diesen Rechner einloggen und die Files dort auf die über das Netzwerk gesperrten Verzeichnisse verteilen.

Momentan sehe ich zwei Möglichkeiten.

A: Telnet über RunProgramm starten und bedienen.
Da ich aber nicht immer über den gleichen PC starten werde (Verschiedene Anwender) kann es zu Konflikten bei den Versionen von Telnet kommen. Hab ich hier im Forum zumindest sowas gelesen.

B: Über Open Network Befehle.
Ich habe dazu aber noch nichts passendes gefunden.
Ein Vorschlag für den Zugriff auf eine Internetseite funktionierte solange bis ich die XYZ.Com durch die IPAdresse des PC's ersetzte. Es kamen lediglich irgendwelche Zeichen, aber nicht die Meldung die normal bei Telnet erscheint.

Ich hoffe ihr könnt mir helfen.
Ich bin für alles Dankbar, egal ob Tips, Codeschnipsl oder Links

Tschau Andre
Zuletzt geändert von Elektrolurch am 16.10.2007 22:08, insgesamt 1-mal geändert.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Kontaktdaten:

Beitrag von hardfalcon »

Telnet würde ich nur nehmen, wenn es unbedingt erforderlich ist, weil es alle Daten (Login-Daten inbegriffen) im Klartext, ohne jede Verschlüsselung, überträgt... Vielleicht besser selber was Coden, zumindest ein halbwegs abhörsicherer Login sollte ja kein Problem darstellen (Client schickt dem Server ne Login-Anfrage, Server schickt einen String aus zufälligen Zeichen zurück, und der Client packt den Zufallsstring vom Server und das Passwort in einen String, und schickt den MD5-Hash dieses Strings an den Server. Da der Server sowohl das Passwort als auch den String mit den Zufälligen Werten kennt, kann er selber ja den MD5-Hash auch errechnen, und so den Hash, den ihm der Client gesendet hat, prüfen. Um es noch komplizierter zu machen, könntest du zu dem String aus Zufallsdaten und Passwort noch ein Zeichen hinzufügen, das der Server nicht kennt. Dann muss der Server bis zu 256 MD5-Hashes berechnen, ehe er den richtigen gefunden hat. Dies würde es dem Angreifer im Falle einer Bruteforce-Attacke auf die MD5-Hashes nochmal wesentlich (theoretisch bis zu 256 Mal) schwieriger machen, den Hash zu knacken...).
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi
Ich glaube ich muß noch dazusagen, daß es kein PC im eigentlichen Sinn ist.
Es handelt sich um einen MP3Player (Hifidelio).
Linux ist das Betriebssystem.
Einziger Zugang = Telnet (Keine Tastatur, kein Monitor) und ein Freigegebener Ordner per Lan oder WLan

Tschau Andre
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi mal der erste Versuch

Code: Alles auswählen

DatenBuffer.s = Space(100)
If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf
Hallo$ = Chr(13)+Chr(10)
Port = 23
ConnectionID = OpenNetworkConnection("192.168.178.24", Port)
If ConnectionID
  SendNetworkString(ConnectionID, Hallo$)    ;Einfach ein Return um die Meldung auszulösen
  ReceiveNetworkData(ConnectionID, @DatenBuffer, Len(DatenBuffer))
  A$= DatenBuffer ; mal sehen was zurückkommt
  Debug A$
  CloseNetworkConnection(ConnectionID)
Else
  MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf
End
Und hier was zurückkommt :o

Code: Alles auswählen

ÿýÿý ý#ÿý'     


Irgendwelche Anregungen ?

Code-Tags gesetzt - Kaeru fecit
nächstmal bitte selber machen.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

was soll denn zurückkommen?

wenn irgendeine kommandosequenz zurückkommt,
dann bringt das wenig, die als string hinzuschreiben,
dann muss man die parsen, dazu sollte im manual des gerätes was stehen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

HI
Ich bin doch hier als Anfänger, also gaaanz langsam.
Ich hatte eigentlich erwartet, daß so etwas wie beim Telnet zurückkommt.

Code: Alles auswählen

Linux 2.4.26 (jukebox) (21:07 on Thursday, 11 October 2007)

login:
Sorry, was ist parsen?
Finde ich da was in der Linux Beschreibung ?

Tschau Andre
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also, ich dachte jetzt anhand des empfangenen strings, dass es eine commandosequenz sein könnte.

viele geräte kommunizieren auf die art, dass sie keinen klartext schicken und empfangen,
sondern eine folge von direkten befehlen im ASCII-format.

die muss man "parsen", also auseinandernehmen und in für menschen lesbare befehle aufschlüsseln.
welche befehle das gerät erwartet und zurückgibt, sollte in der anleitung des gerätes stehen.


mein erster gedanke bei dem string den du da hast, war, dass er fälschlich in Unicode ausgegeben wurde.
also, einfach mal beim compilieren in den compileroptionen das "create Unicode exe" deaktivieren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Ich habe im englischen Forum schon einmal einen einfachen Basis-Telnetclient veröffentlicht, der beispielhaft den Verbindungsaufbau über einen Telnet-Server eines Großrechners mit anschließendem Logon durchführt:
http://www.purebasic.fr/english/viewtop ... 77&start=5

Die wirren Zeichen sind Codes, die durch die Aushandlung von Protokoll-Eigenschaften zwischen Telnet-Server und Telnet-Client entstehen. Klartexte (zusammen mit Kontroll-Codes) erscheinen erst später bei der eigentlichen Anmeldung.

Mein Beispiel-Programm gibt beim Verbindungsaufbau zu meinem Großrechner-Telnetserver folgendes Protokoll aus:
Telnet-Protokoll hat geschrieben: S: DO 'TN3270E'
C: WONT 'TN3270E'
S: DO 'Terminal Type'
C: WONT 'Terminal Type'
S: DO 'Suppress Go Ahead'
C: WONT 'Suppress Go Ahead'
S: WILL 'Suppress Go Ahead'
S: IKJ56700A ENTER USERID -
C: TESTUSER
S: IKJ56714A ENTER CURRENT PASSWORD FOR TESTUSER-
C: ******
S: WILL 'Echo'
S: WONT 'Echo'
S: ICH70001I TESTUSER LAST ACCESS AT 08:33:37 ON FRIDAY, OCTOBER 12, 2007
S: IKJ56496I DEFAULT ACCOUNT NUMBERS COULD NOT BE OBTAINED - ENTER ACCOUNT NUMBER
C: 12345678
S: IKJ56497I DEFAULT PROCEDURE NAMES COULD NOT BE OBTAINED - ENTER PROCEDURE NAME
C: TESTPROC
S: TESTUSER LOGON IN PROGRESS AT 08:46:12 ON OCTOBER 12, 2007
S: NO BROADCAST MESSAGES
S: READY
'C' steht immer für eine Client-Meldung, 'S' für eine Server-Meldung. Wie man sieht, meldet sich nach erfolgreicher Verbindung über OpenNetworkConnection() direkt der Server und bittet den Client, eine 3270-Session aufzubauen. Um keine langwierigen Protokoll-Verhandlungen durchführen zu müssen und den Code einfach zu halten, lehnt der Client grundsätzlich alle Bitten des Servers mit 'WONT' ab. Der Logon klappt aber natürlich trotzdem... :wink:

Natürlich müssen die Abfragen in der Prozedur ParseServerMsg() wie z.B. nach "ENTER USERID" entsprechend an anderslautende Texte anderer Telnet-Server angepaßt werden...

Außerdem sollte man auch einmal einen Blick in die Telnet-Dokumentation werfen:
RFC764 - Telnet protocol specification (http://www.ietf.org/rfc/rfc764.txt)
RFC860 - Telnet timing mark option (http://www.faqs.org/ftp/rfc/pdf/rfc860.txt.pdf)
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi Kaeru Gaman

create unicode executable war deaktiviert.
Aktivert sieht es so aus

Code: Alles auswählen

?8??C? 
Ein bißchen besser aber nicht viel.

Hi Shardik
Dein Programm ist sicher toll, aber bis ich dass verstehe, muß ich es wohl noch ein bißchen studieren. :mrgreen:
:?
Vieleicht gehts ja auch einfacher?
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Elektrolurch hat geschrieben: Vieleicht gehts ja auch einfacher?
Tut mir leid, aber ich befürchte, daß es leider nicht eínfacher geht... :|

Wie ich schon zu erklären versuchte, sind die "wirren" Zeichen im Telnet-Protokoll definierte "unleserliche" Byte-Codes, die von meinem Programm in für Menschen "lesbare" Telnet-Befehle umgesetzt werden. Vielleicht solltest Du mein Programm wirklich einmal ausprobieren und schauen, welche Telnet-Codes Dein Telnet-Server an Deinen PC schickt und welche Protokoll-Eigenschaften der Telnet-Server aushandeln will. Mit etwas Glück solltest Du bis an die Stelle gelangen, wo der Telnet-Server Deine Benutzerkennung anfordert. Dann solltest Du mein Programm entsprechend anpassen und auf die Telnet-Anfrage Deine Benutzerkennung schicken. Du kannst auch gerne das Debug-Protokoll in ein Posting schreiben, sodaß ich das Programm für Dich anpassen kann...
Antworten