예제 #1
0
        public void Load()
        {
            byte[]            fileData  = System.IO.File.ReadAllBytes(filePath);
            ReadOnlyBitStream bitStream = new ReadOnlyBitStream(fileData);

            header    = new GlobalHeader();
            packets   = new List <Packet>();
            dataTable = new DataTable();

            header.ReadFromBitStream(bitStream);

            while (bitStream.GetBitsUnread() > 0)
            {
                Packet packet = new Packet();

                packet.ReadFromBitStream(bitStream);

                packets.Add(packet);
            }

            DataColumn column;

            column            = new DataColumn();
            column.DataType   = Type.GetType("System.UInt32");
            column.ColumnName = "Packet No.";
            column.ReadOnly   = true;
            dataTable.Columns.Add(column);

            column            = new DataColumn();
            column.DataType   = Type.GetType("System.String");
            column.ColumnName = "Time";
            column.ReadOnly   = true;
            dataTable.Columns.Add(column);

            column            = new DataColumn();
            column.DataType   = Type.GetType("System.String");
            column.ColumnName = "Source Address";
            column.ReadOnly   = true;
            dataTable.Columns.Add(column);

            column            = new DataColumn();
            column.DataType   = Type.GetType("System.UInt16");
            column.ColumnName = "Source Port";
            column.ReadOnly   = true;
            dataTable.Columns.Add(column);

            column            = new DataColumn();
            column.DataType   = Type.GetType("System.String");
            column.ColumnName = "Destination Address";
            column.ReadOnly   = true;
            dataTable.Columns.Add(column);

            column            = new DataColumn();
            column.DataType   = Type.GetType("System.UInt16");
            column.ColumnName = "Destination Port";
            column.ReadOnly   = true;
            dataTable.Columns.Add(column);

            int pno = 0;

            foreach (Packet packet in packets)
            {
                if (packet.GetEthernetFrame().GetPacket().GetDatagram() != null)
                {
                    byte[]  udpData = packet.GetEthernetFrame().GetPacket().GetDatagram().GetData();
                    DataRow row     = dataTable.NewRow();

                    DateTime time = new DateTime(packet.GetHeader().GetTimestampSeconds() * TimeSpan.TicksPerSecond);

                    time = time.AddMilliseconds((double)packet.GetHeader().GetTimestampMicroseconds() / 1000d / 1000d);

                    row["Packet No."]          = pno++;
                    row["Time"]                = time.ToString("HH:mm:ss.fff");
                    row["Source Address"]      = packet.GetEthernetFrame().GetPacket().GetSourceAsString();
                    row["Destination Address"] = packet.GetEthernetFrame().GetPacket().GetDestinationAsString();
                    row["Source Port"]         = packet.GetEthernetFrame().GetPacket().GetDatagram().GetSourcePort();
                    row["Destination Port"]    = packet.GetEthernetFrame().GetPacket().GetDatagram().GetDestinationPort();

                    dataTable.Rows.Add(row);
                }
            }
        }
예제 #2
0
        public string Read(ReadOnlyBitStream bitStream)
        {
            StringWriter output           = new StringWriter();
            uint         socketIdentifier = bitStream.ReadUInt32();
            bool         isHandshake      = socketIdentifier == 0;

            output.WriteLine("Is Handshake: " + isHandshake);
            output.WriteLine("Socket ID: " + socketIdentifier);

            if (isHandshake)
            {
                string messageIdentifier = "";

                for (int i = 0; i < 4; i++)
                {
                    messageIdentifier += (char)bitStream.ReadByte();
                }

                output.WriteLine("Message ID: " + messageIdentifier);

                if (handshakeStructs.ContainsKey(messageIdentifier))
                {
                    handshakeStructs[messageIdentifier].ReadFromBitStream(bitStream);
                    handshakeStructs[messageIdentifier].WriteToTextWriter(output);
                }
            }
            else
            {
                byte        channel     = bitStream.ReadCrumb();
                byte        resendCount = bitStream.ReadCrumb();
                bool        isSplit     = bitStream.ReadBit();
                Util.UInt11 length      = new Util.UInt11();

                length.ReadFromBitStream(bitStream);

                output.WriteLine("Channel: " + channel);
                output.WriteLine("Resend Count: " + resendCount);
                output.WriteLine("Is Split: " + isSplit);
                output.WriteLine("Length: " + length);

                if (channel == 0)
                {
                    byte messageIdentifier = bitStream.ReadByte();

                    output.Write("Message ID: " + messageIdentifier);

                    if (channel0Structs.ContainsKey(messageIdentifier))
                    {
                        Structure srct = channel0Structs[messageIdentifier];

                        output.WriteLine(" (" + srct.GetType().Name + ")");

                        srct.ReadFromBitStream(bitStream);
                        srct.WriteToTextWriter(output);
                    }
                }
            }

            if (bitStream.GetBitsUnread() > 0)
            {
                output.WriteLine();

                if (bitStream.GetBitsUnread() % 8 == 0)
                {
                    output.WriteLine("Unread Bytes:");
                    byte[] bytes = bitStream.ReadBytes(bitStream.GetBitsUnread() / 8);

                    for (int i = 0; i < bytes.Length; i++)
                    {
                        output.WriteLine(bytes[i]);
                    }
                }
                else
                {
                    output.WriteLine("Unread Bits:");

                    for (int i = 0; i < bitStream.GetBitsUnread(); i++)
                    {
                        output.WriteLine(bitStream.ReadBit() ? 1 : 0);
                    }
                }
            }

            return(output.ToString());
        }