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已经几百年没有更新,用起来各种问题.后来 ...
随机推荐
- (六) 6.3 Neurons Networks Gradient Checking
BP算法很难调试,一般情况下会隐隐存在一些小问题,比如(off-by-one error),即只有部分层的权重得到训练,或者忘记计算bais unit,这虽然会得到一个正确的结果,但效果差于准确BP得 ...
- iOS 5.0 后UIViewController新增:willMoveToParentViewController和didMoveToParentViewCon
在iOS 5.0以前,我们在一个UIViewController中这样组织相关的UIView 在以前,一个UIViewController的View可能有很多小的子view.这些子view很多时候 ...
- c++ vector 释放内存
1.释放单个指针 关于Vector中存放指针的问题,在进行清空的时候比较安全的一种做法是: std::vector<ClassName *> ClassNameVec; ... ...
- socket 基础知识
PHP使用Berkley的socket库来创建它的连接.socket只不过是一个数据结构.你使用这个socket数据结构去开始一个客户端和服务器之间的会话.这个服务器是一直在监听准备产生一个新的会话. ...
- ios 页面传值4种方式(四) 之通过delegate(代理)
这是ios里最常用的设计模式了,简直贯穿了整个cocoa touch框架.废话不多说,直接上代码: 场景是: A--打开--B; B里输入数值,点击--返回--A; A里显示B输入的值; △在开始写之 ...
- 身份证上的X到底代表什么?
生活中,无论你是坐火车,还是办理各种手续,都需要用到身份证,它现在已经俨然成为我们生活的非常重要的一部分,但是关于身份证本身,你了解多少呢? 有人会说了,为什么我的身份证上写的有效时间是10年,而一些 ...
- XSS跨站及利用
(一)软件测试环境以及搭建 测试环境:本地 XAMPP 1.7.1 测试软件:PHP168整站v5.0 软件下载地址 http://down2.php168.com/v2008.rar PHP.ini ...
- Spring3.0.6定时任务
项目使用的Spring版本比较旧是3.0.6版本,由于需要进行定时任务,就决定使用Spring自带的scheduled task. 在网上找了很多文章,也查看了Spring3.0.6的官方文档,按照网 ...
- 使用Drush管理Drupal站点
Drush(Drush = Drupal + Shell)就是使用命令行命令来操作Drupal站点,它的命令格式与git类似,都是双字命令(drush + 实际的命令).既然是命令行命令,也就可以使用 ...
- LoadRunner学习记录--安装遇到的问题一
安装过程中的出现了此计算机上缺少vc2005_sp1_with_atl_fix_redist 需要到这个目录下lrunner\En\prerequisites\vc2005_sp1_redist\ 手 ...