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]); } }
/// <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); }
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(); }
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); }
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]); } } }
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); }