2016-11-29 19 views
1

ライブラリを使用して、標準RFC 854とはわずかに異なる実装を持つTelnetサーバとの接続を確立しますが、怖いことはありません。org.apache.commons.net.telnetでtelnetコマンドを送信

実際、このリモートTelnetサーバーへの接続を確立する唯一の方法は、純粋なJavaソケットが機能しなかったのでorg.apache.commons.net.telnetを利用することです。

私はbyte(ないbyte[]を)受け入れるsendCommandメソッドを使用して、それをcommansを送信する方法を把握することはできませんので、私はこのライブラリでstuckedだ、それが唯一の引数だため。

私はbyte[]配列に私のString commandを変換するが、私は、引数として...

これは、これまでの私のコードであることを渡すことはできません。

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()に電話する必要があります

関連する問題