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