2016-11-29 3 views
1

Ich verwende org.apache.commons.net.telnet Bibliothek, um eine Verbindung mit meinem Telnet-Server, der eine etwas andere Implementierung als der Standard RFC 854 hat, aber nichts zu gruselig.Senden Telnet-Befehle mit org.apache.commons.net.telnet

Eigentlich die einzige Möglichkeit für mich, eine Verbindung zu diesem Remote-Telnet-Server herzustellen ist die Verwendung der org.apache.commons.net.telnet, da der reine Java-Socket nicht funktioniert hat.

Ich bin mit dieser Bibliothek stucked da ich nicht einen Weg finden kann Commans mit ihm unter Verwendung sendCommand Methode, die ein byte (nicht byte[]) akzeptiert senden für seine einziges Argument.

ich konvertieren meine String command in eine byte[] Array aber ich kann nicht passieren, dass als Argument ...

Das ist mein Code so weit:

import org.apache.commons.net.io.Util; 
import org.apache.commons.net.telnet.TelnetClient; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

public class Telnet { 

    public static void main(String[] args) { 
     TelnetClient telnet; 

     telnet = new TelnetClient(); 

     try { 
      telnet.connect("17.16.15.14", 12345); 

      byte[] cmd = "root".getBytes(); 

      telnet.sendCommand(cmd); // this is where I'm stuck 
     } catch (IOException e) { 
      e.printStackTrace(); 
      System.exit(1); 
     } 

     readWrite(telnet.getInputStream(), telnet.getOutputStream(), 
       System.in, System.out); 

     try { 
      telnet.disconnect(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      System.exit(1); 
     } 

     System.exit(0); 
    } 

    public static final void readWrite(final InputStream remoteInput, 
             final OutputStream remoteOutput, 
             final InputStream localInput, 
             final OutputStream localOutput) 
    { 
     Thread reader, writer; 

     reader = new Thread() 
     { 
      @Override 
      public void run() 
      { 
       int ch; 

       try 
       { 
        while (!interrupted() && (ch = localInput.read()) != -1) 
        { 
         remoteOutput.write(ch); 
         remoteOutput.flush(); 
        } 
       } 
       catch (IOException e) 
       { 
        //e.printStackTrace(); 
       } 
      } 
     } 
     ; 


     writer = new Thread() 
     { 
      @Override 
      public void run() 
      { 
       try 
       { 
        Util.copyStream(remoteInput, localOutput); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
        System.exit(1); 
       } 
      } 
     }; 


     writer.setPriority(Thread.currentThread().getPriority() + 1); 

     writer.start(); 
     reader.setDaemon(true); 
     reader.start(); 

     try 
     { 
      writer.join(); 
      reader.interrupt(); 
     } 
     catch (InterruptedException e) 
     { 
      // Ignored 
     } 
    } 
} 

Lange Rede kurzer Sinn: Wie kann ich Befehle mit dieser Bibliothek senden?

Antwort

2

Sie können Daten mit dem von getOutputStream zurückgegebenen OutputStream schreiben, z. telnet.getOutputStream().write(cmd);. Möglicherweise müssen Sie auch .flush() im OutputStream aufrufen