2016-11-29 121 views
1

我使用org.apache.commons.net.telnet庫與我的Telnet服務器建立連接,該服務器與標準RFC 854稍有不同,但沒有什麼太可怕的。使用org.apache.commons.net.telnet發送telnet命令

實際上,我建立到這個遠程telnet服務器的連接的唯一方法是利用org.apache.commons.net.telnet,因爲純Java Socket不起作用。

我stucked與此庫因爲我不能想出一個辦法用它發送commans使用sendCommand方法,它接受一個byte(不byte[])爲它的唯一理由。

將我String commandbyte[]數組,但我不能傳遞作爲參數...

這是我到目前爲止的代碼:

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 
     } 
    } 
} 

長話短說:我怎樣才能使用這個庫發送命令?

回答

2

您可以使用從getOutputStream返回的OutputStream(例如, telnet.getOutputStream().write(cmd);。您可能還需要在OutputStream上調用.flush()