- 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);
- }
- }
Java调用Telnet示例
最新推荐文章于 2024-06-29 03:25:29 发布