public static void WritePacket(string clientInfo, PacketWriter serverPacket = null, PacketReader clientPacket = null) { lock (syncObj) { try { StringBuilder sb = new StringBuilder(); TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1); uint secondsSinceEpoch = (uint)t.TotalSeconds; if (serverPacket != null) { sb.Append(string.Format("Time: {0};OpcodeType: SMSG;OpcodeValue: {1};Packet: ", secondsSinceEpoch, (ushort)serverPacket.Opcode)); if (serverPacket.Size - 2 != 0) { var data = serverPacket.ReadDataToSend().ToList(); data.RemoveRange(0, 4); data.ForEach(b => { sb.Append(HexStringTable[b]); }); } sb.Append(";"); } if (clientPacket != null) { sb.Append(string.Format("Time: {0};OpcodeType: CMSG;OpcodeValue: {1};Packet: ", secondsSinceEpoch, (ushort)clientPacket.Opcode)); if (clientPacket.Size - 2 != 0) { var data = clientPacket.Storage.ToList(); data.ForEach(b => { sb.Append(HexStringTable[b]); }); } sb.Append(";"); } string name = clientInfo.Replace(":", "_"); logWriter = TextWriter.Synchronized(File.AppendText(string.Format("Packet_{0}.dump", name))); logWriter.WriteLine(sb.ToString()); logWriter.Flush(); } finally { logWriter.Close(); } } }
public void Send(ref PacketWriter packet) { if (packet.Opcode == 0) return; var buffer = packet.ReadDataToSend(); try { if (Crypt.IsInitialized) { uint totalLength = (uint)packet.Size - 2; totalLength <<= 13; totalLength |= ((uint)packet.Opcode & 0x1FFF); var header = BitConverter.GetBytes(totalLength); Crypt.Encrypt(header); buffer[0] = header[0]; buffer[1] = header[1]; buffer[2] = header[2]; buffer[3] = header[3]; } clientSocket.Send(buffer, 0, buffer.Length, SocketFlags.None); string clientInfo = ((IPEndPoint)clientSocket.RemoteEndPoint).Address + ":" + ((IPEndPoint)clientSocket.RemoteEndPoint).Port; PacketLog.WritePacket(clientInfo, packet); packet.Flush(); } catch (Exception ex) { Log.Message(LogType.Error, "{0}", ex.Message); Log.Message(); clientSocket.Close(); } }
public static void WritePacket(string clientInfo, PacketWriter serverPacket = null, PacketReader clientPacket = null) { lock (syncObj) { try { StringBuilder sb = new StringBuilder(); if (serverPacket != null) { sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Client: {0}", clientInfo)); sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Time: {0}", DateTime.Now.ToString())); if (Enum.IsDefined(typeof(ServerMessage), serverPacket.Opcode)) { sb.AppendLine("Type: ServerMessage"); sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Name: {0}", Enum.GetName(typeof(ServerMessage), serverPacket.Opcode))); } sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Value: 0x{0:X} ({1})", serverPacket.Opcode, serverPacket.Opcode)); sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Length: {0}", serverPacket.Size - 2)); sb.AppendLine("|----------------------------------------------------------------|"); sb.AppendLine("| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |"); sb.AppendLine("|----------------------------------------------------------------|"); sb.Append("|"); if (serverPacket.Size - 2 != 0) { var data = serverPacket.ReadDataToSend().ToList(); data.RemoveRange(0, 4); byte count = 0; data.ForEach(b => { if (b <= 0xF) sb.Append(String.Format(CultureInfo.InvariantCulture, " 0{0:X} ", b)); else sb.Append(String.Format(CultureInfo.InvariantCulture, " {0:X} ", b)); if (count == 15) { sb.Append("|"); sb.AppendLine(); sb.Append("|"); count = 0; } else count++; }); sb.AppendLine(""); sb.AppendLine("|----------------------------------------------------------------|"); } sb.AppendLine(""); } if (clientPacket != null) { sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Client: {0}", clientInfo)); sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Time: {0}", DateTime.Now.ToString())); sb.AppendLine("Type: ClientMessage"); if (Enum.IsDefined(typeof(ClientMessage), clientPacket.Opcode)) sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Name: {0}", clientPacket.Opcode)); else sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Name: {0}", "Unknown")); sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Value: 0x{0:X} ({1})", (ushort)clientPacket.Opcode, (ushort)clientPacket.Opcode)); sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Length: {0}", clientPacket.Size)); sb.AppendLine("|----------------------------------------------------------------|"); sb.AppendLine("| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |"); sb.AppendLine("|----------------------------------------------------------------|"); sb.Append("|"); if (clientPacket.Size - 2 != 0) { var data = clientPacket.Storage.ToList(); byte count = 0; data.ForEach(b => { if (b <= 0xF) sb.Append(String.Format(CultureInfo.InvariantCulture, " 0{0:X} ", b)); else sb.Append(String.Format(CultureInfo.InvariantCulture, " {0:X} ", b)); if (count == 15) { sb.Append("|"); sb.AppendLine(); sb.Append("|"); count = 0; } else count++; }); sb.AppendLine(); sb.Append("|----------------------------------------------------------------|"); } sb.AppendLine(""); } logWriter = TextWriter.Synchronized(File.AppendText("Packet.log")); logWriter.WriteLine(sb.ToString()); logWriter.Flush(); } finally { logWriter.Close(); } } }
public void Send(PacketWriter packet) { if (packet == null) return; DataBuffer = packet.ReadDataToSend(true); try { clientSocket.Send(DataBuffer, DataBuffer.Length, SocketFlags.None); packet.Flush(); } catch (SocketException ex) { Log.Message(LogType.ERROR, "{0}", ex.Message); Log.Message(); clientSocket.Close(); } }
public void HandleRealmList(PacketReader data) { Log.Message(LogType.NORMAL, "RealmList"); using (var realmData = new PacketWriter()) { Realms.ToList().ForEach(r => { using (var result = DB.Characters.Select("SELECT COUNT(*) as Count FROM characters WHERE AccountId = ? AND RealmId = ?", account.Id, r.Value.Id)) { var charCount = result.Read<byte>(0, "Count"); realmData.WriteUInt8(1); realmData.WriteUInt8(0); realmData.WriteUInt8(0); realmData.WriteCString(r.Key); realmData.WriteCString(r.Value.IP + ":" + r.Value.Port); realmData.WriteFloat(0); realmData.WriteUInt8(charCount); realmData.WriteUInt8(1); realmData.WriteUInt8(0x2C); } }); using (var realmList = new PacketWriter()) { realmList.WriteUInt8((byte)ClientLink.CMD_REALM_LIST); realmList.WriteUInt16((ushort)(realmData.BaseStream.Length + 8)); realmList.WriteUInt32(0); realmList.WriteUInt16((ushort)Realms.Count); realmList.WriteBytes(realmData.ReadDataToSend()); realmList.WriteUInt8(0); realmList.WriteUInt8(0x10); Send(realmList); } } }
public async void Send(PacketWriter packet) { DataBuffer = packet.ReadDataToSend(true); try { DataWriter writer = new DataWriter(clientSocket.OutputStream); writer.WriteBytes(DataBuffer); await writer.StoreAsync(); packet.Flush(); } catch (Exception ex) { Log.Message(LogType.ERROR, "{0}", ex.Message); Log.Message(); clientSocket.Dispose(); } }
public void HandleRealmList(RealmClass session, PacketReader data) { Log.Message(LogType.NORMAL, "RealmList"); PacketWriter realmData = new PacketWriter(); foreach (var r in Realms) { realmData.WriteUInt8(1); realmData.WriteUInt8(0); realmData.WriteUInt8(0); realmData.WriteCString(r.Name); realmData.WriteCString(r.IP + ":" + r.Port); realmData.WriteFloat(0); realmData.WriteUInt8(0); // CharCount realmData.WriteUInt8(1); realmData.WriteUInt8(0x2C); } PacketWriter realmList = new PacketWriter(); realmList.WriteUInt8((byte)ClientLink.CMD_REALM_LIST); realmList.WriteUInt16((ushort)(realmData.BaseStream.Length + 8)); realmList.WriteUInt32(0); realmList.WriteUInt16((ushort)Realms.Count); realmList.WriteBytes(realmData.ReadDataToSend()); realmList.WriteUInt8(0); realmList.WriteUInt8(0x10); session.Send(realmList); }
public static async void WritePacket(string clientInfo, PacketWriter serverPacket = null, PacketReader clientPacket = null) { StorageFolder localFolder = ApplicationData.Current.LocalFolder; StorageFile logFile = await localFolder.CreateFileAsync("Packet.log", CreationCollisionOption.OpenIfExists); StringBuilder outPut = new StringBuilder(); if (serverPacket != null) { outPut.AppendLine(String.Format("Client: {0}", clientInfo)); if (Enum.IsDefined(typeof(LegacyMessage), serverPacket.Opcode)) { outPut.AppendLine("Type: LegacyMessage"); outPut.AppendLine(String.Format("Name: {0}", Enum.GetName(typeof(LegacyMessage), serverPacket.Opcode))); } else if (Enum.IsDefined(typeof(JAMCMessage), serverPacket.Opcode)) { outPut.AppendLine("Type: JAMCMessage"); outPut.AppendLine(String.Format("Name: {0}", Enum.GetName(typeof(JAMCMessage), serverPacket.Opcode))); } else if (Enum.IsDefined(typeof(Message), serverPacket.Opcode)) { outPut.AppendLine("Type: Message"); outPut.AppendLine(String.Format("Name: {0}", Enum.GetName(typeof(Message), serverPacket.Opcode))); } else { outPut.AppendLine("Type: JAMCCMessage"); outPut.AppendLine(String.Format("Name: {0}", Enum.GetName(typeof(JAMCCMessage), serverPacket.Opcode))); } outPut.AppendLine(String.Format("Value: 0x{0:X} ({1})", serverPacket.Opcode, serverPacket.Opcode)); outPut.AppendLine(String.Format("Length: {0}", serverPacket.Size - 2)); outPut.AppendLine("|----------------------------------------------------------------|"); outPut.AppendLine("| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |"); outPut.AppendLine("|----------------------------------------------------------------|"); outPut.Append("|"); if (serverPacket.Size - 2 != 0) { var data = serverPacket.ReadDataToSend().ToList(); data.RemoveRange(0, 4); byte count = 0; foreach (var b in data) { if (b <= 0xF) outPut.Append(String.Format(" 0{0:X} ", b)); else outPut.Append(String.Format(" {0:X} ", b)); if (count == 15) { outPut.Append("|"); outPut.AppendLine(); outPut.Append("|"); count = 0; } else count++; } outPut.AppendLine(""); outPut.AppendLine("|----------------------------------------------------------------|"); } outPut.AppendLine(""); outPut.AppendLine(""); } if (clientPacket != null) { outPut.AppendLine(String.Format("Client: {0}", clientInfo)); outPut.AppendLine("Type: ClientMessage"); if (Enum.IsDefined(typeof(ClientMessage), clientPacket.Opcode)) outPut.AppendLine(String.Format("Name: {0}", clientPacket.Opcode)); else outPut.AppendLine(String.Format("Name: {0}", "Unknown")); outPut.AppendLine(String.Format("Value: 0x{0:X} ({1})", (ushort)clientPacket.Opcode, (ushort)clientPacket.Opcode)); outPut.AppendLine(String.Format("Length: {0}", clientPacket.Size)); outPut.AppendLine("|----------------------------------------------------------------|"); outPut.AppendLine("| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |"); outPut.AppendLine("|----------------------------------------------------------------|"); outPut.Append("|"); if (clientPacket.Size - 2 != 0) { var data = clientPacket.Storage.ToList(); byte count = 0; foreach (var b in data) { if (b <= 0xF) outPut.Append(String.Format(" 0{0:X} ", b)); else outPut.Append(String.Format(" {0:X} ", b)); if (count == 15) { outPut.Append("|"); outPut.AppendLine(); outPut.Append("|"); count = 0; } else count++; } outPut.AppendLine(); outPut.Append("|----------------------------------------------------------------|"); } outPut.AppendLine(""); outPut.AppendLine(""); } await FileIO.AppendTextAsync(logFile, outPut.ToString()); }
public void Send(PacketWriter packet) { DataBuffer = packet.ReadDataToSend(true); try { clientSocket.BeginSend(DataBuffer, 0, DataBuffer.Length, SocketFlags.None, new AsyncCallback(FinishSend), clientSocket); packet.Flush(); } catch (Exception ex) { Log.Message(LogType.ERROR, "{0}", ex.Message); Log.Message(); clientSocket.Close(); } }
public static void WritePacket(string clientInfo, PacketWriter serverPacket = null, PacketReader clientPacket = null) { using (StreamWriter logWriter = File.AppendText("Packet.log")) { if (serverPacket != null) { logWriter.WriteLine(String.Format("Client: {0}", clientInfo)); if (Enum.IsDefined(typeof(LegacyMessage), serverPacket.Opcode)) { logWriter.WriteLine("Type: LegacyMessage"); logWriter.WriteLine(String.Format("Name: {0}", Enum.GetName(typeof(LegacyMessage), serverPacket.Opcode))); } else if (Enum.IsDefined(typeof(JAMCMessage), serverPacket.Opcode)) { logWriter.WriteLine("Type: JAMCMessage"); logWriter.WriteLine(String.Format("Name: {0}", Enum.GetName(typeof(JAMCMessage), serverPacket.Opcode))); } else if (Enum.IsDefined(typeof(Message), serverPacket.Opcode)) { logWriter.WriteLine("Type: Message"); logWriter.WriteLine(String.Format("Name: {0}", Enum.GetName(typeof(Message), serverPacket.Opcode))); } else { logWriter.WriteLine("Type: JAMCCMessage"); logWriter.WriteLine(String.Format("Name: {0}", Enum.GetName(typeof(JAMCCMessage), serverPacket.Opcode))); } logWriter.WriteLine(String.Format("Value: 0x{0:X} ({1})", serverPacket.Opcode, serverPacket.Opcode)); logWriter.WriteLine(String.Format("Length: {0}", serverPacket.Size - 2)); logWriter.WriteLine("|----------------------------------------------------------------|"); logWriter.WriteLine("| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |"); logWriter.WriteLine("|----------------------------------------------------------------|"); logWriter.Write("|"); if (serverPacket.Size - 2 != 0) { var data = serverPacket.ReadDataToSend().ToList(); data.RemoveRange(0, 4); byte count = 0; data.ForEach(b => { if (b <= 0xF) logWriter.Write(String.Format(" 0{0:X} ", b)); else logWriter.Write(String.Format(" {0:X} ", b)); if (count == 15) { logWriter.Write("|"); logWriter.WriteLine(); logWriter.Write("|"); count = 0; } else count++; }); logWriter.WriteLine(""); logWriter.WriteLine("|----------------------------------------------------------------|"); } logWriter.WriteLine(""); logWriter.WriteLine(""); logWriter.Close(); } if (clientPacket != null) { logWriter.WriteLine(String.Format("Client: {0}", clientInfo)); logWriter.WriteLine("Type: ClientMessage"); if (Enum.IsDefined(typeof(ClientMessage), clientPacket.Opcode)) logWriter.WriteLine(String.Format("Name: {0}", clientPacket.Opcode)); else logWriter.WriteLine(String.Format("Name: {0}", "Unknown")); logWriter.WriteLine(String.Format("Value: 0x{0:X} ({1})", (ushort)clientPacket.Opcode, (ushort)clientPacket.Opcode)); logWriter.WriteLine(String.Format("Length: {0}", clientPacket.Size)); logWriter.WriteLine("|----------------------------------------------------------------|"); logWriter.WriteLine("| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |"); logWriter.WriteLine("|----------------------------------------------------------------|"); logWriter.Write("|"); if (clientPacket.Size - 2 != 0) { var data = clientPacket.Storage.ToList(); byte count = 0; data.ForEach(b => { if (b <= 0xF) logWriter.Write(String.Format(" 0{0:X} ", b)); else logWriter.Write(String.Format(" {0:X} ", b)); if (count == 15) { logWriter.Write("|"); logWriter.WriteLine(); logWriter.Write("|"); count = 0; } else count++; }); logWriter.WriteLine(); logWriter.Write("|----------------------------------------------------------------|"); } logWriter.WriteLine(""); logWriter.WriteLine(""); logWriter.Close(); } } }