diff options
author | Matt Johnston <matt@ucc.asn.au> | 2006-03-21 16:16:41 +0000 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2006-03-21 16:16:41 +0000 |
commit | cdbe853595d1ba06be4127d86c60a9bc2e9e3545 (patch) | |
tree | c69a24fd85c5048ca1e0e138858ad9de04ba2373 /cli-chansession.c | |
parent | 3f49fc5f2ca0ec4adb5cac081f502cbb86702efa (diff) |
A hack to make dbclient to tcp forwarding netcat style.
eg
./dbclient -i testkey -L 1234:remotehost:remoteport tunnelhost
will ssh to tunnelhost (using testkey, there's no way to ask for a password)
and then tcpfwd to remotehost:remoteport on stdin/stdout.
There's no way to give a cmdline password, so -i for a keyfile will have to do.
Yet another reason for agent forwarding.
The 1234 is a dummy var, I think it has to be a valid portnumber though.
--HG--
branch : dbclient-netcat-alike
extra : convert_revision : d1f69334581dc4c35f9ca16aa5355074c9dd315d
Diffstat (limited to 'cli-chansession.c')
-rw-r--r-- | cli-chansession.c | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/cli-chansession.c b/cli-chansession.c index 6d358b7..76dbb3c 100644 --- a/cli-chansession.c +++ b/cli-chansession.c @@ -367,14 +367,55 @@ static int cli_initchansess(struct Channel *channel) { void cli_send_chansess_request() { + unsigned int port = 0; + unsigned char* addr = NULL; + unsigned char* ipstring = "127.0.0.1"; + unsigned char* portstring = "22"; + + /* hack hack */ + static const struct ChanType cli_chan_tcphack = { + 0, /* sepfds */ + "direct-tcpip", + NULL, + NULL, + NULL, + cli_closechansess + }; + TRACE(("enter cli_send_chansess_request")) - if (send_msg_channel_open_init(STDIN_FILENO, &clichansess) + if (send_msg_channel_open_init(STDIN_FILENO, &cli_chan_tcphack) == DROPBEAR_FAILURE) { dropbear_exit("Couldn't open initial channel"); } - /* No special channel request data */ + if (cli_opts.localfwds == NULL) { + dropbear_exit("You need to give a \"-L ignored:host:port\" option with this hacked up dbclient."); + } + + addr = cli_opts.localfwds->connectaddr; + port = cli_opts.localfwds->connectport; + + buf_putstring(ses.writepayload, addr, strlen(addr)); + buf_putint(ses.writepayload, port); + + /* originator ip */ + buf_putstring(ses.writepayload, ipstring, strlen(ipstring)); + /* originator port */ + buf_putint(ses.writepayload, atol(portstring)); + encrypt_packet(); TRACE(("leave cli_send_chansess_request")) } + +#if 0 + while (cli_opts.localfwds != NULL) { + ret = cli_localtcp(cli_opts.localfwds->listenport, + cli_opts.localfwds->connectaddr, + cli_opts.localfwds->connectport); + if (ret == DROPBEAR_FAILURE) { + dropbear_log(LOG_WARNING, "Failed local port forward %d:%s:%d", + cli_opts.localfwds->listenport, + cli_opts.localfwds->connectaddr, + cli_opts.localfwds->connectport); +#endif |