Java 通过telnet协议 操作远程交换机

/**
 *@date 2015年2月4日 下午3:15:13
 *@author XUQIANG
 *@filename TelnetConnection.java
 *@package com.merit.monitor.device.parameter.sdk
 */
package com.merit.monitor.device.parameter.sdk;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.SocketException;

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

import com.merit.monitor.device.parameter.logs.ILog;
import com.merit.monitor.device.parameter.logs.LogImpl;

/**
 * @author XUQIANG
 *
 */
public class TelnetConnection {

	private static ILog log = new LogImpl();

	private TelnetClient telnet = null;

//	private String username = "";
	private String password = "";
	private String prompt = "#";

	private InputStream in;
	private PrintStream out;

	public TelnetConnection(String host, int port) {
		if(telnet == null) {
			telnet = new TelnetClient();
			try {
				telnet.connect(host, port);
				in = telnet.getInputStream();
				out = new PrintStream(telnet.getOutputStream());
			} catch (SocketException e) {
				log.logForException(TelnetConnection.class, e.getMessage());
			} catch (IOException e) {
				log.logForException(TelnetConnection.class, e.getMessage());
			}
		}
	}

	/**
	 * @return the prompt
	 */
	public String getPrompt() {
		return prompt;
	}

	/**
	 * @param prompt the prompt to set
	 */
	public void setPrompt(String prompt) {
		this.prompt = prompt;
	}

	/**
	 * 关闭打开的连接
	 * @param telnet
	 */
	public void close(TelnetClient telnet) {
		if(telnet != null) {
			try {
				telnet.disconnect();
			} catch (IOException e) {
				log.logForException(TelnetConnection.class, e.getMessage());
			}
		}

		if(this.telnet != null) {
			try {
				this.telnet.disconnect();
			} catch (IOException e) {
				log.logForException(TelnetConnection.class, e.getMessage());
			}
		}
	}

	/**
	 * 登录到远程机器中
	 */
	public void login(String username, String password, String prompt) {
		//处理命令行的提示字符
		if(prompt == null || "".equals(prompt)) {
			if(this.prompt.equals("#"))
				prompt = ("root".equals(username)) ? "#" : "$";
		} else {
			this.prompt = prompt;
		}
		this.password = password;
		readUntil("Username:");
		write(username);
		readUntil("Password:");
		write(this.password);
		readUntil(this.prompt + "");
		// 其它交换机登录后如果有提示信息也需要添加
		if(this.prompt.indexOf("Quidway") != -1) 
			readUntil("login");
	}

