当前位置: 首页 > 面试题库 >

寻找Java Telnet模拟器

邓鸿彩
2023-03-14
问题内容

我正在编写一个远程登录到服务器的后端程序,运行一些命令并保存这些命令的所有输出。就像Expect一样。

我想使用一个很好的支持并与JDK 6一起运行的开源解决方案。

到目前为止,我已经找到3个选项,希望对确定使用哪个(或更好的建议)有所帮助。

commons-net
–很好地支持,但是我很难获得一个简单的“登录并执行’ls’”命令。如果有人可以提供一个简单的示例(而不是它附带的需要用户输入的示例),我希望使用此库,我想走这条路线。

如果无法使用commons-net,则以下两个选项是:

JExpect –这不是很难使用,我需要什么,但是得到了很好的支持?我认为它可以与JDK 6一起使用吗?

Java
Telnet应用程序(jta26)–这易于使用,但我不确定它的用途如何。我在TelnetWrapper中看不到任何可以设置超时值的地方。我也不确定自从该站点的上一次更新是在2005年以来,是否一直在维护此代码。(http://www.javassh.org)

我知道这有点意见导向,希望SO是帮助我做出决定的好地方,这样我就不会再走一条路,以后再也不是我要找的东西。

谢谢。


问题答案:

在这里找到了我想要的东西:http : //twit88.com/blog/2007/12/22/java-writing-an-
automated-telnet-client/

您将需要修改提示变量。

代码副本:

import org.apache.commons.net.telnet.TelnetClient;

import java.io.InputStream;
import java.io.PrintStream;

public class AutomatedTelnetClient {
    private TelnetClient telnet = new TelnetClient();
    private InputStream in;
    private PrintStream out;
    private String prompt = "%";

    public AutomatedTelnetClient(String server, String user, String password) {
        try {
            // Connect to the specified server
            telnet.connect(server, 23);

            // Get input and output stream references
            in = telnet.getInputStream();
            out = new PrintStream(telnet.getOutputStream());

            // Log the user on
            readUntil("login: ");
            write(user);
            readUntil("Password: ");
            write(password);

            // Advance to a prompt
            readUntil(prompt + " ");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void su(String password) {
        try {
            write("su");
            readUntil("Password: ");
            write(password);
            prompt = "#";
            readUntil(prompt + " ");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String readUntil(String pattern) {
        try {
            char lastChar = pattern.charAt(pattern.length() - 1);
            StringBuffer sb = new StringBuffer();
            boolean found = false;
            char ch = (char) in.read();
            while (true) {
                System.out.print(ch);
                sb.append(ch);
                if (ch == lastChar) {
                    if (sb.toString().endsWith(pattern)) {
                        return sb.toString();
                    }
                }
                ch = (char) in.read();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void write(String value) {
        try {
            out.println(value);
            out.flush();
            System.out.println(value);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    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) {
        try {
            AutomatedTelnetClient telnet = new AutomatedTelnetClient(
                    "myserver", "userId", "Password");
            System.out.println("Got Connection...");
            telnet.sendCommand("ps -ef ");
            System.out.println("run command");
            telnet.sendCommand("ls ");
            System.out.println("run command 2");
            telnet.disconnect();
            System.out.println("DONE");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


 类似资料:
  • 可能重复: 查找字符串中最长的重复序列 我正在解决一个问题,我需要找到重复最多的模式。 为了简单和方便,请考虑这个字符串: 重复次数最多的序列(例如,最初考虑字符串长度大于3个字符)是“Lorem Ipsum”。“Lorem”和“Ipsum”当然也重复相同的次数,但如果它们重复相同的次数,则较长的字符串优先于较短的字符串。 什么样的算法可以有效地找到这种模式,最好是在Python中?

  • 问题内容: 假设我在一行中有一些随机的文本块。像这样 但是无论出于何种原因(包含元素的宽度设置,使用文本缩放等),在查看器的屏幕上它都显示为两行或更多行。 要么 有没有办法通过JavaScript找出发生换行的地方? 并返回而不管文本如何显示。 问题答案: 这就是我最终使用的(随意批评和复制以作恶用)。 首先,当编辑来自用户时,将其拆分为。 替换换行的原因是,编辑文本框中填充了,它会忽略标签,但出

  • Appium 支持 WebDriver 定位策略的子集: 通过 "class" 查找 (例如, UI 组件的类型) 通过 "xpath" 查找 (例如, 一个元素的路径以抽象的方式去表达,具有一定的约束) 你可以查看关于以上的列表,选择器策略 (English)。 Appium 还额外支持部分 Mobile JSON Wire Protocol 的定位策略。 -ios predicate stri

  • 我有一个问题时运行命令"npm安装"。我想安装大口和鲍尔模块,但当我运行"npm安装"或"npm安装鲍尔"我得到了一个错误VS2013.我为什么会有这个错误?如何解决这个问题?以下是我安装的指定版本: 节点v10.15 npm v6.10.3 python v2.7 VSCODE v1.37.1(用户设置) 我已经添加代理配置: npm配置设置https代理超文本传输协议://xxxxx npm配

  • 寻找完全数。 思路说明 所谓完全数,从维基百科的完全数词条中得到: 完全数,又称完美数或完备数,是一些特殊的自然数:它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身,完全数不可能是楔形数。 例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6,恰好等于本身。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,

  • 我正在通过Nightwatch和Appium运行一些测试,我无法使用iOS模拟器成功实现滚动操作。我的测试设置为能够在Chrome、Safari、火狐浏览器或使用Safari的iOS模拟器上运行。该应用程序是使用React构建的,我使用的是Javascript。一切都运行平稳,直到我必须滚动到屏幕上的特定元素。 当使用web浏览器时,我所需要做的就是在特定元素上发送一个.click()方法,该方法