2015-09-28 17 views
2

我正在創建一個程序,該程序創建一個到中間人服務器的反向SSH隧道,以便本地網絡中不能直接連接的計算機仍然可以從外部訪問本地網絡。我爲libssh庫選擇了這個選項,我在打開一個通道到本地主機以將傳入數據轉發到本地應用程序時遇到問題。打開SSH會話並請求將數據轉發到本地計算機似乎工作正常。但是,我無法打開一個通道到本地主機讀取和寫入本地應用程序的數據。我正在試圖打開連接到本地主機的方式:使用libssh打開本地主機的通道

ssh_channel localhost_channel = ssh_channel_new(my_ssh_session); 
rc = ssh_channel_open_forward(localhost_channel, "127.0.0.1", 5900, 
     "localhost", 5555); 
if (rc != SSH_OK) { 
    myLog << "Could not open channel to localhost"; 
    exit(-1); 
} 

我的程序沒有退出,所以設置了SSH_OK。日誌但是說,連接被拒絕。並且有一個工作的VNC服務器運行在5900端口上。我可以看到連接請求進入。所以我很確定問題來自與本地主機的連接。我真的很感激任何建議/提示。

我在Windows 10上使用libssh 0.7.2並使用msvc編譯。

乾杯

+0

您是否找到解決方案? –

+0

是的,但可能不是你正在尋找的那個。我們決定切換到這個應用程序的C#。 – larzz11

+0

很酷。 .Net中有這樣一個好的庫嗎? –

回答

0

對於反向端口轉發,使用ssh_channel_listen_forwardssh_channel_accept_forward和。

ssh_channel_open_forward用於直接端口轉發。

請參閱Doing reverse port forwarding with libssh

+0

好吧,但這不是我的問題的答案:如何創建一個通道localhost.the函數ssh_channel_listen_forward不重定向一旦收到,它就會到達任何地方。 – larzz11

+0

作爲下一步,您使用'ssh_channel_accept_forward'。我已鏈接的例子顯示瞭如何做到這一點。 –

+0

在發佈這個問題之前,我已經閱讀了大約100次的教程。這也不能回答我的問題。我相信我找到了答案。 LibSSH不能轉發所轉發信道接收到的數據。要實際轉發數據,必須使用套接字。 – larzz11