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));
                    }
                }
            }
        }
Exemple #4
0
        public BinaryPacketReader(SniffType type, string fileName, Encoding encoding)
        {
            _sniffType = type;
            _reader    = new BinaryReader(new FileStream(@fileName, FileMode.Open, FileAccess.Read, FileShare.Read), encoding);

            ReadHeader();
        }
Exemple #5
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();
            }
        }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        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));
            }
        }
Exemple #8
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;

                    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();
            }
        }
Exemple #9
0
        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();
            }
        }
Exemple #10
0
 private static IPacketReader GetPacketReader(string fileName, SniffType type)
 {
     return new BinaryPacketReader(type, fileName, Encoding.ASCII);
 }
Exemple #11
0
 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);
 }
 public BinaryPacketWriter(SniffType type, string fileName, Encoding encoding)
 {
     _sniffType = type;
     _writer = new BinaryWriter(new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None), encoding);
 }
Exemple #15
0
 public Reader(string fileName, SniffType type)
 {
     FileName = fileName;
     PacketReader = GetPacketReader(fileName, type);
 }
Exemple #16
0
        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);
            }
        }
Exemple #17
0
 private static IPacketReader GetPacketReader(string fileName, SniffType type)
 {
     return(new BinaryPacketReader(type, fileName, Encoding.ASCII));
 }