使用java实现telnet-client工具分享
发布时间:2023-10-18 10:56:59
telnet-client太费尽了,比ssh-client费尽的多,搞了一天,凑合能用,还得改。
org.apache.commons.net.telnet.TelnetClien --使用了apache的commons-net包,commons-net-3.0.1-bin.zip。
package org.sl.util;
import org.apache.commons.net.telnet.TelnetClient;
import java.io.*;
import java.nio.ByteBuffer;
public class TelnetUtil {
String charset = null;
byte[] buff = new byte[2048];
TelnetClient telnetClient = new TelnetClient();
BufferedReader telnetReader = null;
BufferedWriter telnetWirter = null;
InputStream telnetIn = null;
OutputStream telnetOut = null;
public TelnetUtil() {
telnetClient = new TelnetClient();
}
/**
* 连接至服务器
* @param ip
* @param port
* @throws UnsupportedEncodingException
* @throws IOException
*/
public void connect(String ip, int port) throws UnsupportedEncodingException,IOException {
telnetClient.connect(ip,port);
setIOStream();
}
/**
* 连接至服务器
* @param ip
* @throws UnsupportedEncodingException
* @throws IOException
*/
public void connect(String ip) throws UnsupportedEncodingException,IOException {
telnetClient.connect(ip);
setIOStream();
}
void setIOStream() throws UnsupportedEncodingException {
telnetIn = telnetClient.getInputStream();
telnetOut = telnetClient.getOutputStream();
if(null==charset){
telnetReader = new BufferedReader(new InputStreamReader(telnetIn));
telnetWirter = new BufferedWriter(new OutputStreamWriter(telnetOut));
}else{
telnetReader = new BufferedReader(new InputStreamReader(telnetIn, charset));
telnetWirter = new BufferedWriter(new OutputStreamWriter(telnetOut, charset));
}
}
/**
* 登录
* @param user
* @param passwd
* @return 是否登录成功.
* @throws IOException
*/
public boolean login(String user,String passwd) throws IOException {
String read = readString();
for(int i=0; ; i++){
if(-1==read.indexOf("login")){
read = readString();
}else{
break;
}
}
writeText(user);
read = readString();
for(int i=0; ; i++){
if(-1==read.indexOf("Password")){
read = readString();
}else{
break;
}
}
writeText(passwd);
for(;;){
read = readString();
//System.out.println("last:"+read);
if(-1!=read.indexOf("Last")){
return true;
}else if(-1!=read.indexOf("incorrect")){
return false;
}
}
}
/**
* 这是一个测试方法,随便写。
* @throws IOException
*/
public void show() throws IOException {
// System.out.println(readString());
// System.out.println(readString());
// ByteBuffer tmp = ByteBuffer.allocate(1024);
// byte[] buff = new byte[1024];
// while(telnetIn.available()>0){
// int readLen = readBytes(buff,0,1024);
// tmp.put(buff,0,readLen);
// }
// System.out.println(new String(tmp.array()));
System.out.println("1 "+readString());
System.out.println("2 "+readString());
System.out.println("3 "+readString());
writeText("root");
System.out.println("4 " + readString());
writeText("123456");
System.out.println("5 "+readString());
// System.out.println("6 "+readString());
// System.out.println("7 "+readString());
}
public int readBytes(byte[] buff, int offset, int len) throws IOException {
return telnetIn.read(buff,offset,len);
}
/**
* 读取字符串<br/>
* 相当于readByte()转为字符串
* @return
* @throws IOException
*/
public String readString() throws IOException {
int readLen = readBytes(this.buff, 0, this.buff.length);
if(0<readLen)
return new String(buff,0,readLen).trim();
else
return "";
}
/**
* 读取一行<br/>
* 如果服务器与客户端不是同一种操作系统,可能导致此方法计行失败。
* @return
* @throws IOException
*/
public String readLine() throws IOException {
String read = telnetReader.readLine();
return null==read?"":read.trim();
}
public void writeBytes(byte[] buff, int offset, int len) throws IOException {
telnetOut.write(buff,offset,len);
}
/**
* 向服务器写字符串
* @param text
* @throws IOException
*/
public void writeText(String text) throws IOException {
telnetWirter.write(text);
telnetWirter.write('\r');
telnetWirter.write('\n');
telnetWirter.flush();
}
/**
* 执行命令,并返回结果<br/>
* 相当于: <br>
* writeText(); <br/>
* return readString();
* @param cmd
* @return
* @throws IOException
*/
public String exec(String cmd) throws IOException {
writeText(cmd);
return readString();
}
String login1(String user,String passwd) throws IOException {
String read = null;
readString();
readString();
read = readString();
if(-1!=read.indexOf("login")){
writeText(user);
}
read = readString();
if(-1!=read.indexOf("Password")){
writeText(passwd);
}
read = readString();
read += readString();
return read;
// StringBuffer sb = new StringBuffer();
// while(null!= (read = readString())){
// sb.append(read);
// }
//
// return sb.toString();
}
/**
* 关闭
*/
public void close(){
try{
writeText("exit");
writeText("exit");
writeText("exit");
}catch(Exception ex){
}
try {
if(null!=telnetIn) telnetIn.close();
} catch (Exception e) {
}
try {
if(null!=telnetOut) telnetOut.close();
} catch (Exception e) {
}
try {
if(null!=telnetClient)telnetClient.disconnect();
} catch (Exception e) {
}
}
/**
* 设置telnet通信时的字符集<br/>
* 注:此字符集与服务器端字符集没有必然关系<br/>
* 此方法需在connect()前调用
* @param charset
*/
public void setCharset(String charset ){
this.charset = charset;
}
/**
* 重新设置buff大小,默认为2048字节.
* @param size
*/
public void setBufferSize(int size){
this.buff = new byte[size];
}
}
测试类
static void t4(){
TelnetUtil tu = new TelnetUtil();
try {
tu.connect("192.168.2.154");
System.out.println(tu.login("root", "123456"));
//tu.show();
//System.out.println(tu.readString());
//System.out.println(tu.exec("pwd"));
System.out.println(tu.exec("echo \"123456789\">1.txt"));
System.out.println(tu.exec("cat 1.txt"));
} catch (IOException e) {
e.printStackTrace();
}
tu.close();
}
static void t1(){
TelnetUtil tu = new TelnetUtil();
try {
tu.connect("192.168.2.154");
System.out.println(tu.login("sl1", "coffee8215"));
//tu.show();
//System.out.println(tu.readString());
System.out.println(tu.exec("pwd"));
} catch (IOException e) {
e.printStackTrace();
}
tu.close();
}


猜你喜欢
- 类加载所有类加载器,都是ClassLoader的子类。类加载器永远以.class运行的目录为准。读取classpath根目录下的文件有以下几
- 之前写轮播条或者指示器的时候都是UI图里面直接有,这样的效果并不好,给用户的体验比较差,所以闲暇之余自己写了个指示器,可以展现出一个优雅的效
- 一、简介当要将配置中心部署到生产环境中时,与服务注册中心一样,我们也希望它是一个高可用的应用。Spring Cloud Config实现服务
- Android EditText限制输入字符的方法总结最近项目要求限制密码输入的字符类型, 例如不能输入中文。 &nb
- 这篇文章主要介绍了Java开发工具IntelliJ IDEA安装图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 我们已经尝试去定义类。定义类,就是新建了一种类型(type)。有了类,我们接着构造相应类型的对象。更进一步,每个类型还应该有一个清晰的接口(
- 报错org.springframework.web.util.NestedServletException: Request process
- weibo.java @Override &n
- Java实现简单的类似QQ聊天工具,供大家参考,具体内容如下所使用到的知识点:java socket编程之TCP协议java Swing简单
- 简介这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问。后来还是决定写了主要是想把自己分析问题思路分享
- 本文实例讲述了java基于AES对称加密算法实现的加密与解密功能。分享给大家供大家参考,具体如下:package com.soufun.co
- 在很多其他框架中,比如Python的Flask、node.js的KOA,Controller要想能够响应前端的请求都需要我们主动去注册到应用
- 1.Action中的validate()方法Struts2提供了一个Validateable接口,这个接口中只存在validat
- Android 自动获取验证码的两种方式分别是BroadcastReceiver及ContentObserver,两种方式都需要进行注册、取
- jstack - Prints Java thread stack traces for a Java process, core file
- 在spring Boot中,有些代码是WEB功能,例如API等,但是有些逻辑是非WEB,启动时就要调用并持续运行的,该如何加载自己的非WEB
- public void ProcessRequest (HttpContext context) { &n
- 这篇文章主要介绍了Java List集合排序实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 1.下载安装OpenCVhttps://opencv.org/releases/选择合适的平台安装包下载,然后双击安装,也就是解压的过程。这
- 1.ReadWriteLock介绍为什么我们有了Lock,还要用ReadWriteLock呢。我们对共享资源加锁之后,所有的线程都将会等待。