首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSch -如何使用PortForwarding L从远程服务器捕获流?

JSch -如何使用PortForwarding L从远程服务器捕获流?
EN

Stack Overflow用户
提问于 2018-07-28 07:55:59
回答 2查看 390关注 0票数 0

我尝试使用InputStream和Buffer[],还有BufferedReader和PipedInputStream。对于所有情况,我都得到了null:

代码语言:javascript
复制
        sessionB = jSch.getSession(username, "localhost", forwardedPort);
        sessionB.connect();

          if(sessionB.isConnected()) {
             System.out.println("Connected host B!");

             channel = (ChannelExec) sessionB.openChannel("exec");   

             br = new BufferedReader(new 
             InputStreamReader(channel.getInputStream())); 
             ((ChannelExec)channel).setCommand("command");
             ((ChannelExec)channel).setErrStream(System.err);

             channel.connect();

             if(channel.isConnected()) {

                System.out.println("Channel is connected!");
            }

             String line;

                    while((line = br.readLine()) != null) {
                    System.out.println(line);
                    }

和控制台输出:

连接的主机A!连接的主机B!通道已连接!

问题:我没有打印任何东西(System.out.println(line);)

有一种方法可以通过端口转发从exec通道获取流吗?谢谢你的帮忙

EN

回答 2

Stack Overflow用户

发布于 2018-07-31 20:29:04

get/setInputStream和get/setOutputStream只关心命令的标准输入/输出,与端口转发无关。端口转发是通过两个函数setPortForwardingL和setPortForwardingR完成的。

您的代码中应该包含类似的内容。

代码语言:javascript
复制
int assinged_port=session.setPortForwardingL(lport, rhost, rport);

一如既往,关于JSCH的文档很少,但是有很多针对L forwardingR forwardingdetailed examples

端口转发是在会话中完成的,因此我不确定您是否也需要活动连接。但如果你这样做了,你应该考虑打开一个'shell‘连接,而不是'exec’。这样你就不必运行一个无用的命令来维护连接了。

PS:一些代码丢失了,所以很难对问题中给出的例子说一些确切的东西。

票数 1
EN

Stack Overflow用户

发布于 2018-07-31 23:21:37

谢谢你的帮助。我用管道解决了这个问题,我分享了我所做的:

代码语言:javascript
复制
  PipedInputStream en = new PipedInputStream();
  pin = new PipedOutputStream((PipedInputStream) en);
  BufferedReader br = new BufferedReader(new InputStreamReader((PipedInputStream) 
  channel.getInputStream()));

  channel.connect(5*1000);     


  String received=null;
  while((received=br.readLine())!=null) {
      System.out.println(received);
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51566847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档