Telnet Protocol
lima-city → Forum → Heim-PC → Netzwerke
ausdehnung
befehl
byte
code
datum
fehlerkorrektur
funktionieren
import
internet
klartext
kommunikation
laufen
programmierer
report
server
string
telnet
url
verbindung
zwischenstation
-
Hallo,
ich habe einen kleinen TelnetServer geschrieben und der funktioniert auch soweit ganz gut. Ich habe in auf meinem Heimrechner getestet und dort funktioniert alles z.B. Telnet Befehle (IAC DONT ECHO). Wenn ich jetzt das Programm auf einem Server im Internet laufen lasse funktioniert er nicht. Bzw. die Telnet Befehle werden nicht mehr ausgeführt. Wie kann das sein. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du bist doch der Programmierer, wenn du es nicht weißt wer dann ?
Kommt eine Verbindung zustande ?
Kommen die Befehle richtig am Server an ?
Unterstützt der Server die Befehle die er ausführen soll ?
Hast du die nötigen Rechte auf dem Server ? -
Es wird eine Verbindung hergestellt.
Und auch klartext wird übertragen. Nur die Anweisungs-Bits werden falsch gesendet oder ausgewertet.
Das komische daran ist, dass es im Heimnetz funktioniert und von einem anderen Server nicht.
-
Werden sie nun falsch gesendet oder falsch ausgewertet ?
Wenn du so inkonsequenr programmierst wie du dich ausdrückst wird das nie funktionieren.
Beitrag zuletzt geändert: 20.7.2013 13:03:35 von fatfox -
fatfox schrieb:
Werden sie nun falsch gesendet oder falsch ausgewertet ?
Wenn du so inkonsequenr programmierst wie du dich ausdrückst wird das nie funktionieren.
Ich weiß es nicht und werd mal versuchen mit wireshark die bytes mitzulesen und zu gucken obs die richtigen sind.
EDIT: Anscheinend werden die Bytes falsch übertragen.
Aber warum. Wenn ich es bei mir laufen lasse funktioniert es doch auch
Beitrag zuletzt geändert: 20.7.2013 13:55:02 von nilsmargotti -
der Unterschied zwischen einem Heimnetz und dem Internet ist die Ausdehnung, je weiter Sender und Empfänger von einander entfernt sich desto wahrscheinlicher ist es das Daten Fehler aufweisen, ebenso erhöht die Anzahl der Zwischenstationen die Fehleranfälligkeit.
Wie überträgst du denn die Daten ? WWenn du TCP verwendest sollten die Daten eigentlich korrigiert werden, benutzt du UDP ist es ein fire and forget, in diesemFalle musst du dich selbst darum kümmern das die Daten korrekt sind die du erhältst, eine einfache Variante währe die empfangenen Daten zu prüfen und den Befehl neu anzufordern wenn die Prüfung fehlschlägt.
Again, du bist der Programmierer, also kannst nur du wissen wie du eine Fehlerkorrektur implementieren kannst (oder du zeigst den code). -
Das sind die Klasen, die für die Kommunikation verantwortlich sind.
package com.github.Nols1000.ts; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; public class TelnetInput { private Socket clientSocket; private BufferedReader in; public TelnetInput(Socket s) throws IOException{ clientSocket = s; in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); } public String readln() throws IOException{ String ln = in.readLine(); return stripTelnetCmd(ln); } public String readPass(){ return null; } public BufferedReader getReader(){ return in; } public String stripTelnetCmd(String ln){ byte[] cmd = ln.getBytes(); byte[] temp = new byte[cmd.length]; boolean IAC = false; boolean DO = false; boolean DONT = false; boolean WILL = false; boolean WONT = false; int j = 0; for(int i = 0;i < cmd.length;i++){ if(IAC){ if(DO){ IAC = false; DO = false; } if(DONT){ IAC = false; DONT = false; } if(WILL){ IAC = false; WILL = false; } if(WONT){ IAC = false; WONT = false; } if(cmd[i] == (byte) 253){ DO = true; } if(cmd[i] == (byte) 254){ DO = true; } if(cmd[i] == (byte) 251){ DO = true; } if(cmd[i] == (byte) 252){ DO = true; } }else if(cmd[i] == (byte) 255){ IAC = true; }else{ temp[j] = cmd[i]; j++; } } byte[] out = new byte[j]; for(int i = 0; i < j;i++){ out[i] = temp[i]; } return new String(out); } }
package com.github.Nols1000.ts; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.Socket; public class TelnetOutput { private Socket socket; private BufferedWriter out; public TelnetOutput(Socket s) throws IOException{ socket = s; if(!s.isClosed()){ out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); } } public void sendMessage(String msg) throws IOException{ if(!socket.isClosed()){ out.write(msg); out.flush(); } } public void sendMessage(String[] msg) throws IOException{ if(!socket.isClosed()){ for(int i = 0; i < msg.length; i++){ out.write(msg[i]); out.flush(); } } } public void sendTelnetCommand(int cmd) throws IOException{ if(!socket.isClosed()){ out.write(255); out.write(cmd); out.flush(); } } public void sendTelnetCommand(int[] cmd) throws IOException{ if(!socket.isClosed()){ if(cmd.length > 2){ out.write("There are to many TelnetArguments. Please report this to the server admin or Nols1000."); out.flush(); } out.write(255); out.write(cmd[0]); out.write(cmd[1]); out.flush(); } } public BufferedWriter getWriter(){ return out; } }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage