kostenloser Webspace werbefrei: lima-city


instream.readLine() funktioniert nicht richtig

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    nilsmargotti

    Kostenloser Webspace von nilsmargotti

    nilsmargotti hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    nilsmargotti

    Kostenloser Webspace von nilsmargotti

    nilsmargotti hat kostenlosen Webspace.

    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?
  5. 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?


  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!