public void SetFromLog(LogRequestPacket1 packet) { GamerTag = packet.GamerTag; InternalIP = packet.InternalIP; ExternalIP = packet.ExternalIP; GameVersion = packet.GameVersion; GameBuild = packet.GameBuild; CurrentState = 0x416E; // one of the 'non-playlist' IDs used by MW2 SetLastMatched(); SetLastTouched(); }
void server_PacketReceived(object sender, UdpPacketReceivedEventArgs e) { var packet = e.Packet; var reader = packet.GetReader(); var type = reader.ReadByte(); if (type == 0xE) { var request = new LogRequestPacket1(reader); if (request.GameVersion == 0 || (request.InternalIP.Port < 28960 || request.InternalIP.Port > 28970)) { // update 'last touched', possibly re-set state var client = Client.Get(request.XUID); client.SetLastTouched(); if (!client.IsMatched) { client.CurrentState = 0x417D; } // only send 0E 02 00 here var response = packet.MakeResponse(); var writer = response.GetWriter(); writer.Write(new byte[] { 0x0E, 0x02, 0x00 }); response.Send(); } else { bool allowedVersion = true; Log.Data(string.Format("Player connecting {0} from {1} version {2}.{3} XUID {4}", request.GamerTag, request.ExternalIP, request.GameVersion, request.GameBuild, request.XUID.ToString("X16"))); if (!Client.IsVersionAllowed(request.GameVersion, request.GameBuild)) { // no return, we need to keep the version logged for later packets Log.Warn(string.Format("Client {0} attempted to connect with disallowed version {1}.{2}.", request.GamerTag, request.GameVersion, request.GameBuild)); // to send 'fake' data allowedVersion = false; } var client = Client.Get(request.XUID); client.SetFromLog(request); var tempStats = new List<LogStatistics>(); /* tempStats.Add(new LogStatistics(0x2ee0, 1)); tempStats.Add(new LogStatistics(1, 2)); tempStats.Add(new LogStatistics(0x417f, 3)); tempStats.Add(new LogStatistics(0x417e, 4)); tempStats.Add(new LogStatistics(5, 5)); tempStats.Add(new LogStatistics(13, 6)); tempStats.Add(new LogStatistics(0x3a98, 7)); tempStats.Add(new LogStatistics(4, 8)); tempStats.Add(new LogStatistics(3, 9)); tempStats.Add(new LogStatistics(2, 10)); tempStats.Add(new LogStatistics(17, 11)); tempStats.Add(new LogStatistics(17, 12)); tempStats.Add(new LogStatistics(6, 13)); tempStats.Add(new LogStatistics(9, 14)); tempStats.Add(new LogStatistics(15, 16)); tempStats.Add(new LogStatistics(0x416e, 17)); tempStats.Add(new LogStatistics(7, 18)); tempStats.Add(new LogStatistics(0x417d, 19)); tempStats.Add(new LogStatistics(8, 20)); tempStats.Add(new LogStatistics(12, 21)); tempStats.Add(new LogStatistics(16, 22)); tempStats.Add(new LogStatistics(14, 23)); tempStats.Add(new LogStatistics(0x2ee0, 24)); tempStats.Add(new LogStatistics(11, 25)); tempStats.Add(new LogStatistics(10, 26)); */ var responsePacket = new LogResponsePacket1(client.XUID); if (allowedVersion) { responsePacket.SetStatistics(Client.GetStatistics()); } else { var fakeStats = new List<LogStatistics>(); fakeStats.Add(new LogStatistics(1, 28789)); //up fakeStats.Add(new LogStatistics(2, 24932)); //da fakeStats.Add(new LogStatistics(3, 25972)); //te for (short i = 4; i <= 19; i++) { fakeStats.Add(new LogStatistics(i, 1337)); } responsePacket.SetStatistics(fakeStats); /*if (request.GameBuild < 40) { responsePacket.SetBetaClosed(); } else {*/ responsePacket.SetOldBuild(); //} } if ((request.XUID & 0xFFFFFFFF) == 2) { Log.Info(string.Format("Non-allowed client (IDGEN) (XUID {0}) tried to connect", request.XUID)); responsePacket.SetBetaClosed(); } if (!Client.IsAllowed(request.XUID)) { Log.Info(string.Format("Non-allowed client (XUID {0}) tried to connect", request.XUID)); responsePacket.SetBanned(); } if (!Client.IsAllowed(client.XUIDAlias)) { Log.Info(string.Format("Non-allowed client (XUID {0}) tried to connect", request.XUID)); responsePacket.SetBanned(); } var ipAddress = packet.GetSource().Address; if (!Client.IsAllowed(ipAddress)) { Log.Info(string.Format("Non-allowed client (IP {0}) tried to connect", ipAddress)); responsePacket.SetBanned(); } if (!packet.Secure) { if (allowedVersion) { Log.Info(string.Format("Client (IP {0}) tried to connect with insecure packet.", ipAddress)); } responsePacket.SetOldBuild(); } var response = packet.MakeResponse(); responsePacket.Write(response.GetWriter()); response.Send(); } } else if (type == 0xFD) { if (!packet.Secure) { return; } long realID = (0x0110000100000000 | reader.ReadInt32()); long fakeID = (0x0110000100000000 | reader.ReadInt32()); if (realID == fakeID) { return; } var client = Client.Get(realID); client.XUIDAlias = fakeID; } }
void server_PacketReceived(object sender, UdpPacketReceivedEventArgs e) { var packet = e.Packet; var reader = packet.GetReader(); var type = reader.ReadByte(); if (type == 0xE) { var request = new LogRequestPacket1(reader); if (request.GameVersion == 0 || (request.InternalIP.Port < 28960 || request.InternalIP.Port > 28970)) { // update 'last touched', possibly re-set state var client = Client.Get(request.XUID); client.SetLastTouched(); if (!client.IsMatched) { client.CurrentState = 0x417D; } // only send 0E 02 00 here var response = packet.MakeResponse(); var writer = response.GetWriter(); writer.Write(new byte[] { 0x0E, 0x02, 0x00 }); response.Send(); } else { bool allowedVersion = true; Log.Data(string.Format("Player connecting {0} from {1} version {2}.{3} XUID {4}", request.GamerTag, request.ExternalIP, request.GameVersion, request.GameBuild, request.XUID.ToString("X16"))); if (!Client.IsVersionAllowed(request.GameVersion, request.GameBuild)) { // no return, we need to keep the version logged for later packets Log.Warn(string.Format("Client {0} attempted to connect with disallowed version {1}.{2}.", request.GamerTag, request.GameVersion, request.GameBuild)); // to send 'fake' data allowedVersion = false; } var client = Client.Get(request.XUID); client.SetFromLog(request); var tempStats = new List <LogStatistics>(); /* * tempStats.Add(new LogStatistics(0x2ee0, 1)); * tempStats.Add(new LogStatistics(1, 2)); * tempStats.Add(new LogStatistics(0x417f, 3)); * tempStats.Add(new LogStatistics(0x417e, 4)); * tempStats.Add(new LogStatistics(5, 5)); * tempStats.Add(new LogStatistics(13, 6)); * tempStats.Add(new LogStatistics(0x3a98, 7)); * tempStats.Add(new LogStatistics(4, 8)); * tempStats.Add(new LogStatistics(3, 9)); * tempStats.Add(new LogStatistics(2, 10)); * tempStats.Add(new LogStatistics(17, 11)); * tempStats.Add(new LogStatistics(17, 12)); * tempStats.Add(new LogStatistics(6, 13)); * tempStats.Add(new LogStatistics(9, 14)); * tempStats.Add(new LogStatistics(15, 16)); * tempStats.Add(new LogStatistics(0x416e, 17)); * tempStats.Add(new LogStatistics(7, 18)); * tempStats.Add(new LogStatistics(0x417d, 19)); * tempStats.Add(new LogStatistics(8, 20)); * tempStats.Add(new LogStatistics(12, 21)); * tempStats.Add(new LogStatistics(16, 22)); * tempStats.Add(new LogStatistics(14, 23)); * tempStats.Add(new LogStatistics(0x2ee0, 24)); * tempStats.Add(new LogStatistics(11, 25)); * tempStats.Add(new LogStatistics(10, 26)); */ var responsePacket = new LogResponsePacket1(client.XUID); if (allowedVersion) { responsePacket.SetStatistics(Client.GetStatistics()); } else { var fakeStats = new List <LogStatistics>(); fakeStats.Add(new LogStatistics(1, 28789)); //up fakeStats.Add(new LogStatistics(2, 24932)); //da fakeStats.Add(new LogStatistics(3, 25972)); //te for (short i = 4; i <= 19; i++) { fakeStats.Add(new LogStatistics(i, 1337)); } responsePacket.SetStatistics(fakeStats); /*if (request.GameBuild < 40) * { * responsePacket.SetBetaClosed(); * } * else * {*/ responsePacket.SetOldBuild(); //} } if ((request.XUID & 0xFFFFFFFF) == 2) { Log.Info(string.Format("Non-allowed client (IDGEN) (XUID {0}) tried to connect", request.XUID)); responsePacket.SetBetaClosed(); } if (!Client.IsAllowed(request.XUID)) { Log.Info(string.Format("Non-allowed client (XUID {0}) tried to connect", request.XUID)); responsePacket.SetBanned(); } if (!Client.IsAllowed(client.XUIDAlias)) { Log.Info(string.Format("Non-allowed client (XUID {0}) tried to connect", request.XUID)); responsePacket.SetBanned(); } var ipAddress = packet.GetSource().Address; if (!Client.IsAllowed(ipAddress)) { Log.Info(string.Format("Non-allowed client (IP {0}) tried to connect", ipAddress)); responsePacket.SetBanned(); } if (!packet.Secure) { if (allowedVersion) { Log.Info(string.Format("Client (IP {0}) tried to connect with insecure packet.", ipAddress)); } responsePacket.SetOldBuild(); } var response = packet.MakeResponse(); responsePacket.Write(response.GetWriter()); response.Send(); } } else if (type == 0xFD) { if (!packet.Secure) { return; } long realID = (0x0110000100000000 | reader.ReadInt32()); long fakeID = (0x0110000100000000 | reader.ReadInt32()); if (realID == fakeID) { return; } var client = Client.Get(realID); client.XUIDAlias = fakeID; } }