还是要通过#这个提示符来判断信息返回结束了。
重点看下readUntil方法怎么写的。
用户名或密码错误的时候,结束提示符号可能就不是'#'了,可能是冒号':', 让你再输入用户名。
某个命令的输出,可能要敲个空格,才能继续输出。
哈哈,要考虑的问题多多……
=============================================== 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(“127.0.0.1″, “username”, “password”); telnet.sendCommand(“ps -ef “); telnet.disconnect(); } catch (Exception e) { e.printStackTrace(); } } } =========================================
|