1

我正在使用 Jsch lib 访问我网络中的路由器,但在某些路由器中是登录横幅。所以我需要阅读输出,识别横幅,删除它并只获取我的命令的输出。我在执行模式下使用通道。我认为的一种解决方案是获取提示的最后一个字符,例如“>”或“#”,但在执行模式下,我只获得命令的输出。

4

1 回答 1

0

对不起,我迟到了几年,但我自己解决了这个问题。

如果您注意到,会话有一个方法 setUserInfo(myUserInfo);

UserInfo 是一个抽象类。shell 会话使用方法“showMessage(Str msg)”来显示横幅。

由于您使用的是 Exec 会话,因此 exec 会话仍然调用 showMessage(),所以我所做的是扩展 UserInfo 并添加我自己的 getMessage(),使用 showMessage(Str msg) 设置我的'String messageVar'。

MyUserInfo 是我扩展的一个 JSCH 示例中的一个类。这是我的用户信息:

    public static abstract class MyUserInfo
        implements UserInfo, UIKeyboardInteractive {


    public String getPassword() {
        return null;
    }

    public boolean promptYesNo(String str) {
        return false;
    }

    public String getPassphrase() {
        return null;
    }

    public boolean promptPassphrase(String message) {
        return false;
    }

    @Override
    public boolean promptPassword(String message) {
        return false;
    }

    @Override
    public void showMessage(String message) {

    }       


    public abstract String getMessage();

    public String[] promptKeyboardInteractive(String destination,
            String name,
            String instruction,
            String[] prompt,
            boolean[] echo) {
        return null;
    }
}

这是我的扩展。

    public class UI extends MyUserInfo{
    String message;

    @Override
    public void showMessage(String message) {
        this.message=message;
        super.showMessage(message); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public String getMessage() {
        return this.message;
    }
}

以下是你如何使用它:

session.setUserInfo(new UI());
    session.connect();

((UI)session.getUserInfo()).getMessage();

于 2015-04-29T15:23:01.260 回答