	/** * 读取分析结果 * * @param pattern * @return */
	public String readUntil(String pattern) {
		StringBuffer sb = new StringBuffer();

		try {
			int len = 0;
			while((len = in.read()) != -1) {
				sb.append((char)len);
				if(sb.toString().endsWith(pattern)) {
					return sb.toString();
				}
			}
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		return "";
	}

	/** * 写操作 * * @param value */
	public void write(String value) {
		try {
			out.println(value);
			out.flush();
		} catch (Exception e) {
			log.logForException(TelnetConnection.class, e.getMessage());
		}
	}

	/** * 向目标发送命令字符串 * * @param command * @return */
	public String sendCommand(String command) {
		try {
			write(command);
			return readUntil(prompt + "");
		} catch (Exception e) {
			log.logForException(TelnetConnection.class, e.getMessage());
		}
		return "";
	}

	/** * 关闭连接 */
	public void disconnect() {
		try {
			telnet.disconnect();
		} catch (Exception e) {
			log.logForException(TelnetConnection.class, e.getMessage());
		}
	}
}

Junit

@Test
	public void testTelnet() {

		try {
			System.out.println("启动Telnet...");
			String ip = "191.168.*.*";
			int port = 23;
			String user = "admin";
			String password = "****";
			TelnetConnection telnet = new TelnetConnection(ip, port);
			telnet.setPrompt("<Quidway>");
			telnet.login(user, password, "");
			telnet.setPrompt("[Quidway]");
			String r1 = telnet.sendCommand("system-view");//display snmp-agent local-engineid
			telnet.setPrompt("[Quidway-Ethernet1/0/5]");
			String r2 = telnet.sendCommand("interface Ethernet1/0/5");
			String r3 = telnet.sendCommand("undo shutdown");
			System.out.println("显示结果");
			System.out.println(r1);
			System.out.println(r2);
			System.out.println(r3);

			System.out.println((r3.indexOf(telnet.getPrompt()) != -1) && r3.indexOf("^") == -1);
			telnet.disconnect();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
时间: 2024-07-28 21:10:47

Java 通过telnet协议 操作远程交换机的相关文章

Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar)

 该工具Jar包可在:http://download.csdn.net/detail/shenjianox/7769783及文档下载地址 ganymed-ssh2简介: Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包.在使用它的过程中非常容易,只需要指定合法的用户名口令, 或者授权认证文件,就可以创建到远程Linux主机的连接,在建立起来的会话中调用该Linux主机上的脚本文件,执行相关操作. 使用方法: 将 ganymed-ssh2-build210.

【Telnet】使用Telnet协议连接到远程Shell执行脚本

介绍 本文介绍如何通过Telnet协议连接到远程Shell,执行脚本,并获取执行结果: 相关文章: <[Jsch]使用SSH协议连接到远程Shell执行脚本>http://www.cnblogs.com/ssslinppp/p/6244653.html 其他示例: http://commons.apache.org/proper/commons-net/examples/telnet/TelnetClientExample.java http://www.programcreek.com/ja

[原]基于Telnet协议的Jenkins远程部署

最近奉命研究Jenkins的自动远程部署,刚开始进行还算顺利.但是,紧接着问题就来了,我们要部署的目标机器是Telnet协议的.而接触过jenkins的都知道,所有的插件里面只有用于本地部署的和基于SSH协议远程部署的,并没有一个是基于Telnet协议的.那么这该怎么解决呢? 当然,你也可以为你的目标机器安装SSH服务. 我先说说解决的思路,然后再附上具体的步骤和shell脚本. 思路:将jenkins安装在linux系统上 --->  SVN check out 部署的项目  --->  m

SSH协议 和 Telnet协议远程登录

Telnet Telnet是什么协议? Telnet服务器软件是我们最常用的远程登录服务器软件,是一种典型的客户机/服务器模型的服务,它应用Telnet协议来工作.那么,什么是Telnet协议?它都具备哪些特点呢? Telnet是位于OSI模型的第7层---应用层上的一种协议,是一个通过创建虚拟终端提供连接到远程主机终端仿 真的TCP/IP协议.就是说他是一种基于TCP的应用层协议.这一协议需要通过用户名和口令进行认证,是Internet远程登陆服务的标准协议.应用 Telnet协议能够把本地用

关于telnet协议的研究以及用java进行封装实现自己的telnet客户端(转)

最近在做一个远程控制的模块,其中用到了telnet协议,开始用的是apache-net包的telnetclient,但发现问题不少,比较慢,还有就是判断是否read完毕的问题.后来经过讨论打算实现自己的telnet,于是网址打罗了一番,找了一个,但是bug也不少,就开始封装.具体的telnet我已经发过2篇文章了,这里再发布一个深化封装的telnet实现. 仅供参考,可以在windows和linux上运行. [java] view plaincopyprint? package baby.net

java操作远程共享目录

一.前言 根据客户反馈,在进行文件下载的时候,新增远程共享目录,下载对应的文件到远程共享目录,采用常用的IO操作模式,提示下载成功,但是客户去远程共享目录查看对应的下载文件,反馈说没有找到对应的文件.要求系统需要支持上传远程共享目录,为什么有一个这样的需求?由于下载的文件涉及到了支付文件,里面的金额不允许进行修改,如果放在本地路径有可能会不会出现人为的修改,一般涉及到钱的问题,客户都是比较谨慎的,刚好没有接触过操作远程共享目录的,就google了一下看有没有对应的操作说明,下面简单总结一下. 二

Java 实现 SSH 协议的客户端登录认证方式--转载

背景 在开篇之前,让我们先对 SSH 协议有个宏观的大致了解,这样更有利于我们对本文的加深了解.首先要提到的就是计算机网络协议,所谓计算机网络协议,简单的说就是定义了一套标准和规则,使得不同计算机之间能够进行正常的网络通信,不至于出现在一台机器上发出的指令到另一台机器上成了不可认的乱码,SSH 就是众多协议的其中之一.经典的七层 OSI 模型(Open System Interconnection Reference Model)出现后,大大地解决了网络互联的兼容性问题,它将网络划分成服务.接口

Telnet协议,SSH协议(安全外壳协议),SSL协议(安全套接层协议),HTTPS(Hypertext Transfer Protocol Secure)安全超文本传输协议

2.Telnet协议 Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力.在终端使用者的电脑上使用telnet程序(如putty),用它连接到服务器.终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样.可以在本地就能控制服务器.要开始一个telnet会话,必须输入用户名和密码来登录服务器.Telnet是常用的远程控制Web服务器的方法. 3.SS

java把dbf文件写入远程2003服务器

重要的事情说三遍,有木有,java把dbf文件写入远程2003服务器,第一遍,第二遍,第三遍-够了,王二,还有完没有,赶紧点 需求 今天早晨,王二(也就是我)接到一个需求: 把行情的dbf库写入到远程windows server2003上! 分析 之前,我就写过一篇Java操作DBF文件数据库,但怎么把dbf写入到远程服务器上,这好像需要点什么. 于是我就去问度娘啊,看看有没有什么封装好的jar包之类的,好拿来用用. 折腾了一会关键字,终于找到了一篇Java读写Windows共享文件夹,感谢博主