public static string WhyUnclean(long xuid) { var reason = "actually-clean"; if (!Client.IsAllowed(xuid)) { reason = "network-ban"; } else if (xuid != 0) { var client = Get(xuid); reason = client.UncleanReason; } return(reason); }
public static bool IsUnclean(long xuid, IPAddress ip) { var unclean = false; if (!Client.IsAllowed(xuid)) { unclean = true; } if (ip != null && !Client.IsAllowed(ip)) { unclean = true; } if (xuid != 0 && !unclean) { var client = Get(xuid); unclean = client.Unclean; } return(unclean); }
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 basePacket = new MatchBaseRequestPacket(reader); var client = Client.Get(basePacket.XUID); /*if (!Client.IsAllowed(basePacket.XUID)) * { * Log.Info(string.Format("Non-allowed client (XUID {0}) tried to get matches", basePacket.XUID.ToString("X16"))); * return; * } * * if (!Client.IsAllowed(client.XUIDAlias)) * { * Log.Info(string.Format("Non-allowed client (XUID {0}) tried to get matches", basePacket.XUID.ToString("X16"))); * return; * }*/ var ipAddress = packet.GetSource().Address; if (!Client.IsAllowed(ipAddress)) { Log.Info(string.Format("Non-allowed client (IP {0}) tried to get matches", ipAddress)); return; } client.SetLastTouched(); client.CurrentState = _playlist; client.SetLastMatched(); if (!Client.IsVersionAllowed(client.GameVersion, client.GameBuild)) { return; } var sessions = from session in Sessions where session.HostXUID == client.XUID && (DateTime.Now - session.LastTouched).TotalSeconds < 120 select session; if (sessions.Count() > 0) { var session = sessions.First(); if (CIServer.IsUnclean(session.HostXUID, packet.GetSource().Address)) { session.Unclean = true; } foreach (var updateClient in session.Clients) { var updClient = Client.Get(updateClient.XUID); updClient.CurrentState = _playlist; updClient.SetLastTouched(); updClient.SetLastMatched(); } } if (_handlers.ContainsKey(basePacket.CommandType)) { _handlers[basePacket.CommandType].HandleCommand(this, client, packet, basePacket); } else { Log.Info(string.Format("Client {0} sent unknown match packet {1}", basePacket.XUID.ToString("X16"), basePacket.CommandType)); } }