gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:58:03 29 4
gpt4 key购买 nike

我尝试使用InputStream和Buffer[],还有BufferedReader,还有PipedInputStream。对于所有情况我都为空:

        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! channel 已连接!

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

有办法通过端口转发从 exec channel 获取该流吗?感谢您的帮助

最佳答案

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

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

int assinged_port=session.setPortForwardingL(lport, rhost, rport);

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

端口转发是在 session 上完成的,因此我不确定您是否还需要 Activity 连接。但如果这样做,您应该考虑打开“shell”连接而不是“exec”。这样您就不必仅仅为了维持连接而运行无用的命令。

PS:缺少一些代码,因此很难对问题中给出的示例进行准确的说明。

关于java - JSch - 如何使用 PortForwarding L 从远程服务器捕获流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51566847/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com