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