public BinaryPacketReader(SniffType type, string fileName, Encoding encoding) { _sniffType = type; _reader = new BinaryReader(new FileStream(@fileName, FileMode.Open, FileAccess.Read, FileShare.Read), encoding); ReadHeader(); }
public static void Write(SniffType type, string fileName, Encoding encoding, IEnumerable<Packet> packets) { var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None); using (var writer = new BinaryWriter(fileStream, encoding)) { foreach (var packet in packets) { if (type == SniffType.Pkt) { writer.Write((ushort) packet.Opcode); writer.Write((int) packet.Length); writer.Write((byte) packet.Direction); writer.Write((ulong) Utilities.GetUnixTimeFromDateTime(packet.Time)); writer.Write(packet.GetStream(0)); } else { writer.Write(packet.Opcode); writer.Write((int) packet.Length); writer.Write((int) Utilities.GetUnixTimeFromDateTime(packet.Time)); writer.Write((byte) packet.Direction); writer.Write(packet.GetStream(0)); } } } }
public static void Write(SniffType type, string fileName, Encoding encoding, IEnumerable <Packet> packets) { var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None); using (var writer = new BinaryWriter(fileStream, encoding)) { foreach (var packet in packets) { if (type == SniffType.Pkt) { writer.Write((ushort)packet.Opcode); writer.Write((int)packet.Length); writer.Write((byte)packet.Direction); writer.Write(Utilities.GetUnixTimeFromDateTime(packet.Time)); writer.Write(packet.GetStream(0)); } else { writer.Write(packet.Opcode); writer.Write((int)packet.Length); writer.Write((int)Utilities.GetUnixTimeFromDateTime(packet.Time)); writer.Write((byte)packet.Direction); writer.Write(packet.GetStream(0)); } } } }
public static void Read(string fileName, SniffType type, Action <Tuple <Packet, long, long> > action) { var reader = GetPacketReader(fileName, type); try { int packetNum = 0, count = 0; while (reader.CanRead()) { var packet = reader.Read(packetNum++, fileName); if (packet == null) { continue; } // check for filters var opcodeName = Opcodes.GetOpcodeName(packet.Opcode, packet.Direction); var add = true; if (Settings.Filters.Length > 0) { add = opcodeName.MatchesFilters(Settings.Filters); } // check for ignore filters if (add && Settings.IgnoreFilters.Length > 0) { add = !opcodeName.MatchesFilters(Settings.IgnoreFilters); } if (add) { action(Tuple.Create(packet, reader.GetCurrentSize(), reader.GetTotalSize())); if (Settings.FilterPacketsNum > 0 && count++ == Settings.FilterPacketsNum) { break; } } else { packet.ClosePacket(); } } } catch (Exception ex) { Trace.WriteLine(ex.Data); Trace.WriteLine(ex.GetType()); Trace.WriteLine(ex.Message); Trace.WriteLine(ex.StackTrace); } finally { reader.Dispose(); } }
public void LoadSniffFileIntoDatatable(string fileName) { System.IO.StreamReader file = new System.IO.StreamReader(fileName); var line = file.ReadLine(); file.Close(); if (line == "# TrinityCore - WowPacketParser") { sniffType = SniffType.Trinity; waypoints.Clear(); waypoints = GetDataSourceFromSniffFile(fileName); if (Properties.Settings.Default.ObjectUpdate == true) { if (ActiveForm != null) { ActiveForm.Text = "Waypoint Creator - Movement loaded from SMSG_UPDATE_OBJECT"; } } else { if (ActiveForm != null) { ActiveForm.Text = "Waypoint Creator - Movement loaded from SMSG_ON_MONSTER_MOVE"; } } } else if (line == "# UDBParser") { sniffType = SniffType.UDB; waypoints.Clear(); waypoints = GetDataSourceFromSniffFile(fileName); if (Properties.Settings.Default.ObjectUpdate == true) { if (ActiveForm != null) { ActiveForm.Text = "Waypoint Creator - Movement loaded from SMSG_UPDATE_OBJECT"; } } else { if (ActiveForm != null) { ActiveForm.Text = "Waypoint Creator - Movement loaded from SMSG_ON_MONSTER_MOVE"; } } } else { MessageBox.Show(saveFileDialog.FileName + " is not a valid TrinityCore or UDB parsed sniff file.", "File Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); } }
private static IPacketReader GetPacketReader(string fileName, SniffType type) { switch (type) { case SniffType.Sqlite: return(new SqLitePacketReader(type, fileName, Encoding.ASCII)); default: // .pkt return(new BinaryPacketReader(type, fileName, Encoding.ASCII)); } }
public static void Read(string fileName, SniffType type, Action<Tuple<Packet, long, long>> action) { var reader = GetPacketReader(fileName, type); try { int packetNum = 0, count = 0; while (reader.CanRead()) { var packet = reader.Read(packetNum, fileName); if (packet == null) continue; if (packetNum++ == 0) { // determine build version based on date of first packet if not specified otherwise if (ClientVersion.IsUndefined()) ClientVersion.SetVersion(packet.Time); } // check for filters var opcodeName = Opcodes.GetOpcodeName(packet.Opcode, packet.Direction); var add = true; if (Settings.Filters.Length > 0) add = opcodeName.MatchesFilters(Settings.Filters); // check for ignore filters if (add && Settings.IgnoreFilters.Length > 0) add = !opcodeName.MatchesFilters(Settings.IgnoreFilters); if (add) { action(Tuple.Create(packet, reader.GetCurrentSize(), reader.GetTotalSize())); if (Settings.FilterPacketsNum > 0 && count++ == Settings.FilterPacketsNum) break; } else packet.ClosePacket(); } } catch (Exception ex) { Trace.WriteLine(ex.Data); Trace.WriteLine(ex.GetType()); Trace.WriteLine(ex.Message); Trace.WriteLine(ex.StackTrace); } finally { reader.Dispose(); } }
public SqLitePacketReader(SniffType type, string fileName, Encoding encoding) { _connection = new SQLiteConnection(new SQLiteConnectionStringBuilder() { DataSource = fileName }.ConnectionString); _connection.Open(); ReadHeader(); _num = 0; using (var command = _connection.CreateCommand()) { command.CommandText = "SELECT count(*) FROM packets;"; _count = Convert.ToInt32(command.ExecuteScalar()); } using (var command = _connection.CreateCommand()) { command.CommandText = "SELECT id, opcode, timestamp, direction, data FROM packets;"; _reader = command.ExecuteReader(); } }
private static IPacketReader GetPacketReader(string fileName, SniffType type) { return new BinaryPacketReader(type, fileName, Encoding.ASCII); }
public Reader(string fileName, SniffType type) { FileName = fileName; PacketReader = GetPacketReader(fileName, type); }
public FabiPacketReader(SniffType type, string fileName, Encoding encoding) { ClientVersion.SetVersion(ClientVersionBuild.V5_3_0_17128); _reader = new StreamReader(fileName); }
public BinaryPacketWriter(SniffType type, string fileName, Encoding encoding) { _sniffType = type; _writer = new BinaryWriter(new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None), encoding); }
private static void ReadFile(string file, string[] filters, string[] ignoreFilters, int packetNumberLow, int packetNumberHigh, int packetsToRead, DumpFormatType dumpFormat, int threads, bool sqlOutput, bool prompt) { string fileName = Path.GetFileName(file); Console.WriteLine("{0}: Opening file", fileName); Console.WriteLine("{0}: Reading packets...", fileName); try { var packets = Reader.Read(file, filters, ignoreFilters, packetNumberLow, packetNumberHigh, packetsToRead, (dumpFormat == DumpFormatType.SummaryHeader)); if (packets.Count <= 0) { Console.WriteLine("{0}: Packet count is 0", fileName); return; } if (dumpFormat == DumpFormatType.Bin || dumpFormat == DumpFormatType.Pkt) { SniffType format = dumpFormat == DumpFormatType.Bin ? SniffType.Bin : SniffType.Pkt; var fileExtension = dumpFormat.ToString().ToLower(); Console.WriteLine("{0}: Copying {1} packets to .{2} format...", fileName, packets.Count, fileExtension); var dumpFileName = Path.ChangeExtension(file, null) + "_excerpt." + fileExtension; var writer = new BinaryPacketWriter(format, dumpFileName, Encoding.ASCII); writer.Write(packets); } else { var numberOfThreads = threads != 0 ? threads.ToString() : "a recommended number of"; Console.WriteLine("{0}: Assumed version: {1}", fileName, ClientVersion.GetVersionString()); Console.WriteLine("{0}: Parsing {1} packets with {2} threads...", fileName, packets.Count, numberOfThreads); Statistics.Total = (uint)packets.Count; Statistics.StartTime = DateTime.Now; var outFileName = Path.ChangeExtension(file, null) + "_parsed"; var outLogFileName = outFileName + ".txt"; var outSqlFileName = outFileName + ".sql"; SQLStore.Initialize(outSqlFileName, sqlOutput); bool headersOnly = (dumpFormat == DumpFormatType.TextHeader || dumpFormat == DumpFormatType.SummaryHeader); if (threads == 0) // Number of threads is automatically choosen by the Parallel library { packets.AsParallel().SetCulture().ForAll(packet => Handler.Parse(packet, headersOnly)); } else { packets.AsParallel().SetCulture().WithDegreeOfParallelism(threads).ForAll(packet => Handler.Parse(packet, headersOnly)); } Console.WriteLine("{0}: Writing data to file...", fileName); if (sqlOutput) { // Experimental, will remove SQLStore.WriteData(Builder.QuestTemplate()); SQLStore.WriteData(Builder.NpcTrainer()); SQLStore.WriteData(Builder.NpcVendor()); SQLStore.WriteData(Builder.NpcTemplate()); SQLStore.WriteData(Builder.GameObjectTemplate()); SQLStore.WriteData(Builder.PageText()); SQLStore.WriteData(Builder.NpcText()); SQLStore.WriteData(Builder.Gossip()); SQLStore.WriteData(Builder.Loot()); } SQLStore.WriteToFile(); if (dumpFormat != DumpFormatType.None) { Handler.WriteToFile(packets, outLogFileName); } Statistics.EndTime = DateTime.Now; Console.WriteLine(Statistics.Stats(fileName)); Console.WriteLine("{0}: Saved file to '{1}'", fileName, outLogFileName); Console.WriteLine(); Statistics.Reset(); } } catch (Exception ex) { Console.WriteLine(ex.GetType()); Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } finally { EndPrompt(prompt); } }
private static IPacketReader GetPacketReader(string fileName, SniffType type) { return(new BinaryPacketReader(type, fileName, Encoding.ASCII)); }