急,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实现。

相似回答