Java通过Telnet访问主机(远程电脑)

1.首先需要准备相关的jar包:commons-net-2.0.jar

2.打开并启动Telnet服务(Telnet服务在Windows XP默认是打开的,在Win 7默认是关闭的)

    注意:Telnet服务开启对计算机存在安全隐患,开启之后,不使用时请务必关闭!

3.Java通过Telnet访问主机实例:

package com.gy.csdn;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;

import org.apache.commons.net.telnet.TelnetClient;

/**
 * 
 *功能说明:Java通过Telnet访问主机
 *
 *创建人:Gansuper
 *
 *创建时间:2014-9-19 下午05:33:09
 *
 *修改人             修改时间             修改描述
 *
 */
public class TelnetOperator {
	
	/**
	 * 结束标识字符串,Windows中是>,Linux中是#
	 */
	private String prompt = ">";	
	
	/**
	 * 结束标识字符
	 */
	private char promptChar = '>';	
	
	/**
	 * TelnetClient对象
	 */
	private TelnetClient telnet;
	
	/**
	 * InputStream 输入流,接收返回信息
	 */
	private InputStream in;	
	
	/**
	 * PrintStream 向服务器写入 命令
	 */
	private PrintStream out;	
	
	/**
	 * 构造函数
	 * @param termtype
	 * @param prompt
	 */
	public TelnetOperator(String termtype,String prompt){
		telnet = new TelnetClient(termtype);
		setPrompt(prompt);
	}
	
	/**
	 * 构造函数
	 * @param termtype
	 */
	public TelnetOperator(String termtype){
		telnet = new TelnetClient(termtype);
	}
	
	/**
	 * 构造函数
	 */
	public TelnetOperator(){
		telnet = new TelnetClient();
	}
	
	/**
	 * 登录到目标主机
	 * @param ip 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 String
	 */
	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();
		}
	}
	
	/**
	 * 
	 *功能说明:发送命令,返回执行结果
	 *
	 *输入参数:command telnet命令
	 *
	 *输出参数:String 命令执行结果
	 *
	 *创建人:Gansuper
	 *
	 *创建时间:2014-9-19 下午06:06:40
	 *
	 */
	public String sendCommand(String command) {
		try {
			write(command);
			return readUntil(prompt);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 *功能说明:关闭telnet连接
	 *
	 *输入参数:
	 *
	 *输出参数:
	 *
	 *创建人:Gasuper 
	 *
	 *创建时间:2014-9-19 下午06:06:40
	 */
	public void distinct(){
		try {
			if(telnet!=null&&!telnet.isConnected())
				telnet.disconnect();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 *功能说明:设置结束标识符
	 *
	 *输入参数:prompt 结束标识符
	 *
	 *输出参数:
	 *
	 *创建人:Gansuper
	 *
	 *创建时间:2014-9-19 下午06:06:40
	 */
	public void setPrompt(String prompt) {
		if(prompt!=null){
			this.prompt = prompt;
			this.promptChar = prompt.charAt(prompt.length()-1);
		}
	}
	
	/**
	 *功能说明:测试函数
	 *
	 *输入参数:args
	 *
	 *输出参数:
	 *
	 *创建人:Gansuper
	 *
	 *创建时间:2014-9-19 下午06:06:40
	 */
	public static void main(String[] args) {
		TelnetOperator telnet = new TelnetOperator("VT220",">");//Windows,用VT220,否则会乱码
		telnet.login("10.1.34.63", 23, "administrator", "admin");
		/*String rs = telnet.sendCommand("ipconfig");
		try {
			rs = new String(rs.getBytes("ISO-8859-1"),"GBK");//转一下编码
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		System.out.println(rs);*/
		//23为默认端口
		String command1 = telnet.sendCommand("telnet 10.1.34.63 23");
		System.out.println(command1);
		String r1 = telnet.sendCommand("d:");
		System.out.println(r1);
		String r2 = telnet.sendCommand("cd Program Files");  
		System.out.println(r2); 
	    String r3 = telnet.sendCommand("cd QQGAME"); 
	    System.out.println(r3); 
	   //telnet.distinct();  
	}
}
4.执行结果
 

你可能感兴趣的:(Java)