zoukankan      html  css  js  c++  java
  • 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);
    	}
    	
    }


  • 相关阅读:
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    OA办公系统 Springboot Activiti6 工作流 集成代码生成器 vue.js 前后分离 跨域
    java企业官网源码 自适应响应式 freemarker 静态引擎 SSM 框架
    java OA办公系统源码 Springboot Activiti工作流 vue.js 前后分离 集成代码生成器
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    java 视频播放 弹幕技术 视频弹幕 视频截图 springmvc mybatis SSM
    最后阶段总结
    第二阶段学习总结
    第一阶段学习总结
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3373674.html
Copyright © 2011-2022 走看看