急,java中telnet访问远程电脑,然后执行cmd命令,再获取返回值。

我的电脑是A,并且在A上有虚拟机B,我想在A上用java的telnet访问B,然后执行cmd命令,再获取返回信息(例如用ipconfig获取B的ip地址,然后在A上返回)。
我在网上找了一部分代码,看是基本看懂了,但是运行了好像不行:
http://zhidao.baidu.com/question/443882136.html

需要个jar包:commons-net-3.3-bin.zip

下载地址:http://commons.apache.org/proper/commons-net/download_net.cgi


你找的代码我修改过了,复制直接使用。linux系统需要先开启telnet服务

//执行的命令
System.out.println(she.sendCommand("ll"));

这个输入linux 命令

import java.io.InputStream;
import java.io.PrintStream;

import .org.apache.commons.net.telnet.TelnetClient;

public class Shell {
private TelnetClient telnet = new TelnetClient();

private InputStream in;

private PrintStream out;

private char prompt = '$';// 普通用户结束

public Shell(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) {
// read()()Until("login:");
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();
System.out.print(ch);
}
} 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) {
// TelnetClient telnet = new TelnetClient();
try {
Shell she = new Shell("192.168.1.10", 23, "root", "123456");
System.out.println(she);
//执行的命令
System.out.println(she.sendCommand("ll"));
she.disconnect();

} catch (Exception e) {
// TODO: handle exception
}

}
}

追问

我要的是windows的代码。。。linux的用不了啊。

追答

代码太长没法贴了


追问

可以运行!但有乱码

后来我在最后的打印结果System.out.println(str)

;前面加了以下几句转换编码的


出中文了,但还有乱码

追答

乱码你就自己解决吧。

追问

知道问题所在了,除了上一步要进行编码转换之外还要在开头加个参数
把开头的private TelnetClient telnet = new TelnetClient();
改成private TelnetClient telnet = new TelnetClient("VT220");
幸苦你了,给你满意答案

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-13
很多人安装win7后,无法使用telnet命令了,提示“telnet不是内部或外部命令,也不是可运行的程序”。
首先你要要确认你的win7版本,如果是家庭版,或高级家庭版,这个命令不能使用,只有win7旗舰版才有telnet命令。
如果你已经是win7旗舰版,请按照下面的步骤开启telnet命令:
1、打开控制面板,打开程序和功能;
2、点击左边的“打开或关闭Windows功能”
3、找到telnet客户端,勾选,如果你想别人telnet到你的机器,你就需要把telnet服务器端勾选,如果你想两个都要——既想通过本机telnet到别的机器,也想在别的机器上telnet到本机器,那么就勾选两个选项吧。
4、安装完成后,Telnet服务默认情况下是禁用的。右键我的电脑,点击“管理”,找到“服务”,找到Telnet服务,设置其启动方式为“手动”(更安全,只在需要的时候才启用),或点击“开始”→“运行”,输入servcies.msc打开服务管理器。最后“启动”该服务“确定”退出即可。
特别说明:部分被优化过的win7旗舰版无法安装telnet服务,或者这个所谓的旗舰版其实只是冒牌的。
5、如果你在win7上无法成功安装telnet客户端,建议你使用telnet的替代工具,推荐你是用 Xshell ,比telnet更为强大的远程调试工具。
到此希望你解决了问题。追问

这步骤早执行过了,不是问题关键所在。

第2个回答  2013-10-12
B要开通telnet服务,简单测试,你自己telnet 一下B,开有没有反应就可以了。

再有,cmd是windows命令,B是windows吗,如果是的话,只能支持很少的命令。追问

telnet到b是可以的,A和B都是windows。

追答

那段程序是假设B是linux的,如果是windows要自己修改。

追问

B是windows的话该怎么改?我再追加分数。

追答

登录方式,提示符都需要修改。

追问

你直接上代码吧。。。。我真不懂怎么改。

第3个回答  2013-10-12
用公网ip试试追问

不是ip的问题,我在dos下已经能实现了,现在我要用java实现。

