Search code examples
javatelnet

Java based Telnet Application


I want to create Java based Telnet application which can send the telnet command to some server and capture it response , in simply command line Telnet emulator, Please kindly provide some tutorial to create.

i saw couple of tutorial it required java telnet server and client both , but my case i need only need send command and capture telnet output to variable or write text file

Thank you.


Solution

  • Take a look at Apache Commons Net TelnetClient. It could easily provide the behaviuor you need. You just have to get the TelnetClient instance, call the connect method and work with remote server via Input- and OutputStreams. Here you can find an official example, how it can be used, but it's a little bit redundant, IMO.

    Here is one more example from here:

    import org.apache.commons.net.telnet.TelnetClient;
    
    import java.io.InputStream;
    import java.io.PrintStream;
    
    public class AutomatedTelnetClient {
        private TelnetClient telnet = new TelnetClient();
        private InputStream in;
        private PrintStream out;
        private String prompt = "%";
    
        public AutomatedTelnetClient(String server, String user, String password) {
            try {
                // Connect to the specified server
                telnet.connect(server, 23);
    
                // Get input and output stream references
                in = telnet.getInputStream();
                out = new PrintStream(telnet.getOutputStream());
    
                // Log the user on
                readUntil("login: ");
                write(user);
                readUntil("Password: ");
                write(password);
    
                // Advance to a prompt
                readUntil(prompt + " ");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void su(String password) {
            try {
                write("su");
                readUntil("Password: ");
                write(password);
                prompt = "#";
                readUntil(prompt + " ");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public String readUntil(String pattern) {
            try {
                char lastChar = pattern.charAt(pattern.length() - 1);
                StringBuffer sb = new StringBuffer();
                boolean found = false;
                char ch = (char) in.read();
                while (true) {
                    System.out.print(ch);
                    sb.append(ch);
                    if (ch == lastChar) {
                        if (sb.toString().endsWith(pattern)) {
                            return sb.toString();
                        }
                    }
                    ch = (char) in.read();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public void write(String value) {
            try {
                out.println(value);
                out.flush();
                System.out.println(value);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public String sendCommand(String command) {
            try {
                write(command);
                return readUntil(prompt + " ");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public void disconnect() {
            try {
                telnet.disconnect();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            try {
                AutomatedTelnetClient telnet = new AutomatedTelnetClient(
                        "myserver", "userId", "Password");
                System.out.println("Got Connection...");
                telnet.sendCommand("ps -ef ");
                System.out.println("run command");
                telnet.sendCommand("ls ");
                System.out.println("run command 2");
                telnet.disconnect();
                System.out.println("DONE");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }