java 调用 telnet_Java调用Telnet示例

这个博客介绍了一个`TelnetOperator`类,用于使用Java通过Telnet协议进行远程登录和命令执行。类中提供了连接、登录、发送命令和读取响应的方法。示例代码展示了如何连接到一个目标主机并执行`ipconfig`命令。
摘要由CSDN通过智能技术生成

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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值