`

TelnetUtil.java

阅读更多
package com.ailk.ess.webapp2.servermng.net;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

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

public class TelnetUtil {
	
	//telnet客户端对象VT220/VT52
	TelnetClient client = new TelnetClient("VT52");
	
	StringBuffer buffer = new StringBuffer();
	InputStream inputStream = null; // 输入流,接收服务端的返回信息
	OutputStream outputStream = null; // 输出流,向服务端写命令
	
	private static List<String> defaultPromt = new ArrayList<String>();
	private static List<String> user = new ArrayList<String>();
	private static List<String> pass = new ArrayList<String>();
	//默认端口
	public static int defaultport = 23;
	
	static {
		defaultPromt.add("#");
		defaultPromt.add(">");
		defaultPromt.add("%");
		user.add("ogin:");
		pass.add("assword:");
	}

	/**
	 * @param hostname
	 *            服务器IP地址
	 * @param port
	 *            telnet端口
	 * @param username
	 *            用户名
	 * @param password
	 *            密码
	 * @throws Exception
	 */
	public TelnetUtil(String hostname, int port, String username, String password) throws Exception {
		// 连接服务器
		conn(hostname, port);
		// 获得输入流对象
		this.inputStream = this.client.getInputStream();
		// 获得输出流对象
		this.outputStream = this.client.getOutputStream();
		
		login(username, password);
	}

	/**
	 * 关闭连接
	 * 
	 * @throws Exception
	 */
	public void close() throws Exception {
		this.client.disconnect();
	}

	/**
	 * 连接到服务器
	 * 
	 * @param hostname
	 *            服务器IP地址
	 * @param port
	 *            端口
	 * @throws Exception
	 */
	private void conn(String hostname, int port) throws Exception {
		this.client.connect(hostname, port);
	}

	/**
	 * 登录服务器
	 * 
	 * @param username
	 *            用户名
	 * @param password
	 *            密码
	 * @throws Exception
	 */
	private void login(String username, String password) throws Exception {
		sendCommand(username, user);
		List<String> temp = new ArrayList<String>();
		temp.add(":");
		String result = getResult(temp);

		if (!(result.trim().endsWith("word:"))) {
			throw new Exception("Invalid user:" + username);
		}
		temp.add("#");
		temp.add(">");
		temp.add("%");
		sendCommand(password, pass);
		result = getResult( temp );

		if ((result.trim().endsWith("word:"))
				|| (result.trim().endsWith("ogin:"))) {
			throw new Exception("Invalid username or password:" + username
					+ " " + password);
		}
	}

	public void sendCommand(String command) throws Exception {
		sendCommand(command, defaultPromt);
	}

	public String getResult() throws Exception {
		return getResult(defaultPromt);
	}

	/**
	 * 往服务器输入命令
	 * 
	 * @param command
	 *            命令指令
	 * @param wantedEndString
	 * @throws Exception
	 */
	public void sendCommand(String command, List<String> wantedEndString)
			throws Exception {
		waitForString(wantedEndString);
		this.buffer.delete(0, this.buffer.length());
		// 输出输入的命令值
		// System.out.println(command + "\n");
		this.outputStream.write((command + "\n").getBytes());
		this.outputStream.flush();
	}

	public String getResult(List<String> endString) throws Exception {
		waitForString(endString);
		return this.buffer.toString();
	}

	private void waitForString(List<String> wantedEndString) throws Exception {
		int aword = 0;
		boolean matchOne = false;
		while (!(matchOne)) {
			for (int i = 0; i < wantedEndString.size(); ++i) {
				String back = this.buffer.toString().trim();
				if ((back.endsWith((String)wantedEndString.get(i))) && (this.inputStream.available() == 0)){
					matchOne = true;
				}
			}
			if (matchOne) {
				return;
			}
			aword = this.inputStream.read();
			// System.out.print((char) aword);
			if (aword < 0) {
				throw new Exception("Connection disconnect...");
			}
			this.buffer.append((char) aword);
		}
	}

	public boolean isClosed() {
		return (!(this.client.isConnected()));
	}
}

分享到:
评论

相关推荐

    perl _telnet

    perl _telnet 的示例,里面讲了怎么去用Net::Telnet的方法去登录远程服务器及相关说明

    冒险岛群聊机器人 蠢猫(无视计算 星之力计算 世界组队表 占卜 怪物查询).zip

    无人机最强算法源码,易于部署和学习交流使用

    node-v8.14.1-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    HostelDataset(been personally processed)

    此数据集主要是一个跟酒店类型有关的数据集,源于kaggle网站上的Guatemalas_Travel数据集,因设计所需,本人对原来的数据集进行了必要的修改。

    3D相册.zip

    3D相册.zip

    中国统计NJ面板数据-(更新至2022年)平均每天能源消费量.xls

    数据来源:中国统计NJ-2023版

    3dmax空对象清除器下载

    3dmax空对象清除器,在场景中找到空对象,向你显示这些对象的列表,并允许你从场景中删除它们。

    node-v10.13.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    中国统计NJ面板数据-(更新至2022年)入境外国游客分组构成.xls

    数据来源:中国统计NJ-2023版

    数据要素资产化与数据资产入表路线框架总体规划方案.pptx

    数据要素资产化与数据资产入表路线框架总体规划方案.pptx

    用户手册 8100C/8200C/8300C系列无功补偿装置

    施耐德电气 8100C 8200C 8300C 用户手册

    毫无特色的 QQ 机器人.zip

    无人机最强算法源码,易于部署和学习交流使用

    员工培训方案gl.ppt

    员工培训方案gl.ppt

    infrared-remote-controller-master

    旅行商问题

    小米扫地机器人工程源码程序STM32103 freeRTOS设计源代码.zip

    小米扫地机器人工程源码程序STM32103 freeRTOS设计源代码,某米早起的扫地机器人的源码,使用的是STM32开发,freeRTOS系统,包含完整的工程源码,可以做为你的学习设计参考。 HARDWARE文件夹 硬件初始化源文件 application_Robot 机器人行为相关的文件 application_Share 机器人共享相关的文件(一般为算法) application_Motor 机器人电机应用相关文件 application_Key 机器人按键应用相关文件 application_Led 机器人LED应用相关文件 application_Led 机器人adc获取与处理应用相关文件 application_PowerChip 机器人电池管理芯片与充电应用相关文件 application_Bmi160 机器人BMI160 陀螺仪芯片 应用相关文件 application_Drop 机器人掉落传感器应用相关文件 application_UltraSonic 机器人超声波传感器应用相关文件 appl

    39黎秋菊.ipynb

    39黎秋菊.ipynb

    node-v11.14.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    域名注册查询的微信小程序页面源码

    模板描述:域名注册查询 微信小程序。域名注册查询的微信小程序页面源码是使用微信WEB开发者工具开发,亲测可直接运行。该程序从设计上满足了相关应用服务的设计要求,是一款非常值得学习简介的DEMO小程序源码。

    水下机器人无线充电上位机.zip

    无人机最强算法源码,易于部署和学习交流使用

Global site tag (gtag.js) - Google Analytics