Java – Telnetsession

Example for a automated telnet-session. You need the org.apache.commons.net.telnet librabry!

public class TelnetServices implements Runnable, TelnetNotificationHandler {

private static TelnetServices INSTANCE = null;
static TelnetClient tc = null;
//connection data
private static String remoteip = "ip";
private static int remoteport = xx;

/**
* Just to make sure, nobody creates an instance
* @author m.schwarz
*/
private TelnetServices() {
    //.......
}
/**
* get Instance of Class. If no instance exists, create new
* @return INSTANCE
*/
public static TelnetServices getInstance() {
    if (INSTANCE == null) {
        INSTANCE = new TelnetServices();
    } return INSTANCE; }

/**
* connect to target and execute your commands
*/
public void executeCommands(List commands) throws Exception {

boolean endSession = false;
FileOutputStream fout = null;
try{
    fout = new FileOutputStream ("spy.log", true);
} catch (IOException e) {
    System.err.println( "Exception while opening the spy file: " + e.getMessage());
}
tc = new TelnetClient();
TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler("VT100", false, false, true, false);
EchoOptionHandler echoopt = new EchoOptionHandler(true, false, true, false);
SuppressGAOptionHandler gaopt = new SuppressGAOptionHandler(true, true, true, true);
try {
    tc.addOptionHandler(ttopt);
    tc.addOptionHandler(echoopt);
    tc.addOptionHandler(gaopt);
} catch (InvalidTelnetOptionException e) {
    System.err.println("Error registering option handlers: " + e.getMessage());
}
while (true) {
//disconnect
if (endSession) {
    break;
}
boolean end_loop = false;
try {
    tc.connect(remoteip, remoteport);
    if (tc.isConnected()) {
		//reads the commandline
		Thread reader = new Thread (new TelnetServices());
		tc.registerNotifHandler(new TelnetServices());
		reader.start();
		OutputStream outstr = tc.getOutputStream();
		byte[] buff = new byte[1024];
		int ret_read = 0;
		int inputOrder = 0;
		int NumberOfCommands = commands.size();
		String scmd = null;
        //command to send via telnet
        do {
            if (inputOrder == NumberOfCommands) {
                //no more input
                Thread.sleep(5000);
                endSession = true;
                reader.stop();
                break;
            } else {
                Thread.sleep(2200);
                //gives the server time to execute the last command
                scmd = commands.get(inputOrder);
            }
            buff = getPreparedCommand(scmd);
            ret_read = scmd.getBytes().length+2;
            if (endSession) {
                ret_read = 0;
                end_loop = true;
            }
            if(ret_read > 0) {
                if((new String(buff, 0, ret_read)).startsWith("AYT")) {
                    try {
                        System.out.println("Sending AYT");
                        System.out.println("AYT response:" + tc.sendAYT(5000));
                    } catch (IOException e) {
                        System.err.println("Exception waiting AYT response: " + e.getMessage());
                    }
                } else if((new String(buff, 0, ret_read)).startsWith("OPT")) {
                    System.out.println("Status of options:");
                    for(int ii=0; ii 0) && (end_loop == false));
                    try { tc.disconnect();
                        System.out.println("-----------------> Telnetsession closed");
                    }catch (IOException e) {
                    System.err.println("Exception while connecting:" + e.getMessage()); }
                }
            } catch (IOException e) {
                System.err.println("Exception while connecting:" + e.getMessage());
                System.exit(1);
            }
        }
    }

    /** * Prepares the command to fit 1024 byte-Array */
    private static byte[] getPreparedCommand(String s) {
    byte[] bytecode = new byte[1024];
    byte[] bString = s.getBytes();
    int stringLength = bString.length;
    for (int i=0; xxxxxx) {
        String command = null;
        if(negotiation_code == TelnetNotificationHandler.RECEIVED_DO) {
            command = "DO";
        } else if(negotiation_code == TelnetNotificationHandler.RECEIVED_DONT) {
            command = "DONT";
        } else if(negotiation_code == TelnetNotificationHandler.RECEIVED_WILL) {
            command = "WILL"; } else if(negotiation_code == TelnetNotificationHandler.RECEIVED_WONT) { command = "WONT"; } System.out.println("Received " + command + " for option code " + option_code); }

/**
*
* Do not call! * This is only for the Reader!
*
* Reader thread. * Reads lines from the TelnetClient and echoes them * on the screen. *
**/
public void run() {
    InputStream instr = tc.getInputStream();
    try {
        byte[] buff = new byte[1024];
        int ret_read = 0;
        do { ret_read = instr.read(buff);
                if(ret_read > 0) {
                    System.out.print(new String(buff, 0, ret_read));
                }
        } while (ret_read >= 0);
    } catch (IOException e) {
            System.err.println("Exception while reading socket:" + e.getMessage()); }
            try { tc.disconnect();
                System.out.println("tc is disconnected");
            } catch (IOException e) {
                System.err.println("Exception while closing telnet:" + e.getMessage());
            }
}

/**
* returns the login and the command to delete screenshots in /tmp
*/
public static List getSpecialCommand() {
List cmds = new ArrayList();
cmds.add(0, "root");
cmds.add(1, "sh blabla.sh");
return cmds;
}

public void setRemoteIp(String ip) {
this.remoteip = ip;
}

public void setRemotePort(int port) {
this.remoteport = port;
}

}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.