Java调用Telnet示例
import java.io.IOException;import java.io.InputStream;import java.io.PrintStream;import java.io.UnsupportedEncodingException;import org.apache.commons.net.telnet.TelnetClient;/** * Telnet操作器,基于commons-net-2.2.jar * @author JiangKunpeng * */public class TelnetOperator {private String prompt = ">";//结束标识字符串,Windows中是>,Linux中是#private char promptChar = '>';//结束标识字符private TelnetClient telnet;private InputStream in;// 输入流,接收返回信息private PrintStream out;// 向服务器写入 命令/** * @param termtype协议类型:VT100、VT52、VT220、VTNT、ANSI * @param prompt结果结束标识 */public TelnetOperator(String termtype,String prompt){telnet = new TelnetClient(termtype);setPrompt(prompt);}public TelnetOperator(String termtype){telnet = new TelnetClient(termtype);}public TelnetOperator(){telnet = new TelnetClient();}/** * 登录到目标主机 * @param ip * @param port * @param username * @param password */public void login(String ip, int port, String username, String password){try {telnet.connect(ip, port);in = telnet.getInputStream();out = new PrintStream(telnet.getOutputStream());readUntil("login:");write(username);readUntil("password:");write(password);String rs = readUntil(null);if(rs!=null&&rs.contains("Login Failed")){throw new RuntimeException("登录失败");}} catch (Exception e) {throw new RuntimeException(e);}}/** * 读取分析结果 * * @param pattern匹配到该字符串时返回结果 * @return */public String readUntil(String pattern) {StringBuffer sb = new StringBuffer();try {char lastChar = (char)-1;boolean flag = pattern!=null&&pattern.length()>0;if(flag)lastChar = pattern.charAt(pattern.length() - 1);char ch;int code = -1;while ((code = in.read()) != -1) {ch = (char)code;sb.append(ch);//匹配到结束标识时返回结果if (flag) {if (ch == lastChar && sb.toString().endsWith(pattern)) {return sb.toString();}}else{//如果没指定结束标识,匹配到默认结束标识字符时返回结果if(ch == promptChar)return sb.toString();}//登录失败时返回结果if(sb.toString().contains("Login Failed")){return sb.toString();}}} catch (Exception e) {e.printStackTrace();}return sb.toString();}/** * 发送命令 * * @param value */public void write(String value) {try {out.println(value);out.flush();} catch (Exception e) {e.printStackTrace();}}/** * 发送命令,返回执行结果 * * @param command * @return */public String sendCommand(String command) {try {write(command);return readUntil(prompt);} catch (Exception e) {e.printStackTrace();}return null;}/** * 关闭连接 */public void distinct(){try {if(telnet!=null&&!telnet.isConnected())telnet.disconnect();} catch (IOException e) {e.printStackTrace();}}public void setPrompt(String prompt) {if(prompt!=null){this.prompt = prompt;this.promptChar = prompt.charAt(prompt.length()-1);}}public static void main(String[] args) {TelnetOperator telnet = new TelnetOperator("VT220",">");//Windows,用VT220,否则会乱码telnet.login("192.168.2.19", 23, "administrator", "123456");String rs = telnet.sendCommand("ipconfig");try {rs = new String(rs.getBytes("ISO-8859-1"),"GBK");//转一下编码} catch (UnsupportedEncodingException e) {e.printStackTrace();}System.out.println(rs);}}