コード例 #1
0
        /// <summary>
        /// Starts the ssh connection, and bridge the streams.
        /// </summary>
        private void StartTunnel()
        {
            try
            {
                _client = new SshClient(_config.host, _config.user, new PrivateKeyFile(new MemoryStream(Encoding.Default.GetBytes(PrivateKey))));
                _client.Connect();
                _client.KeepAliveInterval = new TimeSpan(0, 0, 5);

                if (!_client.IsConnected)
                {
                    throw new ServiceException("Can't start tunnel, try again.");
                }

                string connectHost = string.IsNullOrEmpty(this.LocalHost) ? "127.0.0.1" : this.LocalHost;

                _connectionPort                  = _client.AddForwardedPort <ForwardedPortRemote>((uint)_config.through_port, connectHost, (uint)LocalPort);
                _connectionPort.Exception       += new EventHandler <ExceptionEventArgs>(fw_Exception);
                _connectionPort.RequestReceived += new EventHandler <PortForwardEventArgs>(port_RequestReceived);
                _connectionPort.Start();
            }
            catch (Exception e)
            {
                throw new ServiceException(e.Message);
            }
        }
        private void SetUpData()
        {
            var random = new Random();

            _closingRegister   = new List <EventArgs>();
            _exceptionRegister = new List <ExceptionEventArgs>();
            _bindEndpoint      = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _remoteEndpoint    = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _bindSleepTime     = TimeSpan.FromMilliseconds(random.Next(100, 500));
            _remoteChannelNumberWhileClosing = (uint)random.Next(0, 1000);
            _remoteWindowSizeWhileClosing    = (uint)random.Next(0, int.MaxValue);
            _remotePacketSizeWhileClosing    = (uint)random.Next(0, int.MaxValue);
            _remoteChannelNumberStarted      = (uint)random.Next(0, 1000);
            _remoteWindowSizeStarted         = (uint)random.Next(0, int.MaxValue);
            _remotePacketSizeStarted         = (uint)random.Next(0, int.MaxValue);
            _originatorAddress    = random.Next().ToString(CultureInfo.InvariantCulture);
            _originatorPort       = (uint)random.Next(0, int.MaxValue);
            _channelBindStarted   = new ManualResetEvent(false);
            _channelBindCompleted = new ManualResetEvent(false);

            ForwardedPort          = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port);
            ForwardedPort.Closing += (sender, args) =>
            {
                _closingRegister.Add(args);
                _sessionMock.Raise(p => p.ChannelOpenReceived += null, new MessageEventArgs <ChannelOpenMessage>(new ChannelOpenMessage(_remoteChannelNumberWhileClosing, _remoteWindowSizeWhileClosing, _remotePacketSizeWhileClosing, new ForwardedTcpipChannelInfo(ForwardedPort.BoundHost, ForwardedPort.BoundPort, _originatorAddress, _originatorPort))));
            };
            ForwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
            ForwardedPort.Session    = _sessionMock.Object;
        }
コード例 #3
0
        public void Test_PortForwarding_Remote()
        {
            //  ******************************************************************
            //  ************* Tests are still in not finished ********************
            //  ******************************************************************

            using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
            {
                client.Connect();
                var port1 = new ForwardedPortRemote(8082, "www.renci.org", 80);
                client.AddForwardedPort(port1);
                port1.Exception += delegate(object sender, ExceptionEventArgs e)
                {
                    Assert.Fail(e.Exception.ToString());
                };
                port1.Start();
                var boundport = port1.BoundPort;

                System.Threading.Tasks.Parallel.For(0, 5,
                                                    //new ParallelOptions
                                                    //{
                                                    //    MaxDegreeOfParallelism = 1,
                                                    //},
                                                    (counter) =>
                {
                    var cmd    = client.CreateCommand(string.Format("wget -O- http://localhost:{0}", boundport));
                    var result = cmd.Execute();
                    var end    = DateTime.Now;
                    Debug.WriteLine(string.Format("Length: {0}", result.Length));
                }
                                                    );
                Thread.Sleep(1000 * 100);
                port1.Stop();
            }
        }
コード例 #4
0
 public void Cleanup()
 {
     if (_forwardedPort != null)
     {
         _forwardedPort.Dispose();
         _forwardedPort = null;
     }
 }
コード例 #5
0
 public void Cleanup()
 {
     if (ForwardedPort != null)
     {
         ForwardedPort.Dispose();
         ForwardedPort = null;
     }
 }
 public void Cleanup()
 {
     if (ForwardedPort != null)
     {
         ForwardedPort.Dispose();
         ForwardedPort = null;
     }
 }
 public void Cleanup()
 {
     if (_forwardedPort != null)
     {
         _forwardedPort.Dispose();
         _forwardedPort = null;
     }
 }
コード例 #8
0
 public void ForwardedPortRemoteConstructorTest1()
 {
     uint boundPort = 0; // TODO: Initialize to an appropriate value
     string host = string.Empty; // TODO: Initialize to an appropriate value
     uint port = 0; // TODO: Initialize to an appropriate value
     ForwardedPortRemote target = new ForwardedPortRemote(boundPort, host, port);
     Assert.Inconclusive("TODO: Implement code to verify target");
 }
コード例 #9
0
        public Tunel(string host, string user, string password, uint remotePort, uint localPort = 3389)
        {
            client = new SshClient(host, user, password);
            port   = new ForwardedPortRemote("127.0.0.1", remotePort, "127.0.0.1", localPort);

            client.Connect();
            client.AddForwardedPort(port);
            port.Start();
        }
コード例 #10
0
        [Ignore] // placeholder
        public void ForwardedPortRemoteConstructorTest1()
        {
            uint   boundPort           = 0;            // TODO: Initialize to an appropriate value
            string host                = string.Empty; // TODO: Initialize to an appropriate value
            uint   port                = 0;            // TODO: Initialize to an appropriate value
            ForwardedPortRemote target = new ForwardedPortRemote(boundPort, host, port);

            Assert.Inconclusive("TODO: Implement code to verify target");
        }
コード例 #11
0
 public void StopTest()
 {
     uint boundPort = 0; // TODO: Initialize to an appropriate value
     string host = string.Empty; // TODO: Initialize to an appropriate value
     uint port = 0; // TODO: Initialize to an appropriate value
     ForwardedPortRemote target = new ForwardedPortRemote(boundPort, host, port); // TODO: Initialize to an appropriate value
     target.Stop();
     Assert.Inconclusive("A method that does not return a value cannot be verified.");
 }
コード例 #12
0
 public void Test_AddForwardedPort_Invalid_PortNumber()
 {
     using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
     {
         client.Connect();
         var port1 = new ForwardedPortRemote("localhost", IPEndPoint.MaxPort + 1, "www.renci.org", IPEndPoint.MaxPort + 1);
         client.AddForwardedPort(port1);
         client.Disconnect();
     }
 }
コード例 #13
0
 public void Test_AddForwardedPort_Remote_Hosts_Are_Empty()
 {
     using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
     {
         client.Connect();
         var port1 = new ForwardedPortRemote(string.Empty, 8080, string.Empty, 80);
         client.AddForwardedPort(port1);
         client.Disconnect();
     }
 }
コード例 #14
0
 public void Cleanup()
 {
     if (_forwardedPort != null)
     {
         _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object);
         _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(1));
         _forwardedPort.Dispose();
         _forwardedPort = null;
     }
 }
コード例 #15
0
        [Ignore] // placeholder
        public void StopTest()
        {
            uint   boundPort           = 0;                                              // TODO: Initialize to an appropriate value
            string host                = string.Empty;                                   // TODO: Initialize to an appropriate value
            uint   port                = 0;                                              // TODO: Initialize to an appropriate value
            ForwardedPortRemote target = new ForwardedPortRemote(boundPort, host, port); // TODO: Initialize to an appropriate value

            target.Stop();
            Assert.Inconclusive("A method that does not return a value cannot be verified.");
        }
 public void Cleanup()
 {
     if (_forwardedPort != null)
     {
         _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object);
         _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(1));
         _forwardedPort.Dispose();
         _forwardedPort = null;
     }
 }
コード例 #17
0
 public void Test_AddForwardedPort_Invalid_PortNumber()
 {
     using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
     {
         client.Connect();
         var port1 = new ForwardedPortRemote("localhost", IPEndPoint.MaxPort + 1, "www.renci.org", IPEndPoint.MaxPort + 1);
         client.AddForwardedPort(port1);
         client.Disconnect();
     }
 }
コード例 #18
0
 public void Test_AddForwardedPort_Remote_Hosts_Are_Null()
 {
     using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
     {
         client.Connect();
         var port1 = new ForwardedPortRemote((string)null, 8080, (string)null, 80);
         client.AddForwardedPort(port1);
         client.Disconnect();
     }
 }
コード例 #19
0
        protected void Arrange()
        {
            var random = new Random();

            _closingRegister   = new List <EventArgs>();
            _exceptionRegister = new List <ExceptionEventArgs>();
            _bindEndpoint      = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, 1000));
            _remoteEndpoint    = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _forwardedPort     = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port);

            _connectionInfoMock = new Mock <IConnectionInfo>(MockBehavior.Strict);
            _sessionMock        = new Mock <ISession>(MockBehavior.Strict);

            _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(15));
            _sessionMock.Setup(p => p.IsConnected).Returns(true);
            _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object);
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_FAILURE"));
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_SUCCESS"));
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_CHANNEL_OPEN"));
            _sessionMock.Setup(
                p =>
                p.SendMessage(
                    It.Is <GlobalRequestMessage>(
                        g =>
                        g.RequestName == GlobalRequestName.TcpIpForward &&
                        g.AddressToBind == _forwardedPort.BoundHost &&
                        g.PortToBind == _forwardedPort.BoundPort)))
            .Callback(
                () =>
                _sessionMock.Raise(s => s.RequestSuccessReceived += null,
                                   new MessageEventArgs <RequestSuccessMessage>(new RequestSuccessMessage())));
            _sessionMock.Setup(p => p.WaitOnHandle(It.IsAny <WaitHandle>()))
            .Callback <WaitHandle>(handle => handle.WaitOne());
            _sessionMock.Setup(
                p =>
                p.SendMessage(
                    It.Is <GlobalRequestMessage>(
                        g =>
                        g.RequestName == GlobalRequestName.CancelTcpIpForward &&
                        g.AddressToBind == _forwardedPort.BoundHost && g.PortToBind == _forwardedPort.BoundPort)))
            .Callback(
                () =>
                _sessionMock.Raise(s => s.RequestSuccessReceived += null,
                                   new MessageEventArgs <RequestSuccessMessage>(new RequestSuccessMessage())));
            _sessionMock.Setup(p => p.MessageListenerCompleted).Returns(new ManualResetEvent(false));

            _forwardedPort.Closing   += (sender, args) => _closingRegister.Add(args);
            _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
            _forwardedPort.Session    = _sessionMock.Object;
            _forwardedPort.Start();
            _forwardedPort.Stop();

            _closingRegister.Clear();
        }
コード例 #20
0
        protected void Arrange()
        {
            var random = new Random();
            _closingRegister = new List<EventArgs>();
            _exceptionRegister = new List<ExceptionEventArgs>();
            _bindEndpoint = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, 1000));
            _remoteEndpoint = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _forwardedPort = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port);

            _connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict);
            _sessionMock = new Mock<ISession>(MockBehavior.Strict);

            _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(15));
            _sessionMock.Setup(p => p.IsConnected).Returns(true);
            _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object);
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_FAILURE"));
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_SUCCESS"));
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_CHANNEL_OPEN"));
            _sessionMock.Setup(
                p =>
                    p.SendMessage(
                        It.Is<GlobalRequestMessage>(
                            g =>
                                g.RequestName == GlobalRequestName.TcpIpForward &&
                                g.AddressToBind == _forwardedPort.BoundHost &&
                                g.PortToBind == _forwardedPort.BoundPort)))
                .Callback(
                    () =>
                        _sessionMock.Raise(s => s.RequestSuccessReceived += null,
                            new MessageEventArgs<RequestSuccessMessage>(new RequestSuccessMessage())));
            _sessionMock.Setup(p => p.WaitOnHandle(It.IsAny<WaitHandle>()))
                .Callback<WaitHandle>(handle => handle.WaitOne());
            _sessionMock.Setup(
                p =>
                    p.SendMessage(
                        It.Is<GlobalRequestMessage>(
                            g =>
                                g.RequestName == GlobalRequestName.CancelTcpIpForward &&
                                g.AddressToBind == _forwardedPort.BoundHost && g.PortToBind == _forwardedPort.BoundPort)))
                .Callback(
                    () =>
                        _sessionMock.Raise(s => s.RequestSuccessReceived += null,
                            new MessageEventArgs<RequestSuccessMessage>(new RequestSuccessMessage())));
            _sessionMock.Setup(p => p.MessageListenerCompleted).Returns(new ManualResetEvent(false));

            _forwardedPort.Closing += (sender, args) => _closingRegister.Add(args);
            _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
            _forwardedPort.Session = _sessionMock.Object;
            _forwardedPort.Start();
            _forwardedPort.Stop();

            _closingRegister.Clear();
        }
コード例 #21
0
        protected void Arrange()
        {
            var random = new Random();
            _closingRegister = new List<EventArgs>();
            _exceptionRegister = new List<ExceptionEventArgs>();
            _bindEndpoint = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, 1000));
            _remoteEndpoint = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));

            _forwardedPort = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port);
            _forwardedPort.Closing += (sender, args) => _closingRegister.Add(args);
            _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
        }
コード例 #22
0
        protected void Arrange()
        {
            var random = new Random();
            _closingRegister = new List<EventArgs>();
            _exceptionRegister = new List<ExceptionEventArgs>();
            _bindEndpoint = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _remoteEndpoint  = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));

            _forwardedPort = new ForwardedPortRemote(_bindEndpoint.Address, (uint) _bindEndpoint.Port, _remoteEndpoint.Address, (uint) _remoteEndpoint.Port);
            _forwardedPort.Closing += (sender, args) => _closingRegister.Add(args);
            _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
            _forwardedPort.Dispose();
        }
コード例 #23
0
 public void Cleanup()
 {
     if (_forwardedPort != null)
     {
         _sessionMock.Setup(
             p =>
             p.SendMessage(
                 It.Is <CancelTcpIpForwardGlobalRequestMessage>(
                     g => g.AddressToBind == _forwardedPort.BoundHost && g.PortToBind == _forwardedPort.BoundPort)));
         _sessionMock.Setup(p => p.MessageListenerCompleted).Returns(new ManualResetEvent(true));
         _forwardedPort.Dispose();
         _forwardedPort = null;
     }
 }
コード例 #24
0
 public void Cleanup()
 {
     if (_forwardedPort != null)
     {
         _sessionMock.Setup(
             p =>
                 p.SendMessage(
                     It.Is<CancelTcpIpForwardGlobalRequestMessage>(
                         g => g.AddressToBind == _forwardedPort.BoundHost && g.PortToBind == _forwardedPort.BoundPort)));
         _sessionMock.Setup(p => p.MessageListenerCompleted).Returns(new ManualResetEvent(true));
         _forwardedPort.Dispose();
         _forwardedPort = null;
     }
 }
コード例 #25
0
        public static void startTunnel()
        {
            var keypath  = @"C:\file.ppk";
            var pk       = new PrivateKeyFile(keypath);
            var keyFiles = new[] { pk };

            var client = new SshClient("domain.com", 22, "root", pk);

            client.KeepAliveInterval      = new TimeSpan(0, 0, 30);
            client.ConnectionInfo.Timeout = new TimeSpan(0, 0, 20);
            try
            {
                client.Connect();
                Console.WriteLine("[INFO] Connecté");
            }
            catch
            {
                Console.WriteLine("[FATAL] Erreur de connexion au tunnel");
            }
            IPAddress           iplocal      = IPAddress.Parse("127.0.0.1");
            IPAddress           ipremote     = IPAddress.Parse("IP");
            UInt32              portdistant1 = 7000;
            UInt32              portlocal1   = 5900;
            UInt32              portdistant2 = 7006;
            UInt32              portlocal2   = 4500;
            ForwardedPortRemote port1        = new ForwardedPortRemote(ipremote, portdistant1, iplocal, portlocal1);
            ForwardedPortRemote port2        = new ForwardedPortRemote(ipremote, portdistant2, iplocal, portlocal2);

            client.AddForwardedPort(port1);
            client.AddForwardedPort(port2);
            port1.Exception += delegate(object sender, ExceptionEventArgs e)
            {
                Console.WriteLine("[FATAL] " + e.Exception.ToString());
            };
            port2.Exception += delegate(object sender, ExceptionEventArgs e)
            {
                Console.WriteLine("[FATAL] " + e.Exception.ToString());
            };
            port1.Start();
            port2.Start();
            Console.WriteLine("[DEBUG] Port forwarding ok");
            System.Threading.Thread.Sleep(1000 * 60 * 60 * 8);
            port1.Stop();
            port2.Stop();
            client.Disconnect();
        }
コード例 #26
0
        private static void OpenTunnel(CommandLineOptions opts)
        {
            var client = new SshClient(opts.SshServer, opts.UserName, new PrivateKeyFile(opts.KeyFile));

            client.Connect();
            client.KeepAliveInterval = new TimeSpan(0, 0, 5);

            if (!client.IsConnected)
            {
                Log.Error("Can't start tunnel, try again.");
            }

            var connectionPort = new ForwardedPortRemote(Convert.ToUInt32(opts.RemotePort), "localhost", Convert.ToUInt32(opts.LocalPort));

            client.AddForwardedPort(connectionPort);
            connectionPort.Start();
        }
        protected void Arrange()
        {
            var random = new Random();
            _closingRegister = new List<EventArgs>();
            _exceptionRegister = new List<ExceptionEventArgs>();
            _bindEndpoint = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, 1000));
            _remoteEndpoint = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));

            _sessionMock = new Mock<ISession>(MockBehavior.Strict);
            _connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict);

            _sessionMock.Setup(p => p.IsConnected).Returns(false);

            _forwardedPort = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port); 
            _forwardedPort.Closing += (sender, args) => _closingRegister.Add(args);
            _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
            _forwardedPort.Session = _sessionMock.Object;
        }
コード例 #28
0
        public void Start_NotAddedToClient()
        {
            const int  boundPort = 80;
            string     host      = string.Empty;
            const uint port      = 22;
            var        target    = new ForwardedPortRemote(boundPort, host, port);

            try
            {
                target.Start();
                Assert.Fail();
            }
            catch (InvalidOperationException ex)
            {
                Assert.IsNull(ex.InnerException);
                Assert.AreEqual("Forwarded port is not added to a client.", ex.Message);
            }
        }
コード例 #29
0
        protected void Arrange()
        {
            var random = new Random();

            _closingRegister   = new List <EventArgs>();
            _exceptionRegister = new List <ExceptionEventArgs>();
            _bindEndpoint      = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, 1000));
            _remoteEndpoint    = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));

            _sessionMock        = new Mock <ISession>(MockBehavior.Strict);
            _connectionInfoMock = new Mock <IConnectionInfo>(MockBehavior.Strict);

            _sessionMock.Setup(p => p.IsConnected).Returns(false);

            _forwardedPort            = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port);
            _forwardedPort.Closing   += (sender, args) => _closingRegister.Add(args);
            _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
            _forwardedPort.Session    = _sessionMock.Object;
        }
コード例 #30
0
 private void connectionDelegate_DoWork(object sender, DoWorkEventArgs e)
 {
     if (!this.isConnectionRequested)
     {
         return;
     }
     try {
         using (SshClient client = new SshClient(this.domainName, this.user, this.privateKeyFile)) {
             client.Connect();
             this.setIsConnected(true);
             if (this.isConnectionAsServerRequested)
             {
                 ForwardedPortRemote port = new ForwardedPortRemote(
                     ServerConfig.ClientHost, uint.Parse(this.port),
                     ServerConfig.ServerHost, uint.Parse(this.port)
                     );
                 client.AddForwardedPort(port);
                 port.Start();
             }
             else
             {
                 ForwardedPortLocal port = new ForwardedPortLocal(
                     ServerConfig.ClientHost, uint.Parse(this.port),
                     ServerConfig.ServerHost, uint.Parse(this.port)
                     );
                 client.AddForwardedPort(port);
                 port.Start();
             }
             while (this.isConnectionRequested)
             {
                 Thread.Sleep(1000);
             }
             client.Disconnect();
             this.setIsConnected(false);
         }
     } catch (Exception exception) {
         this.setIsConnected(false);
         MessageBox.Show(
             $"Connection severed due to error: {exception.Message}", "Error",
             MessageBoxButtons.OK, MessageBoxIcon.Error
             );
     }
 }
コード例 #31
0
ファイル: Program.cs プロジェクト: ilseokoh/rtsp-over-ssh
        static void Main(string[] args)
        {
            Console.WriteLine("SSH Client!");

            using (var client = new SshClient("52.231.201.187", "<SSH username>", "<SSH password>"))
            {
                try
                {
                    client.Connect();
                }
                catch (Exception ex2)
                {
                    Console.WriteLine("SSH connection error!");
                    Console.WriteLine(ex2.ToString());
                }

                // SSH Remote Port Forwarding
                // 1234 : SSH server side port(remote port)
                // 554 : local service port (ex, 80, 3389 ...)
                // localhost: local service hostname or ipaddress
                var port = new ForwardedPortRemote(1234, "127.0.0.1", 8554);

                client.AddForwardedPort(port);

                port.Exception += delegate(object sender, ExceptionEventArgs e)
                {
                    Console.WriteLine(e.Exception.ToString());
                };
                port.RequestReceived += delegate(object sender, PortForwardEventArgs e)
                {
                    Console.WriteLine(e.OriginatorHost);
                };
                port.Start();

                // ... hold the port open ... //
                Console.WriteLine("Press any key to close.");
                Console.ReadLine();

                port.Stop();
                client.Disconnect();
            }
        }
コード例 #32
0
        public override bool Run()
        {
            ForwardedPort port;

            switch (Method)
            {
            default:
            case EForwardMethod.LocalToRemote:
            {
                port = new ForwardedPortRemote(RemoteHost.Address, (uint)RemoteHost.Port, LocalHost.Address, (uint)LocalHost.Port);
                break;
            }

            case EForwardMethod.RemoteToLocal:
            {
                port = new ForwardedPortLocal(LocalHost.Address.ToString(), (uint)LocalHost.Port, RemoteHost.Address.ToString(), (uint)RemoteHost.Port);
                break;
            }
            }

            WriteInfo("Connecting ...");

            SshClient SSH = new SshClient(Host.Address.ToString(), Host.Port, User, Password);

            SSH.Connect();
            WriteInfo("Connected successful");

            Thread thread = new Thread(new ParameterizedThreadStart(jobRun));

            thread.IsBackground = true;
            thread.Name         = "SSH-PortForwarding";

            thread.Start(new object[] { SSH, port });

            IJobable job = thread;

            job.Tag        = SSH;
            job.DisposeTag = true;

            CreateJob(job);
            return(true);
        }
        public void Cleanup()
        {
            if (ForwardedPort != null)
            {
                ForwardedPort.Dispose();
                ForwardedPort = null;
            }

            if (_channelBindStarted != null)
            {
                _channelBindStarted.Dispose();
                _channelBindStarted = null;
            }

            if (_channelBindCompleted != null)
            {
                _channelBindCompleted.Dispose();
                _channelBindCompleted = null;
            }
        }
        public void Cleanup()
        {
            if (ForwardedPort != null)
            {
                ForwardedPort.Dispose();
                ForwardedPort = null;
            }

            if (_channelBindStarted != null)
            {
                _channelBindStarted.Dispose();
                _channelBindStarted = null;
            }

            if (_channelBindCompleted != null)
            {
                _channelBindCompleted.Dispose();
                _channelBindCompleted = null;
            }
        }
コード例 #35
0
        public void Test_ForwardedPortRemote()
        {
            using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
            {
                #region Example SshClient AddForwardedPort Start Stop ForwardedPortRemote
                client.Connect();
                var port = new ForwardedPortRemote(8082, "www.cnn.com", 80);
                client.AddForwardedPort(port);
                port.Exception += delegate(object sender, ExceptionEventArgs e)
                {
                    Console.WriteLine(e.Exception.ToString());
                };
                port.Start();

                Thread.Sleep(1000 * 60 * 20); //	Wait 20 minutes for port to be forwarded

                port.Stop();
                #endregion
            }
            Assert.Inconclusive("TODO: Implement code to verify target");
        }
コード例 #36
0
        public void Test_ForwardedPortRemote()
        {
            using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
            {
                #region Example SshClient AddForwardedPort Start Stop ForwardedPortRemote
                client.Connect();
                var port = new ForwardedPortRemote(8082, "www.cnn.com", 80);
                client.AddForwardedPort(port);
                port.Exception += delegate(object sender, ExceptionEventArgs e)
                {
                    Console.WriteLine(e.Exception.ToString());
                };
                port.Start();

                Thread.Sleep(1000 * 60 * 20); //	Wait 20 minutes for port to be forwarded

                port.Stop();
                #endregion
            }
            Assert.Inconclusive("TODO: Implement code to verify target");
        }
コード例 #37
0
ファイル: SshCommands.cs プロジェクト: pietervp/workbooks-1
        public void ForwardPort(int boundPort, int port, bool remoteForward = false)
        {
            EnsureSshConnection();

            var forwardedPort = default(ForwardedPort);

            if (remoteForward)
            {
                forwardedPort = new ForwardedPortRemote(IPAddress.Parse("127.0.0.1"), (uint)boundPort, IPAddress.Parse("127.0.0.1"), (uint)port);
            }
            else
            {
                // IPAddress.Loopback.ToString() is the string 127.0.0.1. Don't change this unless you've also changed
                // port forwarding in XMA/XVS to match--you'll break inspection if you make things dependent on this
                // behavior without fixing XMA/XVS too.
                forwardedPort = new ForwardedPortLocal(IPAddress.Loopback.ToString(), (uint)boundPort, IPAddress.Loopback.ToString(), (uint)port);
            }

            sshClient.AddForwardedPort(forwardedPort);

            forwardedPort.Start();
        }
コード例 #38
0
        public void Connect()
        {
            lock (this) {
                if (IsConnected)
                {
                    throw new Exception("Already connected!");
                    IsConnected = true;
                }
            }
            Ssh.Connect();
            Sftp.Connect();

            var forwardLocal  = new ForwardedPortLocal("127.0.0.1", MonoEngine.MonoDebuggerPort, "127.0.0.1", MonoEngine.MonoDebuggerPort);
            var forwardRemote = new ForwardedPortRemote("127.0.0.1", MonoEngine.MonoDebuggerPort, "127.0.0.1", MonoEngine.MonoDebuggerPort);

            Ssh.AddForwardedPort(forwardLocal);
            Ssh.AddForwardedPort(forwardRemote);

            forwardLocal.Exception  += (sender, e) => { throw e.Exception; };
            forwardRemote.Exception += (sender, e) => { throw e.Exception; };

            forwardLocal.Start();
            forwardRemote.Start();
        }
コード例 #39
0
        public static void startTunnel()
        {
            var keypath  = @"";
            var pk       = new PrivateKeyFile(keypath);
            var keyFiles = new[] { pk };

            var client = new SshClient("server.com", 22, "user", pk);

            client.KeepAliveInterval      = new TimeSpan(0, 0, 30);
            client.ConnectionInfo.Timeout = new TimeSpan(0, 0, 20);
            try
            {
                client.Connect();
                Console.WriteLine("Connecté à server");
            }
            catch
            {
                Console.WriteLine("Erreur de connexion au tunnel");
            }
            IPAddress           iplocal     = IPAddress.Parse("127.0.0.1");
            IPAddress           ipremote    = IPAddress.Parse("ipserver");
            UInt32              portdistant = 22;
            UInt32              portlocal   = 25;
            ForwardedPortRemote port        = new ForwardedPortRemote(ipremote, portdistant, iplocal, portlocal);

            client.AddForwardedPort(port);
            port.Exception += delegate(object sender, ExceptionEventArgs e)
            {
                Console.WriteLine(e.Exception.ToString());
            };
            port.Start();
            Console.WriteLine("Port forwarding ok");
            System.Threading.Thread.Sleep(1000 * 60 * 60 * 8);
            port.Stop();
            client.Disconnect();
        }
コード例 #40
0
        public void Test_PortForwarding_Remote()
        {
            //  ******************************************************************
            //  ************* Tests are still in not finished ********************
            //  ******************************************************************

            using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
            {
                client.Connect();
                var port1 = new ForwardedPortRemote(8082, "www.renci.org", 80);
                client.AddForwardedPort(port1);
                port1.Exception += delegate(object sender, ExceptionEventArgs e)
                {
                    Assert.Fail(e.Exception.ToString());
                };
                port1.Start();
                var boundport = port1.BoundPort;

                System.Threading.Tasks.Parallel.For(0, 5,

                    //new ParallelOptions
                    //{
                    //    MaxDegreeOfParallelism = 1,
                    //},
                    (counter) =>
                    {
                        var cmd = client.CreateCommand(string.Format("wget -O- http://localhost:{0}", boundport));
                        var result = cmd.Execute();
                        var end = DateTime.Now;
                        Debug.WriteLine(string.Format("Length: {0}", result.Length));
                    }
                );
                Thread.Sleep(1000 * 100);
                port1.Stop();
            }
        }
コード例 #41
0
ファイル: SshService.cs プロジェクト: sei-rreeder/crucible
        private static void RunEx(ClientConfiguration.SshOptions config)
        {
            BondManager.CurrentPorts.Clear();

            try
            {
                _log.Info(
                    $"Starting SSH client with {config.KeepAliveIntervalInSeconds}s keep-alive to {config.Host}:{config.Port} as {config.Username}...");

                using (var client = new SshClient(config.Host, config.Port, config.Username, config.Password))
                {
                    try
                    {
                        client.Connect();
                        client.KeepAliveInterval = TimeSpan.FromSeconds(config.KeepAliveIntervalInSeconds);

                        client.ErrorOccurred   += delegate(object sender, ExceptionEventArgs e) { _log.Trace(e); };
                        client.HostKeyReceived += delegate(object sender, HostKeyEventArgs e)
                        {
                            _log.Trace($"Host key received: {e.HostKey}:{e.HostKeyName}");
                        };

                        foreach (var forwardedPort in config.SshPorts)
                        {
                            //define port and add it to client
                            var port = new ForwardedPortRemote(forwardedPort.Server, forwardedPort.ServerPort, forwardedPort.Guest,
                                                               forwardedPort.GuestPort);
                            client.AddForwardedPort(port);

                            //add delegates to handle port exceptions and requests received
                            port.Exception       += delegate(object sender, ExceptionEventArgs e) { _log.Info(e.Exception.ToString()); };
                            port.RequestReceived += delegate(object sender, PortForwardEventArgs e)
                            {
                                _log.Info($"{e.OriginatorHost}:{e.OriginatorPort}—{sender}");
                            };

                            //start the port, which will give us connection information back from server
                            port.Start();
                            //get that bound port from server
                            _log.Info($"Bound port: {port.BoundPort} - Is started?: {port.IsStarted}");

                            forwardedPort.ServerPort = port.BoundPort;

                            if (!BondManager.CurrentPorts.Contains(forwardedPort))
                            {
                                BondManager.CurrentPorts.Add(forwardedPort);
                            }
                        }

                        var result = client.RunCommand("uptime");
                        _log.Info(result.Result);

                        while (client.IsConnected)
                        {
                            // ... hold the port open ... //
                            Thread.Sleep(1000);
                        }
                    }
                    catch (SocketException se)
                    {
                        _log.Error(se);
                    }
                    catch (Exception e)
                    {
                        _log.Error(e);
                    }
                    finally
                    {
                        try
                        {
                            foreach (var port in client.ForwardedPorts)
                            {
                                port.Stop();
                                client.RemoveForwardedPort(port);
                                _log.Info($"Bound port stopped and removed: {port}");
                            }
                        }
                        catch (Exception e)
                        {
                            _log.Error(e);
                        }

                        client.Disconnect();
                        _log.Info($"Client disconnected...");
                    }
                }
            }
            catch (SocketException se)
            {
                _log.Error(se);
            }
            catch (Exception e)
            {
                _log.Error(e);
            }
        }
        private void SetUpData()
        {
            var random = new Random();

            _closingRegister = new List<EventArgs>();
            _exceptionRegister = new List<ExceptionEventArgs>();
            _bindEndpoint = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _remoteEndpoint = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _bindSleepTime = TimeSpan.FromMilliseconds(random.Next(100, 500));
            _remoteChannelNumberWhileClosing = (uint) random.Next(0, 1000);
            _remoteWindowSizeWhileClosing = (uint) random.Next(0, int.MaxValue);
            _remotePacketSizeWhileClosing = (uint) random.Next(0, int.MaxValue);
            _remoteChannelNumberStarted = (uint) random.Next(0, 1000);
            _remoteWindowSizeStarted = (uint) random.Next(0, int.MaxValue);
            _remotePacketSizeStarted = (uint) random.Next(0, int.MaxValue);
            _originatorAddress = random.Next().ToString(CultureInfo.InvariantCulture);
            _originatorPort = (uint) random.Next(0, int.MaxValue);
            _channelBindStarted = new ManualResetEvent(false);
            _channelBindCompleted = new ManualResetEvent(false);

            ForwardedPort = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port);
            ForwardedPort.Closing += (sender, args) =>
                {
                    _closingRegister.Add(args);
                    _sessionMock.Raise(p => p.ChannelOpenReceived += null, new MessageEventArgs<ChannelOpenMessage>(new ChannelOpenMessage(_remoteChannelNumberWhileClosing, _remoteWindowSizeWhileClosing, _remotePacketSizeWhileClosing, new ForwardedTcpipChannelInfo(ForwardedPort.BoundHost, ForwardedPort.BoundPort, _originatorAddress, _originatorPort))));
                };
            ForwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
            ForwardedPort.Session = _sessionMock.Object;
        }
コード例 #43
0
        protected void Arrange()
        {
            var random = new Random();

            _closingRegister                 = new List <EventArgs>();
            _exceptionRegister               = new List <ExceptionEventArgs>();
            _bindEndpoint                    = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _remoteEndpoint                  = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _expectedElapsedTime             = TimeSpan.FromMilliseconds(random.Next(100, 500));
            ForwardedPort                    = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port);
            _remoteChannelNumberWhileClosing = (uint)random.Next(0, 1000);
            _remoteWindowSizeWhileClosing    = (uint)random.Next(0, int.MaxValue);
            _remotePacketSizeWhileClosing    = (uint)random.Next(0, int.MaxValue);
            _remoteChannelNumberStarted      = (uint)random.Next(0, 1000);
            _remoteWindowSizeStarted         = (uint)random.Next(0, int.MaxValue);
            _remotePacketSizeStarted         = (uint)random.Next(0, int.MaxValue);
            _originatorAddress               = random.Next().ToString(CultureInfo.InvariantCulture);
            _originatorPort                  = (uint)random.Next(0, int.MaxValue);

            _connectionInfoMock = new Mock <IConnectionInfo>(MockBehavior.Strict);
            _sessionMock        = new Mock <ISession>(MockBehavior.Strict);
            _channelMock        = new Mock <IChannelForwardedTcpip>(MockBehavior.Strict);

            _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(15));
            _sessionMock.Setup(p => p.IsConnected).Returns(true);
            _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object);
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_FAILURE"));
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_SUCCESS"));
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_CHANNEL_OPEN"));
            _sessionMock.Setup(
                p =>
                p.SendMessage(
                    It.Is <GlobalRequestMessage>(
                        g =>
                        g.RequestName == GlobalRequestName.TcpIpForward &&
                        g.AddressToBind == ForwardedPort.BoundHost &&
                        g.PortToBind == ForwardedPort.BoundPort)))
            .Callback(
                () =>
                _sessionMock.Raise(s => s.RequestSuccessReceived += null,
                                   new MessageEventArgs <RequestSuccessMessage>(new RequestSuccessMessage())));
            _sessionMock.Setup(p => p.WaitOnHandle(It.IsAny <WaitHandle>()));
            _sessionMock.Setup(p => p.SendMessage(It.Is <ChannelOpenFailureMessage>(c => c.LocalChannelNumber == _remoteChannelNumberWhileClosing && c.ReasonCode == ChannelOpenFailureMessage.AdministrativelyProhibited && c.Description == string.Empty && c.Language == "en")));
            _sessionMock.Setup(p => p.CreateChannelForwardedTcpip(_remoteChannelNumberStarted, _remoteWindowSizeStarted, _remotePacketSizeStarted)).Returns(_channelMock.Object);
            _channelMock.Setup(
                p =>
                p.Bind(
                    It.Is <IPEndPoint>(
                        ep => ep.Address.Equals(_remoteEndpoint.Address) && ep.Port == _remoteEndpoint.Port),
                    ForwardedPort)).Callback(() => Thread.Sleep(_expectedElapsedTime));
            _channelMock.Setup(p => p.Close());
            _channelMock.Setup(p => p.Dispose());
            _sessionMock.Setup(
                p =>
                p.SendMessage(
                    It.Is <GlobalRequestMessage>(
                        g =>
                        g.RequestName == GlobalRequestName.CancelTcpIpForward &&
                        g.AddressToBind == ForwardedPort.BoundHost && g.PortToBind == ForwardedPort.BoundPort)));
            _sessionMock.Setup(p => p.MessageListenerCompleted).Returns(new ManualResetEvent(true));

            ForwardedPort.Closing += (sender, args) =>
            {
                _closingRegister.Add(args);
                _sessionMock.Raise(p => p.ChannelOpenReceived += null, new MessageEventArgs <ChannelOpenMessage>(new ChannelOpenMessage(_remoteChannelNumberWhileClosing, _remoteWindowSizeWhileClosing, _remotePacketSizeWhileClosing, new ForwardedTcpipChannelInfo(ForwardedPort.BoundHost, ForwardedPort.BoundPort, _originatorAddress, _originatorPort))));
            };
            ForwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
            ForwardedPort.Session    = _sessionMock.Object;
            ForwardedPort.Start();

            _sessionMock.Raise(p => p.ChannelOpenReceived += null, new MessageEventArgs <ChannelOpenMessage>(new ChannelOpenMessage(_remoteChannelNumberStarted, _remoteWindowSizeStarted, _remotePacketSizeStarted, new ForwardedTcpipChannelInfo(ForwardedPort.BoundHost, ForwardedPort.BoundPort, _originatorAddress, _originatorPort))));
        }
コード例 #44
0
ファイル: Program.cs プロジェクト: catan85/SshOnDemand
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, this is a test SSH connection");

            // Setup Credentials and Server Information
            ConnectionInfo ConnNfo = new ConnectionInfo("192.168.0.106", 22, "pi",
                                                        new AuthenticationMethod[] {
                // Pasword based Authentication
                // new PasswordAuthenticationMethod("pi","catanf85"),

                // Key Based Authentication (using keys in OpenSSH Format)
                new PrivateKeyAuthenticationMethod("pi", new PrivateKeyFile[] {
                    new PrivateKeyFile(@"..\test.keys", "")
                }),
            }
                                                        );

            // Execute a (SHELL) Command - prepare upload directory
            using (var sshclient = new SshClient(ConnNfo))
            {
                sshclient.KeepAliveInterval = new TimeSpan(0, 0, 10);
                sshclient.Connect();
                using (var cmd = sshclient.CreateCommand("mkdir -p /tmp/uploadtest && chmod +rw /tmp/uploadtest"))
                {
                    cmd.Execute();
                    Console.WriteLine("Command>" + cmd.CommandText);
                    Console.WriteLine("Return Value = {0}", cmd.ExitStatus);
                }



                if (sshclient.IsConnected)
                {
                    try
                    {
                        // esempio di forwarding locale: dalla 22 del server ssh alla 9091 del pc client
                        var port = new ForwardedPortLocal("127.0.0.1", 9091, "127.0.0.1", 22);
                        sshclient.AddForwardedPort(port);
                        port.Start();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }


                    try
                    {
                        // esempio di forwarding remoto: dalla 5001 del pc client alla 50000 del server ssh
                        var port = new ForwardedPortRemote("127.0.0.1", 50000, "127.0.0.1", 5001);
                        sshclient.AddForwardedPort(port);
                        port.Start();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                }

                Console.ReadLine();
                sshclient.Disconnect();
            }
        }
コード例 #45
0
        public void Start_NotAddedToClient()
        {
            const int boundPort = 80;
            string host = string.Empty;
            const uint port = 22;
            var target = new ForwardedPortRemote(boundPort, host, port);

            try
            {
                target.Start();
                Assert.Fail();
            }
            catch (InvalidOperationException ex)
            {
                Assert.IsNull(ex.InnerException);
                Assert.AreEqual("Forwarded port is not added to a client.", ex.Message);
            }
        }
コード例 #46
0
ファイル: Main.cs プロジェクト: sach3000/Chaber
        private void Form1_Load(object sender, EventArgs e)
        {
            Random r     = new Random();
            var    ini_f = new IniFile(@"files\server.ini");

            host       = ini_f.Read("SSHServer");
            port       = Convert.ToInt32(ini_f.Read("SSHServerPort"));
            vncportclt = Convert.ToUInt32(ini_f.Read("LocalVncPortControl"));
            MinnPort   = Convert.ToInt32(ini_f.Read("MinRandomPort"));
            MaxnPort   = Convert.ToInt32(ini_f.Read("MaxRandomPort"));
            SizePass   = 3;
            logf       = AppData + "\\files\\main.log";
            var connectionInfo = new ConnectionInfo(host, port, "vncuser",
                                                    new AuthenticationMethod[] {
                new PrivateKeyAuthenticationMethod("vncuser", new PrivateKeyFile[] {
                    new PrivateKeyFile(@"files\vncuser.pem", "vnc$Uuser")
                }),
            }
                                                    );

            var ssh = new SshClient(connectionInfo);

            //Port free
            try
            {
                using (var sshcmd = new SshClient(connectionInfo))
                {
                    sshcmd.Connect();
                    var cmd = sshcmd.RunCommand("netstat -tulpan | grep -w 'tcp' | awk '{print $4}' | cut -d ':' -f 2 | uniq");
                    outputcmd = cmd.Result;
                    sshcmd.Disconnect();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
                if (!File.Exists(logf))
                {
                    using (StreamWriter sw = File.CreateText(logf))
                    { sw.WriteLine("Error: " + ex.Message); }
                }
            }
            nPort   = (uint)r.Next(MinnPort, MaxnPort);
            PassVNC = PassGenerate(SizePass) + nPort.ToString();
            if (!portav(nPort) && !outputcmd.Contains(nPort.ToString()))
            {
                //Calculate pass with help math func
                if (!File.Exists(logf))
                {
                    using (StreamWriter sw = File.CreateText(logf))
                    { sw.WriteLine("Порт для соединения: " + nPort.ToString()); }
                }
                else
                {
                    try
                    {
                        File.Delete(logf);
                        if (!File.Exists(logf))
                        {
                            using (StreamWriter sw = File.CreateText(logf))
                            { sw.WriteLine("Порт для соединения: " + nPort.ToString()); }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error: " + ex.Message);
                        if (!File.Exists(logf))
                        {
                            using (StreamWriter sw = File.CreateText(logf))
                            { sw.WriteLine("Error: " + ex.Message); }
                        }
                    }
                }
                lblPortNotUse.Text    = PassVNC;
                lblPortNotUse.Visible = false;
            }
            //Create tunnel
            try
            {
                ssh.Connect();
                //System.Threading.Thread.Sleep(2000);
                if (ssh.IsConnected)
                {
                    try
                    {
                        var vnctun = new ForwardedPortRemote(IPAddress.Loopback, nPort, IPAddress.Loopback, vncportclt);
                        ssh.AddForwardedPort(vnctun);
                        vnctun.Start();
                        if (vnctun.IsStarted)
                        {
                            lblMsg.Text           = "Соединение установлено";
                            lblPortNotUse.Visible = true;
                            AddVNCReg();
                            ProcessStartInfo startvnc = new ProcessStartInfo();
                            startvnc.FileName = Path.Combine(AppData, "files\\WinVNC.exe");
                            Process proc = Process.Start(startvnc);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        using (StreamWriter sw = File.AppendText(logf))
                        { sw.WriteLine("Error: " + ex.Message); }
                    }
                }
            }
            catch (Exception exConn)
            {
                MessageBox.Show(exConn.Message);
                lblMsg.Text = "Невозможно создать туннель";
                using (StreamWriter sw = File.AppendText(logf))
                { sw.WriteLine("Connection error: " + exConn.Message); }
            }
        }
        protected void Arrange()
        {
            var random = new Random();
            _closingRegister = new List<EventArgs>();
            _exceptionRegister = new List<ExceptionEventArgs>();
            _bindEndpoint = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _remoteEndpoint = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort));
            _expectedElapsedTime = TimeSpan.FromMilliseconds(random.Next(100, 500));
            ForwardedPort = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port);
            _remoteChannelNumberWhileClosing = (uint) random.Next(0, 1000);
            _remoteWindowSizeWhileClosing = (uint) random.Next(0, int.MaxValue);
            _remotePacketSizeWhileClosing = (uint) random.Next(0, int.MaxValue);
            _remoteChannelNumberStarted = (uint)random.Next(0, 1000);
            _remoteWindowSizeStarted = (uint)random.Next(0, int.MaxValue);
            _remotePacketSizeStarted = (uint)random.Next(0, int.MaxValue);
            _originatorAddress = random.Next().ToString(CultureInfo.InvariantCulture);
            _originatorPort = (uint)random.Next(0, int.MaxValue);

            _connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict);
            _sessionMock = new Mock<ISession>(MockBehavior.Strict);
            _channelMock = new Mock<IChannelForwardedTcpip>(MockBehavior.Strict);

            _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(15));
            _sessionMock.Setup(p => p.IsConnected).Returns(true);
            _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object);
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_FAILURE"));
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_SUCCESS"));
            _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_CHANNEL_OPEN"));
            _sessionMock.Setup(
                p =>
                    p.SendMessage(
                        It.Is<GlobalRequestMessage>(
                            g =>
                                g.RequestName == GlobalRequestName.TcpIpForward &&
                                g.AddressToBind == ForwardedPort.BoundHost &&
                                g.PortToBind == ForwardedPort.BoundPort)))
                .Callback(
                    () =>
                        _sessionMock.Raise(s => s.RequestSuccessReceived += null,
                            new MessageEventArgs<RequestSuccessMessage>(new RequestSuccessMessage())));
            _sessionMock.Setup(p => p.WaitOnHandle(It.IsAny<WaitHandle>()));
            _sessionMock.Setup(p => p.SendMessage(It.Is<ChannelOpenFailureMessage>(c => c.LocalChannelNumber == _remoteChannelNumberWhileClosing && c.ReasonCode == ChannelOpenFailureMessage.AdministrativelyProhibited && c.Description == string.Empty && c.Language == "en")));
            _sessionMock.Setup(p => p.CreateChannelForwardedTcpip(_remoteChannelNumberStarted, _remoteWindowSizeStarted, _remotePacketSizeStarted)).Returns(_channelMock.Object);
            _channelMock.Setup(
                p =>
                    p.Bind(
                        It.Is<IPEndPoint>(
                            ep => ep.Address.Equals(_remoteEndpoint.Address) && ep.Port == _remoteEndpoint.Port),
                        ForwardedPort)).Callback(() => Thread.Sleep(_expectedElapsedTime));
            _channelMock.Setup(p => p.Close());
            _channelMock.Setup(p => p.Dispose());
            _sessionMock.Setup(
                p =>
                    p.SendMessage(
                        It.Is<GlobalRequestMessage>(
                            g =>
                                g.RequestName == GlobalRequestName.CancelTcpIpForward &&
                                g.AddressToBind == ForwardedPort.BoundHost && g.PortToBind == ForwardedPort.BoundPort)));
            _sessionMock.Setup(p => p.MessageListenerCompleted).Returns(new ManualResetEvent(true));

            ForwardedPort.Closing += (sender, args) =>
                {
                    _closingRegister.Add(args);
                    _sessionMock.Raise(p => p.ChannelOpenReceived += null, new MessageEventArgs<ChannelOpenMessage>(new ChannelOpenMessage(_remoteChannelNumberWhileClosing, _remoteWindowSizeWhileClosing, _remotePacketSizeWhileClosing, new ForwardedTcpipChannelInfo(ForwardedPort.BoundHost, ForwardedPort.BoundPort, _originatorAddress, _originatorPort))));
                };
            ForwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
            ForwardedPort.Session = _sessionMock.Object;
            ForwardedPort.Start();

            _sessionMock.Raise(p => p.ChannelOpenReceived += null, new MessageEventArgs<ChannelOpenMessage>(new ChannelOpenMessage(_remoteChannelNumberStarted, _remoteWindowSizeStarted, _remotePacketSizeStarted, new ForwardedTcpipChannelInfo(ForwardedPort.BoundHost, ForwardedPort.BoundPort, _originatorAddress, _originatorPort))));
        }