java中telnet访问远程电脑,然后执行cmd命令,再获取返回值。
我的电脑是A,并且在A上有虚拟机B,我想在A上用java的telnet访问B,然后执行cmd命令,再获取返回信息(例如用ipconfig获取B的ip地址,然后在A上返回)。 a和b都是windows我在网上找了一部分代码,看是基本看懂了,但是运行了好像不行,据说这些代码不是用于windows的:
--------------------编程问答-------------------- 代码机制没有问题:
import org.apache.commons.net.telnet.*;
import java.io.InputStream;
import java.io.PrintStream;
public class TelnetTest
{
private TelnetClient telnet = new TelnetClient();
private InputStream in;
private PrintStream out;
private char prompt = '$';// 普通用户结束
public TelnetTest(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 {
TelnetTest she =new TelnetTest("192.168.1.2", 23, "Administrator", "abc");
System.out.println(she);
System.out.println(she.sendCommand("dspmq"));
she.disconnect();
}catch (Exception e) {
// TODO: handle exception
}
}
}
只是在登陆时各种操作系统输入(判别字符串)有所不同
你把 / 根据root用户设置结束符 那句代码注释 试一试 --------------------编程问答--------------------
还有就是结束符prompt变量不一样
补充:Java , Java SE