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);
} }
Java调用Telnet示例的更多相关文章
- java调用kettle_导入jar包(1)
版权声明:本文为博主原创文章,未经博主允许不得转载. Java调用Kettle执行任务或转换,需要使用Kettle中的jar,可以先导入lib目录中的几个基本的jar,如:kettle-core.ja ...
- windows文本转语音 通过java 调用python 生成exe可执行文件一条龙
我已记不清 我失败过多少次 ,找过多少资料 ,但是功夫不负有心人 ,还是成功了. 所有资料和需要的语音模块的资料以放置在文章末尾, 有些是引用别人的博客的部分内容, 原文是在有道云笔记,所以没有图,请 ...
- Java 调用http接口(基于OkHttp的Http工具类方法示例)
目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...
- Android使用JNI(从java调用本地函数)
当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...
- Android JNI之JAVA调用C/C++层
转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5929996.html 一.java调用本地函数的开发步骤: 1.编写本地方法的类(可以说是用来叙述本地方法的类 ...
- [译]Java Thread Sleep示例
Java Thread Sleep示例 java.lang.Thread sleep(long millis)方法被用来暂停当前线程的执行,暂停时间由方法参数指定,单位为毫秒.注意参数不能为负数,否则 ...
- java调用C++ DLL库方法
最近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是网页端要求使用Java后台,这就涉及到Java调用DLL的问题.经过查找,实现了一个简单的例子. 1.第一步,先在Java ...
- Java调用Python脚本
今天遇到Java调用一个Python脚本的问题,纠结了大半天,遇到各种问题.网上搜索的大部分都是用jython,但是我想要调用的python脚本里有import urllib,这个urllib也不是什 ...
- Java调用摄像头截图
使用webcam-capture替换JMF调用摄像头 最近有个需要通过java调用摄像头,并截图的需求,在网上找了下资料,大部分是用一个叫jmf的库,但是jmf已经几百年没有更新,用起来各种问题.后来 ...
随机推荐
- Shell 的source命令
source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令. 注:该命令通常用命令“.”来替代. 如:source .bash_rc 与 . ...
- jsonp调用实例
首先我们来定义接口的规范,就像这样:http://www.mydomain.com/jsonp/ticker?symbol=IBM&callback=showPricesymbol是请求条件, ...
- 嵌入式 H264参数语法文档: SPS、PPS、IDR以及NALU编码规律
// [h264编码出的NALU规律]// 第一帧 SPS[0 0 0 1 0x67] PPS[0 0 0 1 0x68] SEI[0 0 0 1 0x6] IDR[0 0 0 1 0x65]// p ...
- Optional优雅的使用null
在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null.因为,只有我们深入的了解了null的相关知识,我们才能更加深入体会领悟到Guava的Optional设计和使用上 ...
- loadrunner下检查点乱码情况处理
对于很多用过LR的人来说,乱码一直是很纠结的事情,尤其是对新手来说.网上给的解决方法是在录制的时候勾选UTF-8选项,但是似乎并没有解决. 对于用户名为中文或者检查点为中文的情况,我们又该如何去处理呢 ...
- [转]Linux中文件权限目录权限的意义及权限对文件目录的意义
转自:http://www.jb51.net/article/77458.htm linux中目录与文件权限的意义 一.文件权限的意义 r:可以读这个文件的具体内容: w:可以编辑这个文件的内容,包括 ...
- Android各个版本代号及其特性
- Android1.1 2008 年9月发布的Android第一版 - Android1.5 Cupcake (纸杯蛋糕) 2009年4月30日,官方1.5版本(Cupcake 纸杯蛋糕)的Andr ...
- js保留小数点后N位的方法介绍
js保留小数点后N位的方法介绍 利用toFixed函数 代码如下 复制代码 <script language="javascript"> document.write( ...
- IOS设备启动图像命名规范
- 将Tomcat注册为Windows服务
1.从官网http://tomcat.apache.org/下载Tomcat. 2.将Tomcat压缩文件解压到相应的路径下(例如E:\TomcatServer) 3.从bin目录下找到service ...