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)
        {
            ASCIIEncoding aSCIIEncoding = new ASCIIEncoding();
            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(aSCIIEncoding.GetString(data, i, 1));
            }
            return stringBuilder.ToString();
        }
    }
}