Package

Source Code of PortForwarding

import java.io.File;
import java.io.IOException;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.LocalPortForwarder;

public class PortForwarding
{
  public static void sleepSomeTime(long milliSeconds)
  {
    try
    {
      Thread.sleep(milliSeconds);
    }
    catch (InterruptedException e)
    {
    }
  }

  public static void main(String[] args)
  {
    String hostname = "127.0.0.1";
    String username = "joe";

    File keyfile = new File("~/.ssh/id_rsa"); // or "~/.ssh/id_dsa"
    String keyfilePass = "joespass"; // will be ignored if not needed

    try
    {
      /* Create a connection instance */

      Connection conn = new Connection(hostname);

      /* Now connect */

      conn.connect();

      /* Authenticate */

      boolean isAuthenticated = conn.authenticateWithPublicKey(username, keyfile, keyfilePass);

      if (isAuthenticated == false)
        throw new IOException("Authentication failed.");

      /* ===== OK, now let's establish some local port forwardings ===== */
     
      /* Example Port Forwarding: -L 8080:www.ethz.ch:80 (OpenSSH notation)
       *
       * This works by allocating a socket to listen on 8080 on the local interface (127.0.0.1).
       * Whenever a connection is made to this port (127.0.0.1:8080), the connection is forwarded
       * over the secure channel, and a connection is made to www.ethz.ch:80 from the remote
       * machine (i.e., the ssh server).
       *
       * (the above text is based partially on the OpenSSH man page)
       */

      /* You can create as many of them as you want */
     
      LocalPortForwarder lpf1 = conn.createLocalPortForwarder(8080, "www.ethz.ch", 80);
     
      /* Now simply point your webbrowser to 127.0.0.1:8080 */
      /* (on the host where you execute this program)                         */

      /* ===== OK, now let's establish some remote port forwardings ===== */
     
      /* Example Port Forwarding: -R 127.0.0.1:8080:www.ganymed.ethz.ch:80 (OpenSSH notation)
       *
       * Specifies that the port 127.0.0.1:8080 on the remote server is to be forwarded to the
       * given host and port on the local side.  This works by allocating a socket to listen to port
       * 8080 on the remote side (the ssh server), and whenever a connection is made to this port, the
       * connection is forwarded over the secure channel, and a connection is made to
       * www.ganymed.ethz.ch:80 by the Ganymed SSH-2 library.
       *
       * (the above text is based partially on the OpenSSH man page)
       */

      /* You can create as many of them as you want */
     
      conn.requestRemotePortForwarding("127.0.0.1", 8080, "www.ganymed.ethz.ch", 80);

      /* Now, on the ssh server, if you connect to 127.0.0.1:8080, then the connection is forwarded
       * through the secure tunnel to the library, which in turn will forward the connection
       * to www.ganymed.ethz.ch:80. */

      /* Sleep a bit... (30 seconds) */
      sleepSomeTime(30000);

      /* Stop accepting remote connections that are being forwarded to www.ganymed.ethz.ch:80 */

      conn.cancelRemotePortForwarding(8080);

      /* Sleep a bit... (20 seconds) */
      sleepSomeTime(20000);

      /* Stop accepting connections on 127.0.0.1:8080 that are being forwarded to www.ethz.ch:80 */

      lpf1.close();
     
      /* Close the connection */

      conn.close();

    }
    catch (IOException e)
    {
      e.printStackTrace(System.err);
      System.exit(2);
    }
  }
}
TOP

Related Classes of PortForwarding

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.