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

我的电脑是A,并且在A上有虚拟机B,我想在A上用java的telnet访问B,然后执行cmd命令,再获取返回信息(例如用ipconfig获取B的ip地址,然后在A上返回)... 我的电脑是A,并且在A上有虚拟机B,我想在A上用java的telnet访问B,然后执行cmd命令,再获取返回信息(例如用ipconfig获取B的ip地址,然后在A上返回)。
我在网上找了一部分代码,看是基本看懂了,但是运行了好像不行:
http://zhidao.baidu.com/question/443882136.html
展开
 我来答
百度网友cf4e9424c
2013-10-14 · TA获得超过110个赞
知道答主
回答量:164
采纳率:0%
帮助的人:87.4万
展开全部

需要个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的用不了啊。
追答

代码太长没法贴了


诺堡森林
2013-10-13
知道答主
回答量:25
采纳率:0%
帮助的人:8.2万
展开全部
很多人安装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更为强大的远程调试工具。
到此希望你解决了问题。
追问
这步骤早执行过了,不是问题关键所在。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhongtyler
2013-10-12 · TA获得超过4408个赞
知道大有可为答主
回答量:4384
采纳率:79%
帮助的人:917万
展开全部
B要开通telnet服务,简单测试,你自己telnet 一下B,开有没有反应就可以了。

再有,cmd是windows命令,B是windows吗,如果是的话,只能支持很少的命令。
更多追问追答
追问
telnet到b是可以的,A和B都是windows。
追答
那段程序是假设B是linux的,如果是windows要自己修改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
码海重生

2013-10-12 · 200%精心编写的技术文档,助你进阶系统架构
码海重生
采纳数:45 获赞数:113

向TA提问 私信TA
展开全部
用公网ip试试
追问
不是ip的问题,我在dos下已经能实现了,现在我要用java实现。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式