急,java中telnet访问远程电脑,然后执行cmd命令,再获取返回值。
\/\/执行的命令System.out.println(she.sendCommand("ll"));这个输入linux 命令 import java.io.InputStream;import java.io.PrintStream;import org.apache.commons.net.telnet.TelnetClient;public class Shell {private TelnetClient telnet = new TelnetClient();private InputStream in;private PrintStream...

java中telnet到远程服务器,然后执行cmd命令,求代码,谢谢了
package place.in.javaeye;import java.io.InputStream;import java.io.PrintStream;import org.apache.commons.net.telnet.TelnetClient;public class Shell { private TelnetClient telnet = new TelnetClient();private InputStream in;private PrintStream out;private char prompt = '$';\/\/ 普通用户结...

Java Linux远程调用win执行UI
java通过winrm4j远程连接win执行命令在Linux \/UNIX\/WINDOWS系统中,一般通过远程连接的方式在远端执行脚本命令或者其他,是通过SSH或者Telnet。笔者之前写过几遍运用JAVA使用SSH或者TELNET连接操作系统执行命令的博客。但这些协议之间存在的差别的。在LINUX、UNIX系统中一般通过SSH协议来登录、执行命令;而在Window...

telnet终极问题,服务器,客户端都已开启,服务也已启动,但CMD就是显示不...
去别人电脑上拷贝一个 telnet.exe 到系统目录 路径是 c:\\windws\\system32\\telnet.exe C:\\WINDOWS\\system32>dir telnet.exe 驱动器 C 中的卷是 SYS 卷的序列号是 F45C-1D8A C:\\WINDOWS\\system32 的目录 2009-06-15 19:27 85,504 telnet.exe 1 个文件 85,504 字节 0 个目录 14...

我的电脑被别人远程操作
不要说不会啊,就是单击开始按钮——>运行.输入 "convert c: \/fs:ntfs ",可以把C盘转换成NTFS格式,不过要重启才能转换哦,其它盘就把C:改成相应的盘符就行了. 2、在控制面板中打开"用户帐号",将Administrator修改密码,尽量复杂些,不一定要记得.再创建一个计算机管理员用户和受限用户,管理员用户一定要密码,且...

跪求cmd黑客攻击指令和cmd电脑命令!悬赏大大滴有
用Copy命令把ntlm.exe上传到主机上(ntlm.exe也是在《流光》的Tools目录中)。8. C:\\WINNT\\system32>ntlm 输入ntlm启动(这里的C:\\WINNT\\system32>指的是对方计算机,运行ntlm其实是让这个程序在对方计算机上运行)。当出现"DONE"的时候,就说明已经启动正常。然后使用"net start telnet"来开启Telnet...

dos命令怎样进入别人电脑?
1、在电脑桌面上,点击开始,点击运行。2、输入cmd,点击确定,那么就进入到cmd了。3、或者点击开始,输入cmd。4、点击搜索到cmd,那么就可以进入到了的。5、点击计算机,点击C盘。6、搜索cmd.exe,点击搜索到软件,那么就可以进入了的。

计算机cmd命令如何使用?
cmmgr32.exe 连接管理器 cmmon32.exe 连接管理器监视 comclust.exe 集群 comp.exe 比较两个文件和文件集的内容 conf 启动netmeeting聊天工具 control userpasswords2 XP密码管理. compmgmt.msc 计算机管理 开始,运行,输入CMD\\输入net config workstation计算机名 \\完整的计算机名\\用户名 工作站处于活动状态(即网络...

开始-运行中常用的命令是哪些?都是什么作用?
cmmgr32.exe 连接管理器 cmmon32.exe 连接管理器监视 cmstp.exe 连接管理器配置文件安装程序 comclust.exe 集群 comp.exe 比较两个文件和文件集的内容 conf 启动netmeeting聊天工具 control userpasswords2 XP密码管理. compmgmt.msc 计算机管理 cprofile.exe 转换显示模式 (XP不可用) 开始,运行,输入CMD\\输入net ...

在电脑的运行命令中输入CMD是干什么用的?
cmdl32.exe 自动下载连接管理 cmmgr32.exe 连接管理器 cmmon32.exe 连接管理器监视 cmstp.exe 连接管理器配置文件安装程序 comclust.exe 集群 comp.exe 比较两个文件和文件集的内容 conf 启动netmeeting聊天工具 control userpasswords2 XP密码管理. compmgmt.msc 计算机管理 cprofile.exe 转换显示模式 (XP不可用)...

相似回答