instream.readLine() funktioniert nicht richtig
lima-city → Forum → Programmiersprachen → Java
abhilfe
anteil
code
eingabe
einzelne kommandos
ersten eingabe
http
komische zeichen
log
login
not
protokoll
rechte erwerben
run
server
stoppen
string
telnet
url
verwenden
-
Hallo
wie im Titel steht habe ich ein Problem mit dem InStream eines Sockets. Er beinhaltet nämlich bei der ersten Eingabe komische Zeichen vor der eigendlichen Eingabe. (Bild)
Hier noch der Code der Eingabe:
private void login(IPv4 IP){ try { outstream.write(prefix +"UserID: "); outstream.flush(); String user = instream.readLine(); outstream.write(prefix +"\r\n"); outstream.write(prefix +"Password: "); outstream.flush(); String pass = instream.readLine(); outstream.write(prefix +"\r\n"); outstream.write(prefix +"\r\n"); outstream.flush(); User loginUser = new User(user, IP, this, plugin); if(loginUser.login(pass)){ outstream.write(prefix +"Login as "+ loginUser.getName() + ":"+ loginUser.getID() +"\r\n"); outstream.write(prefix +"From: "+ loginUser.getIP().toString() +"\r\n"); outstream.write(prefix +"\r\n"); outstream.flush(); this.user = loginUser; commandLoop(loginUser); }else{ outstream.write(prefix +"Login failed. \r\n"); outstream.flush(); login(IP); } } catch (IOException e) { e.printStackTrace(); } } private void commandLoop(User sessionUser) { try { if(sessionUser.isAuth()){ while (run && clientSocket.isConnected()){ outstream.write(prefix); outstream.flush(); String command; command = instream.readLine(); sendInfo(sessionUser.getName()); sendInfo(sessionUser.getID()+""); sendInfo(sessionUser.getIP().toString()); sendInfo(command); if(command.startsWith("sudo ")){ if(sessionUser.isRoot()){ command = command.substring(5); }else{ outstream.write("$ \r\n"); outstream.write("$ Password: "); outstream.flush(); String pass = instream.readLine(); outstream.write("\r\n"); outstream.flush(); if(sessionUser.loginAsRoot(pass)){ prefix = "$"; outstream.write("$ \r\n"); outstream.write("$ Root-Login succeed.\r\n"); outstream.write("$ You've now root access.\r\n"); outstream.flush(); }else{ outstream.write("$ \r\n"); outstream.write("$ Root-Login failed.\r\n"); outstream.flush(); } } } if (!clientSocket.isClosed()) { if (sessionUser.isRoot() || sessionUser.hasPermissions(command)) { plugin.getServer().dispatchCommand(this, command); }else if(!command.equals("")){ outstream.write(prefix +"You do not have permission to use this command...\r\n"); outstream.flush(); } } } } } catch (Exception ex) { } }
Wisst ihr warum die Eingabe so komisch ist?
Notiz: Es gibt keine Fehlermeldung -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
wenn ich das richtig sehe, dann verbindest Du Dich mittels eines Telnet-Clients mit dem Server. Telnet ist nicht transparent, sondern ein Protokoll, dass Steuerkommandos übertragen kann (Prozesse stoppen, Flusskontrolle, etc. -- siehe https://tools.ietf.org/html/rfc854).
Ich vermute, Du siehst im Log diese Steuerzeichen. Abhilfe. Telnetprotokoll (minimum) implementieren oder kein Telnet als Client verwenden.
Statt telnet könntest Du socat (zum Testen) verwenden oder evtl. ist der Telnet-Client so konfigurierbar, dass er weniger Steuerzeichen sendet?
Außerdem ist das, was Du da treibst, ganz schön fahrlässig. Du überträgst (wenn derzeit auch nur per localhost) das Root-PWD im Klartext.
Wenn das keine Programmierübung ist, dann würde ich persönlich lieber auf SSH zurückgreifen.
Besser: Niemals root-Login per SSH erlauben, stattdessen login als normaler User und dann lokal root-Rechte erwerben. Wenn Du schon sudo verwendest, dann kannst Du auch einzelne Kommandos für bestimmte User als root ausführen lassen, ohne dass der User das Root-PWD kennen muss.
HTH
-
Klar weiß ich, dass das mit telnet keine sicher Sache ist. Deswegen Sitze ich ja auch noch an nem SSH Server. Hat vielleicht jmd. eine Lösung diese Befehle herauszufiltern?
-
Hi,
das hier sieht doch nicht schlecht aus http://sourceforge.net/projects/telnetd/
Embeddable telnet daemon written 100% in Java.
Evtl. kann man den Protokoll-Anteil aus TelnetIO.java abgucken?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage