示例#1
0
        public async Task PendingByteTest1Async()
        {
            using (MemoryStream stream = GetStream("\r\nH\ra"))
                using (ShellStream shellStream = new ShellStream(stream, false))
                {
                    byte[] buffer = new byte[1];
                    var    read   = await shellStream.ReadAsync(buffer, 0, 1).ConfigureAwait(false);

                    Assert.Equal(1, read);
                    Assert.Equal((byte)'\n', buffer[0]);

                    read = await shellStream.ReadAsync(buffer, 0, 1).ConfigureAwait(false);

                    Assert.Equal(1, read);
                    Assert.Equal((byte)'H', buffer[0]);

                    read = await shellStream.ReadAsync(buffer, 0, 1).ConfigureAwait(false);

                    Assert.Equal(1, read);
                    Assert.Equal((byte)'\r', buffer[0]);

                    read = await shellStream.ReadAsync(buffer, 0, 1).ConfigureAwait(false);

                    Assert.Equal(1, read);
                    Assert.Equal((byte)'a', buffer[0]);
                }
        }
示例#2
0
        /// <summary>
        /// 开启Connect
        /// </summary>
        public void StartConnect()
        {
            try
            {
                if (m_SftpClient.IsConnected == false)
                {
                    m_SftpClient.Connect();
                }
                if (m_SshClient.IsConnected == false)
                {
                    m_SshClient.Connect();
                }
                if (m_ScpClient.IsConnected == false)
                {
                    m_ScpClient.Connect();
                }

                m_AllConnected = true;
            }
            catch { throw; }

            m_ShellStream = m_SshClient.CreateShellStream("anything", 80, 24, 800, 600, 4096);
            byte[] buffer = new byte[4096];

            m_ShellStream.DataReceived += new EventHandler <ShellDataEventArgs>(Connect_OutputDataReceived);
            m_ShellStream.ReadAsync(buffer, 0, buffer.Length);
        }
示例#3
0
        private void KeepSendingWebSocketData(WebSocket webSocket, ShellStream shellStream)
        {
            new Thread(async() =>
            {
                while (!webSocket.CloseStatus.HasValue && shellStream.CanRead)
                {
                    var buffer    = new byte[BUFFERSIZE];
                    var bytesRead = await shellStream.ReadAsync(buffer, 0, BUFFERSIZE);
                    if (bytesRead > 0)
                    {
                        await webSocket.SendAsync(new ArraySegment <byte>(buffer, 0, bytesRead), WebSocketMessageType.Text, true, CancellationToken.None);
                    }
                    else
                    {
                        Thread.Sleep(100); // if nothing to send, sleep for some time before checking again
                    }
                }

                if (webSocket.CloseStatus.HasValue)
                {
                    this.logger.Trace($"Socket closed, stop getting shell response");
                }

                if (shellStream.CanRead)
                {
                    this.logger.Trace($"Can't read from shell, stop getting shell response");
                }
            }).Start();
        }
示例#4
0
        public async Task TestCRLFAtStartAsync()
        {
            using (MemoryStream stream = GetStream("\r\nHello, World!"))
                using (ShellStream shellStream = new ShellStream(stream, false))
                    using (StreamReader reader = new StreamReader(shellStream))
                    {
                        Assert.Equal((int)'\n', shellStream.ReadByte());

                        stream.Position = 0;
                        byte[] buffer = new byte[2];
                        var    read   = await shellStream.ReadAsync(buffer, 0, 2).ConfigureAwait(false);

                        Assert.Equal(2, read);
                        Assert.Equal((byte)'\n', buffer[0]);
                        Assert.Equal((byte)'H', buffer[1]);

                        stream.Position = 0;
                        Assert.Equal("\nHello, World!", reader.ReadToEnd());
                    }
        }
        /// <summary>
        /// 开启Screens
        /// </summary>
        public void StartScreens()
        {
            try
            {
                if (m_SftpClient.IsConnected == false)
                {
                    m_SftpClient.Connect();
                }
                if (m_SshClient.IsConnected == false)
                {
                    m_SshClient.Connect();
                }
            }
            catch { throw; }

            m_ShellStream = m_SshClient.CreateShellStream("putty-vt100", 80, 24, 800, 600, 4096);
            byte[] buffer = new byte[4096];

            m_ShellStream.DataReceived += new EventHandler <ShellDataEventArgs>(Screens_OutputDataReceived);
            m_ShellStream.ReadAsync(buffer, 0, buffer.Length);
        }
示例#6
0
        public async Task MultipleCRLFInStringAsync()
        {
            using (MemoryStream stream = GetStream("\r\n1\r\n2\r\n3\r\n4\r\n5"))
                using (ShellStream shellStream = new ShellStream(stream, false))
                    using (StreamReader reader = new StreamReader(shellStream))
                    {
                        Assert.Equal((int)'\n', shellStream.ReadByte());

                        stream.Position = 0;
                        byte[] buffer = new byte[100];
                        var    read   = await shellStream.ReadAsync(buffer, 0, 100).ConfigureAwait(false);

                        var actual = Encoding.ASCII.GetString(buffer, 0, read);
                        Assert.Equal("\n1\n2\n3\n4\n5", actual);
                        Assert.Equal(10, read);

                        for (int i = 10; i < buffer.Length; i++)
                        {
                            Assert.Equal(0, buffer[i]);
                        }
                    }
        }
示例#7
0
        private async Task <string> SendCommandSSH(string command, bool silent = false)
        {
            // Handle SSH login connection
            if (_sshUsername.Equals(String.Empty))
            {
                _sshUsername = command;
                _terminalData.Add("Enter password:"******"Connecting...");

                // Attempt connection
                _sshClient = new SshClient(_sshServer, _sshUsername, _terminalWindow._password);
                try
                {
                    _sshClient.Connect();

                    _terminalWindow._passwordMode = false;
                    _terminalWindow._password     = String.Empty;

                    var modes = new Dictionary <Renci.SshNet.Common.TerminalModes, uint>();
                    _sshStream = _sshClient.CreateShellStream("bgtTerm", 255, 50, 800, 600, 1024, modes);

                    _sshStream.DataReceived += async(object sender, ShellDataEventArgs e) =>
                    {
                        if (_sshStream != null && _sshStream.CanRead)
                        {
                            byte[] buffer = new byte[2048];
                            int    i      = 0;

                            if ((i = await _sshStream.ReadAsync(buffer, 0, buffer.Length)) != 1)
                            {
                                _terminalData.Add(_sshClient.ConnectionInfo.Encoding.GetString(buffer, 0, i));
                            }
                        }
                    };

                    if (_sshClient.IsConnected)
                    {
                        _terminalData.Add("Connected to " + _sshServer);
                    }
                    else
                    {
                        _terminalData.Add("There was a problem connecting.");

                        _sshMode     = false;
                        _sshUsername = String.Empty;
                    }
                }
                catch (Exception e)
                {
                    _terminalData.Add(e.Message);
                }
            }

            // Handle SSH commands
            else
            {
                if (_sshClient.IsConnected)
                {
                    try
                    {
                        _sshStream.WriteLine(command);
                    }
                    catch (Exception e)
                    {
                        _terminalData.Add(e.Message);
                    }
                }
                else
                {
                    _terminalData.Add("You are no longer connected to SSH. Exiting.");

                    _sshMode     = false;
                    _sshUsername = String.Empty;
                }
            }

            return(null);
        }