<PackageReference Include="SSH.NET" Version="2020.0.1" />

PacketDump

class PacketDump
using System; using System.Collections.Generic; using System.Globalization; using System.Text; namespace Renci.SshNet.Common { internal class PacketDump { public static string Create(List<byte> data, int indentLevel) { return Create(data.ToArray(), indentLevel); } public static string Create(byte[] data, int indentLevel) { if (data == null) throw new ArgumentNullException("data"); if (indentLevel < 0) throw new ArgumentOutOfRangeException("indentLevel", "Cannot be less than zero."); StringBuilder stringBuilder = new StringBuilder(); byte[] array = new byte[16]; string value = new string(' ', indentLevel); int num = 0; while (num < data.Length) { int num2 = 0; if (stringBuilder.Length > 0) stringBuilder.Append(Environment.NewLine); stringBuilder.Append(value); stringBuilder.Append(num.ToString("X8")); stringBuilder.Append(" "); do { array[num2++] = data[num++]; } while (num2 != 16 && num != data.Length); stringBuilder.Append(AsHex(array, num2)); stringBuilder.Append(" "); stringBuilder.Append(AsAscii(array, num2)); } return stringBuilder.ToString(); } private static string AsHex(byte[] data, int length) { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < length; i++) { if (i > 0) stringBuilder.Append(' '); stringBuilder.Append(data[i].ToString("X2", CultureInfo.InvariantCulture)); } if (length < data.Length) stringBuilder.Append(new string(' ', (data.Length - length) * 3)); return stringBuilder.ToString(); } private static string AsAscii(byte[] data, int length) { Encoding aSCII = Encoding.ASCII; StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < length; i++) { byte b = data[i]; if (b < 32 || b >= 127) stringBuilder.Append('.'); else stringBuilder.Append(aSCII.GetString(data, i, 1)); } return stringBuilder.ToString(); } } }