Java调用Telnet(windows版和Linux版)

来源:互联网 发布:阿里云控制台中文乱码 编辑:程序博客网 时间:2024/06/05 08:03

Telnet可以跨平台调用命令, 在服务器是不同系统时候非常好用. 但是在telnet服务器是linux或者windows时候, 客户端java代码略有不同,现在列出来:

服务器为Windows版本时

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);      }  }  

服务器为Linux时

/**  * commons-net-2.0.jar是工程依赖包   */  import java.io.InputStream;  import java.io.PrintStream;  import org.apache.commons.net.telnet.TelnetClient;  public class NetTelnet {      private TelnetClient telnet = new TelnetClient();      private InputStream in;      private PrintStream out;      private char prompt = '$';      // 普通用户结束      public NetTelnet(String ip, int port, String user, String password) {          try {              telnet.connect(ip, port);              in = telnet.getInputStream();              out = new PrintStream(telnet.getOutputStream());              // 根据root用户设置结束符              this.prompt = user.equals("root") ? '#' : '$';              login(user, password);          } catch (Exception e) {              e.printStackTrace();          }      }      /** * 登录 * * @param user * @param password */      public void login(String user, String password) {          readUntil("login:");          write(user);          readUntil("Password:");          write(password);          readUntil(prompt + " ");      }      /** * 读取分析结果 * * @param pattern * @return */      public String readUntil(String pattern) {          try {              char lastChar = pattern.charAt(pattern.length() - 1);              StringBuffer sb = new StringBuffer();              char ch = (char) in.read();              while (true) {                  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;      }      /** * 写操作 * * @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 disconnect() {          try {              telnet.disconnect();          } catch (Exception e) {              e.printStackTrace();          }      }      public static void main(String[] args) {          try {              System.out.println("启动Telnet...");              String ip = "192.168.0.11";              int port = 23;              String user = "user";              String password = "111111";              NetTelnet telnet = new NetTelnet(ip, port, user, password);              telnet.sendCommand("export LANG=en");              String r1 = telnet.sendCommand("cd /home/project/");              String r2 = telnet.sendCommand("pwd");              String r3 = telnet.sendCommand("sh a.sh");              System.out.println("显示结果");              System.out.println(r1);              System.out.println(r2);              System.out.println(r3);              telnet.disconnect();          } catch (Exception e) {              e.printStackTrace();          }      }  }  
0 0