我的电脑是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
}
}
}
我在网上找了一部分代码,看是基本看懂了,但是运行了好像不行,据说这些代码不是用于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
}
}
}
解决方案 »
- 如何使double类型的数字原样输出?(这个问题不简单)
- Property.copyBean()方法和Property.cloneBean()方法,看不到深浅拷贝的效果
- Java 的语言结构的问题?
- 修改窗口显示内容
- 请问java中有读取整行的方法吗?
- 初学java,概念不清,请大家帮忙 J2ME,jdk,jbuilder,jBean,jsp,j2EE,EJB,jms这些概念的含义是什么
- 一个类实现的两个接口中的同名成员可以分别实现吗?
- 哪里能买到比较便宜的Java编程思想(喉结译的),请知者告之!
- 如何利用JAVA的输入流接从键盘上的float数据
- java中变量的赋值和使用有什么区别?
- 某大牛公司笔试系统设计题,店小二智能问答实现设计
- 关于序列化和反序列化的问题
只是在登陆时各种操作系统输入(判别字符串)有所不同你把 / 根据root用户设置结束符 那句代码注释 试一试
还有就是结束符prompt变量不一样