[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: Global Request for tcpip reverse forward
[Thread Prev] | [Thread Next]
- Subject: RE: Global Request for tcpip reverse forward
- From: Martín Fernández <fmartin91@xxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Thu, 29 Mar 2018 09:45:49 -0700
- To: "Meng Hourk Tan" <mtan@xxxxxxxxxx>, "libssh@xxxxxxxxxx" <libssh@xxxxxxxxxx>
Meng,
Thank you very much for your response!
Actually, I have tried that before. After sending the global response, calling `ssh_channel_open_reverse_forward`. Problem is that after calling the function, client and server get blocked. I’m sending a snippet of what I changed. Also, just for providing more information, this is the log from the server and client.
Server:
[2018/03/29 13:41:32.810991, 2] ssh_packet_global_request: Calling callback for SSH_MSG_GLOBAL_REQUEST tcpip-forward 1 0.0.0.0:2000
[2018/03/29 13:41:32.811025, 3] ssh_socket_unbuffered_write: Enabling POLLOUT for socket
[2018/03/29 13:41:32.811036, 3] packet_send2: packet: wrote [len=12,padding=10,comp=1,payload=1]
[2018/03/29 13:41:32.811077, 2] channel_open: Creating a channel 43 with 64000 window and 32768 max packet
[2018/03/29 13:41:32.811104, 3] packet_send2: packet: wrote [len=76,padding=9,comp=66,payload=66]
[2018/03/29 13:41:32.811114, 3] channel_open: Sent a SSH_MSG_CHANNEL_OPEN type forwarded-tcpip for channel 43
Client:
[2018/03/29 13:41:32.810891, 3] global_request: Sent a SSH_MSG_GLOBAL_REQUEST tcpip-forward
[2018/03/29 13:41:32.811106, 3] ssh_packet_socket_callback: packet: read type 81 [len=12,padding=10,comp=1,payload=1]
[2018/03/29 13:41:32.811121, 3] ssh_packet_process: Dispatching handler for packet type 81
[2018/03/29 13:41:32.811130, 3] ssh_request_success: Received SSH_REQUEST_SUCCESS
[2018/03/29 13:41:32.811139, 2] global_request: Global request tcpip-forward success
/**
* @brief Global request callback
*
* @param session
* @param message
* @param userdata
*/
static void handle_global_request (ssh_session session, ssh_message message, void *userdata) {
ssh_message_global_request_reply_success (message, 8080 );
ssh_channel channel = ssh_channel_new (session);
int result = ssh_channel_open_reverse_forward (channel, "localhost" , 8080 , "localhost" , 8080 );
printf ( "RESULT %d \n " , result);
}
Thanks before hand!
Martín
On Thu, Mar 29, 2018 at 7:22 AM Meng Hourk Tan < Meng Hourk Tan ( Meng Hourk Tan <mtan@xxxxxxxxxx> ) > wrote:
>
>
>
> Hi Martin,
>
>
>
>
>
>
>
>
>
> I think your code lacks one step on server side:
>
>
>
> After the Server handles the request using callback global_request_function
> and responds with ssh_message_global_request_reply_success,
>
>
>
> You need to create a new channel and call
> ssh_channel_open_reverse_forward() on this channel.
>
>
>
>
> Then the client will receive the opening request of the reverse port
> forwarding channel.
>
>
> Hope it helps,
>
> Regards,
>
>
>
>
>
>
>
>
> Meng
>
>
>
> *De :* Martín Fernández <fmartin91@xxxxxxxxx>
> *Envoyé :* lundi 26 mars 2018 08:20:23
> *À :* libssh@xxxxxxxxxx
> *Objet :* Global Request for tcpip reverse forward
>
>
> Hello!
>
>
> This is my first time writing in the mailing list, I’m really new to
> libssh.
>
>
> I’m trying to get a server and client implementation for reverse port
> forwarding.
>
>
> My understanding it that client requests the server for reverse port
> forwarding in a given port, server handles the petition and is responsible
> for managing the socket and redirecting data from socket to ssh channel.
> Client is responsible for reading ssh channel and sending data to the
> local server.
>
>
> I have successfully managed to get authentication between client and
> server work correctly.
>
>
> The part I’m probably missing something is on how to handle the global
> request from client and how to pull for data in the client.
>
>
> Basic pseudo code that I’m doing.
>
>
> - Client send global request to server using `ssh_channel_listen_forward`.
>
> - Server handles the request using callback global_request_function and
> responds with ssh_message_global_request_reply_success
> - Client calls ssh_channel_accept_forward to get a new channel
>
>
> My problem is that `ssh_channel_accept_forward` never returns. I’m not
> sure If I’m missing something on the server side to initiate the channel.
> I know that I then need to redirect data between socket and channel but
> first I think I need to get a valid channel for forwarding right ?
>
>
> My complete code can be found here:
> https://gist.github.com/bilby91/22d5cc5db0e6118f06d6d35051c32cc6
>
>
> Thanks before hand!
>
>
> Martín
>
| RE: Global Request for tcpip reverse forward | Meng Hourk Tan <mtan@xxxxxxxxxx> |
| RE: Global Request for tcpip reverse forward | Meng Hourk Tan <mtan@xxxxxxxxxx> |