Java用Commons-Net实现Telnet协议后台远程登录控制



PS: 因需获取远程机数据,特研究了哈Telnet,特此做个记录,已备后用。

什么是Telnet协议?


              Telnet协议是TCP/IP协议中的一员,是Internet远程登录服务的标准协议和主要方式。

              说白了就是:利用TelnetClient后台登陆远程计算机,发送相关指令让远程计算机执行。

这张图来自度娘: - - !


Telnet协议实现方式:这个过程全部以流(IO)的方式来完成。 

开启Telnet必须以下服务:
net start seclogon
net start Telnet

实现方式:利用Commons-Net即可轻松完成这个工作,下列代码非常简单演示如何远程登录计算机后,发送一个30秒关机指令。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

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

/**
 * 这是一个测试实现
 * **/
public class TelnetTest 
{
	private TelnetClient telnetClinet = null;
	private InputStream is = null;
	private OutputStream os = null;
	
	/**
	 * 连接远程计算机,连接完成后,获取读取流与发送流
	 * @param ip  远程计算机IP地址
	 * @param port 远程计算机端口
	 * */
	public void connection(String ip,int port)
	{
		try 
		{
			telnetClinet = new TelnetClient();
			telnetClinet.connect(ip, port);
			is = telnetClinet.getInputStream();
			os = telnetClinet.getOutputStream();
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取远程计算机返回的信息
	 * */
	public String readTelnetMsg()
	{
		try 
		{
			int len = 0;
			byte [] b = new byte[1024];
			do
			{
				len = is.read(b);
				if(len>=0)
					return new String(b,0,len);
			}
			while(len>=0);
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 向远端计算机发送指令消息
	 * @param msg 需要传送的指令
	 * **/
	public void sendTelnetMsg(String msg)
	{
		byte [] b = msg.getBytes();
		try 
		{
			os.write(b, 0, b.length);
			os.flush();
		} 
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	
	/**
	 * 查找远端计算机返回的指令中是否包含想要指令
	 * 一直查找,直到包含,返回true
	 * */
	public boolean findStr(String str)
	{
		for(;;)
		{
			String msg = readTelnetMsg();
			if(msg.indexOf(str)!=-1)
				return true;
		}
	}
	
	/**
	 * 关闭连接,关闭IO
	 * */
	public void close()
	{
		try 
		{
			is.close();
			os.close();
			telnetClinet.disconnect();
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		}
	}
	
	/**
	 * 开始测试,连接远程计算机后,发送一个shutdown关机指令
	 * */
	public static void main(String[] args) throws Exception
	{
		TelnetTest test = new TelnetTest();
		test.connection("127.0.0.1", 23);//登录本机,23端口
		if(test.findStr("login"))//如果远程计算机返回login字符
			test.sendTelnetMsg("zhangqiang\n");//传输用户名,改写你的用户名,该用户名属于TelnetClients组
		if(test.findStr("password"))//如果远程计算机返回password
			test.sendTelnetMsg("96395024\n");//传输用户密码,改写你的密码
		if(test.findStr(">"))//如果远程计算机返回>字符
			test.sendTelnetMsg("shutdown /s /t 30\n");//发送关机指令
		if(test.findStr(">"))//如果远程计算机返回>字符,代表刚才指令发送成功
			test.close();//断开远程计算机连接
	}

}



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值