java通过telnet远程至windows机器执行dos命令
准备工作,远程windows机器中开启telnet服务,将远程登录用户添加至telnetClients用户组
核心代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import org.apache.commons.net.telnet.TelnetClient;
import org.testng.annotations.Test;
/**
*
* @author zhuwei
*
*/
public class TelnetUtils {
/**
* 结束标识字符串,Windows中是>,Linux中是#
*/
private String prompt = ">";
/**
* 结束标识字符
*/
private char promptChar = '>';
/**
* TelnetClient对象
*/
private TelnetClient telnet;
/**
* InputStream 输入流,接收返回信息
*/
private InputStream in;
/**
* PrintStream 向服务器写入 命令
*/
private PrintStream out;
/**
* 构造函数
* @param termtype
* @param prompt
*/
public TelnetUtils(String termtype,String prompt){
this.telnet = new TelnetClient(termtype);
setPrompt(prompt);
}
/**
* 构造函数
* @param termtype
*/
public TelnetUtils(String termtype){
this.telnet = new TelnetClient(termtype);
}
/**
* 构造函数
*/
public TelnetUtils(){
telnet = new TelnetClient();
}
/**
* 登录到目标主机
* @param ip 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 String
*/
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();
}
}
/**
*
*功能说明:发送命令,返回执行结果
*
*输入参数:command telnet命令
*
*输出参数:String 命令执行结果
* @throws UnsupportedEncodingException
*
*
*/
public String sendCommand(String command) throws UnsupportedEncodingException {
try {
write(command);
//return readUntil(prompt);
} catch (Exception e) {
e.printStackTrace();
}
//将返回结果转码为gbk,否则会乱码
String serverResult = new String(readUntil(prompt).getBytes("ISO-8859-1"),"GBK") ;
return serverResult;
}
/**
*功能说明:关闭telnet连接
*
*输入参数:
*
*输出参数:
*/
public void distinct(){
try {
if(telnet!=null&&!telnet.isConnected())
telnet.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*功能说明:设置结束标识符
*
*输入参数:prompt 结束标识符
*
*输出参数:
*
*/
public void setPrompt(String prompt) {
if(prompt!=null){
this.prompt = prompt;
this.promptChar = prompt.charAt(prompt.length()-1);
}
}
/**
*功能说明:测试函数
*
*输入参数:args
*
*输出参数:
* @throws UnsupportedEncodingException
*/
public String excuteWinCmd(String remoteHost,String port,String userName,String passWord,String winCmd) throws UnsupportedEncodingException{
login(remoteHost, Integer.valueOf(port), userName, passWord);
String serverResult = sendCommand(winCmd);
distinct();
return serverResult;
}
@Test
public void test1() throws UnsupportedEncodingException{
//Windows,用VT220,否则会乱码
TelnetUtils telnetUtils = new TelnetUtils("VT220",">");
String result = telnetUtils.excuteWinCmd("172.19.21.216", "23", "xxxx", "xxxx","taskkill /f /t /IM chrome.exe");
System.out.println(result);
}
}
java通过telnet远程至windows机器执行dos命令的更多相关文章
- java应用程序远程登录linux并执行其命令(ssh jar包)
http://www.ganymed.ethz.ch/ssh2/在这个网址下载一个调用ssh和scp命令的jar包. 然后,就可以写程序了.将上面的jar包导入MyEclipse,下面是一个类的实例代 ...
- Ubuntu16.04下使用rdesktop命令远程连接windows机器
前段时间在本机安装了ubuntu16.04桌面版,后来需要远程连接一台win10系统的跳转机,下面介绍使用rdesktop命令远程连接windows机器的操作记录:1)首先安装rdesktop工具 k ...
- 【转载】DOS 系统和 Windows 系统有什么关系?为什么windows系统下可以执行dos命令?
作者:bombless 因为不同的系统都叫 Windows ,这些系统在界面上也有一定连续性并且因此可能造成误解,所以有必要稍微梳理一下几个不同的 Windows 系统.首先是 DOS 上的一个图形界 ...
- c#执行Dos命令
一个执行Dos命令的窗口程序,与各位分享. 效果图: 具体实现在代码中有详细的注释,请看代码. 实现执行CMD命令的核心代码(Cmd.cs): [csharp] using S ...
- 一个执行Dos命令的窗口程序,与各位分享。
一个执行Dos命令的窗口程序,与各位分享. 效果图: 具体实现在代码中有详细的注释,请看代码. 实现执行CMD命令的核心代码(Cmd.cs): [csharp] using S ...
- Windows:使用Dos命令管理服务(Services)
Windows 服务器系列: Windows:查看IP地址,IP地址对应的机器名,占用的端口,以及占用该端口的应用程 Windows:使用Dos命令管理服务(Services) Windows:任务调 ...
- C#执行外部程序之执行DOS命令和批处理
在项目开发中,有时候要处理一些文件,比如视频格式的转换,如果用C开发一套算法,再用C#调用,未免得不偿失!有时候调用现有的程序反而更加方便.今天就来说一下C#中如何调用外部程序,执行一些特殊任务. 这 ...
- C# 执行DOS命令和批处理
在项目开发中,有时候要处理一些文件,比如视频格式的转换,如果用C开发一套算法,再用C#调用,未免得不偿失!有时候调用现有的程序反而更加方便.今天就来说一下C#中如何调用外部程序,执行一些特殊任务. 这 ...
- appium自动化测试框架——在python脚本中执行dos命令
一般我们运行dos命令,会有两种需求,一种是需要收集执行结果,如ip.device等:一种是不需要收集结果,如杀死或开启某个服务. 对应的在python中就要封装两种方法,来分别实现这两种需求. 1. ...
随机推荐
- java程序报错:Unable to open debugger port (127.0.0.1:63959): java.net.SocketException "socket closed",编译过来就是无法打开调试器端口,套接字已关闭
报错:Unable to open debugger port (127.0.0.1:63959): java.net.SocketException "socket closed" ...
- MySQL的索引优化,查询优化
MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. MySQL逻辑架构,来自:高性能MySQL My ...
- js手机点击图片放大
点击每个图片获取到对应的img的url链接,再把链接给一个空img以此来实现 最终效果:
- 使用openoffice转pdf,详细
期由于项目的需求,需要word文档转pdf在线预览,由于一直没有接触这块,所以花了将近四天时间才弄明白. 写这篇文章的主要目的是加深自己的记忆,同时方便以后在用. (最近有使用了这个功能,发现这篇文章 ...
- sql server newid() 的用法
sql newid()随机函数 从A表随机取2条记录,用SELECT TOP 10 * FROM ywle order by newid()order by 一般是根据某一字段排序,newid() ...
- MAC OS系统替换homebrew使用阿里云的镜像源
MAC OS系统替换homebrew使用阿里云的镜像源 2019-03-03 15:13:42 南通SEO 阅读数 2024更多 分类专栏: 解决方案 MAC OS系统替换homebrew使用阿里 ...
- Linux 文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别
文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别 (2014-03-16 17:54:32) 转载▼ 标签: linux 文件系统缓存 cache dirt ...
- 解决 ImportError: No module named 'pip._internal'问题
pip错误 ImportError: No module named 'pip_internal' 解决 ImportError: No module named 'pip._internal' 问 ...
- 数据结构实验之图论六:村村通公路【Prim算法】(SDUT 3362)
题解:选点,选最小权的边,更新点权.可以手动自行找一遍怎么找到这个最小的生成树,随便选一个点放入我们选的集合中,然后看和这个点相连的点中,与那个点相连的那条边权值是最小的,选择之后,把相连的这个点一起 ...
- pc页面自动缩放到手机端
今天做了个pc的页面,看了别人的网站在手机端能把pc端的网页刚好缩放到手机端,看着很舒服. 于是想把自己的页面也这样搞一下,刚开始,想到的是利用css3的缩放来做,想的是当屏幕尺寸改变时缩放整个页面, ...