Java调用Telnet(windows版和Linux版)
来源:互联网 发布:阿里云控制台中文乱码 编辑:程序博客网 时间:2024/06/05 08:03
Telnet可以跨平台调用命令, 在服务器是不同系统时候非常好用. 但是在telnet服务器是linux或者windows时候, 客户端java代码略有不同,现在列出来:
服务器为Windows版本时
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); } }
服务器为Linux时
/** * commons-net-2.0.jar是工程依赖包 */ import java.io.InputStream; import java.io.PrintStream; import org.apache.commons.net.telnet.TelnetClient; public class NetTelnet { private TelnetClient telnet = new TelnetClient(); private InputStream in; private PrintStream out; private char prompt = '$'; // 普通用户结束 public NetTelnet(String ip, int port, String user, String password) { try { telnet.connect(ip, port); in = telnet.getInputStream(); out = new PrintStream(telnet.getOutputStream()); // 根据root用户设置结束符 this.prompt = user.equals("root") ? '#' : '$'; login(user, password); } catch (Exception e) { e.printStackTrace(); } } /** * 登录 * * @param user * @param password */ public void login(String user, String password) { readUntil("login:"); write(user); readUntil("Password:"); write(password); readUntil(prompt + " "); } /** * 读取分析结果 * * @param pattern * @return */ public String readUntil(String pattern) { try { char lastChar = pattern.charAt(pattern.length() - 1); StringBuffer sb = new StringBuffer(); char ch = (char) in.read(); while (true) { sb.append(ch); if (ch == lastChar) { if (sb.toString().endsWith(pattern)) { return sb.toString(); } } ch = (char) in.read(); } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 写操作 * * @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 disconnect() { try { telnet.disconnect(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { try { System.out.println("启动Telnet..."); String ip = "192.168.0.11"; int port = 23; String user = "user"; String password = "111111"; NetTelnet telnet = new NetTelnet(ip, port, user, password); telnet.sendCommand("export LANG=en"); String r1 = telnet.sendCommand("cd /home/project/"); String r2 = telnet.sendCommand("pwd"); String r3 = telnet.sendCommand("sh a.sh"); System.out.println("显示结果"); System.out.println(r1); System.out.println(r2); System.out.println(r3); telnet.disconnect(); } catch (Exception e) { e.printStackTrace(); } } }
0 0
- Java调用Telnet(windows版和Linux版)
- Linux和windows的telnet登录服务
- Java调用Telnet示例
- Java调用Telnet示例
- java调用Telnet
- Windows和linux中telnet、ssh的配置
- Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本
- 在Linux下telnet Windows
- Telnet服务配置Linux+Windows
- linux下java调用shell和windows下java调用bat
- java telnet客户端 用于连接Windows的Telnet服务器
- linux开启ftp和telnet
- windows(win8)和linux(CentOS6)上的telnet的开启和使用
- Java实现telnet远程调用脚本
- windows与linux相互telnet/ssh
- Windows下通过Telnet连接Linux主机
- 在windows里telnet到linux
- Linux/windows下java调用lingo
- gcc #pragma pack c++模板template
- linker command faild with exit code
- Android系统移植与平台开发(一)- 初识HAL
- HDU 1252Hike on a Graph
- 如何将所有的进程运行在一个指定的CPU上
- Java调用Telnet(windows版和Linux版)
- find
- PAT乙级练习题B1054. 求平均值
- hdu_1280_前m大的数
- 微服务设计-思维导图笔记
- hdu-3314-并查集
- js打开app应用或进入下载页面
- MySQL 调优和使用必读
- HData——ETL 数据导入/导出工具