当前位置:编程学习 > JAVA >>

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用户设置结束符  那句代码注释 试一试   --------------------编程问答--------------------
引用 1 楼 kk_124 的回复:
代码机制没有问题:
只是在登陆时各种操作系统输入(判别字符串)有所不同

你把 / 根据root用户设置结束符  那句代码注释 试一试  


还有就是结束符prompt变量不一样
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,