public void CheckIp(Torch.API.IPlayer Player) { if (Player == null) { Log.Info($"Cannont check for IP, player in Null"); return; } ulong steamid = Player.SteamId; var steamid_backup = MyEventContext.Current.Sender.Value; if (steamid == 0) { steamid = steamid_backup; } var state = new MyP2PSessionState(); Sandbox.Engine.Networking.MyGameService.Peer2Peer.GetSessionState(steamid, ref state); var ip = new IPAddress(BitConverter.GetBytes(state.RemoteIP).Reverse().ToArray()); foreach (var account in PlayersAccounts) { if (account.KnownIps.Contains(ip.ToString()) && account.Player != Player.Name) { Log.Warn($"WARNING! {Player.Name} shares the same IP address as {account.Player}"); } } }
//Largely copied from SE private void ValidateAuthTicketResponse(ulong steamId, JoinResult response, ulong steamOwner) { var state = new MyP2PSessionState(); MySteamServiceWrapper.Static.Peer2Peer.GetSessionState(steamId, ref state); var ip = new IPAddress(BitConverter.GetBytes(state.RemoteIP).Reverse().ToArray()); Torch.CurrentSession.KeenSession.PromotedUsers.TryGetValue(steamId, out MyPromoteLevel promoteLevel); _log.Debug($"ValidateAuthTicketResponse(user={steamId}, response={response}, owner={steamOwner}, permissions={promoteLevel})"); _log.Info($"Connection attempt by {steamId} from {ip}"); if (IsProfiling(steamId)) { _log.Warn($"Rejecting user {steamId} for using Profiler/ModSDK!"); UserRejected(steamId, JoinResult.ProfilingNotAllowed); } if (Players.ContainsKey(steamId)) { _log.Warn($"Player {steamId} has already joined!"); UserRejected(steamId, JoinResult.AlreadyJoined); } else if (Torch.CurrentSession.KeenSession.OnlineMode == MyOnlineModeEnum.OFFLINE && promoteLevel < MyPromoteLevel.Admin) { _log.Warn($"Rejecting user {steamId}, world is set to offline and user is not admin."); UserRejected(steamId, JoinResult.TicketCanceled); } else if (MySandboxGame.ConfigDedicated.GroupID == 0uL) { RunEvent(new ValidateAuthTicketEvent(steamId, steamOwner, response, 0, true, false)); } else if (_getServerAccountType(MySandboxGame.ConfigDedicated.GroupID) != MyGameServiceAccountType.Clan) { UserRejected(steamId, JoinResult.GroupIdInvalid); } else if (MyGameService.GameServer.RequestGroupStatus(steamId, MySandboxGame.ConfigDedicated.GroupID)) { lock (_waitingForGroupLocal) { if (_waitingForGroupLocal.Count >= _waitListSize) { _waitingForGroupLocal.RemoveAt(0); } _waitingForGroupLocal.Add(new WaitingForGroup(steamId, response, steamOwner)); } } else { UserRejected(steamId, JoinResult.SteamServersOffline); } }
private void OnTick() { this.m_ticks++; if (this.m_ticks > 12) { MyP2PSessionState state = new MyP2PSessionState(); MyGameService.Peer2Peer.GetSessionState(base.ServerId, ref state); base.IsConnectionDirect = !state.UsingRelay; base.IsConnectionAlive = state.ConnectionActive; this.m_ticks = 0; } }
async Task LoadIpLocation(ulong steamId) { // Get the public IP of the Steam player var state = new MyP2PSessionState(); var networking = MySteamGameService_Networking.Value; networking.Peer2Peer.GetSessionState(steamId, ref state); var ip = BitConverter.GetBytes(state.RemoteIP).Reverse().ToArray(); var ipAddress = new IPAddress(ip).ToString(); // Get the location var location = await _ipstackEndpoints.GetLocationOrNullAsync(ipAddress); _ipLocations[steamId] = location ?? new IpstackLocation(); }
public void CheckIp(Torch.API.IPlayer Player) { var state = new MyP2PSessionState(); Sandbox.Engine.Networking.MyGameService.Peer2Peer.GetSessionState(Player.SteamId, ref state); var ip = new IPAddress(BitConverter.GetBytes(state.RemoteIP).Reverse().ToArray()); foreach (var account in PlayersAccounts) { if (account.KnownIps.Contains(ip.ToString()) && account.Player != Player.Name) { Log.Warn($"WARNING! {Player.Name} shares the same IP address as {account.Player}"); } } }
/// <summary> /// Get Players IP address /// </summary> /// <param name="steamId">SteamId of the player</param> /// <returns></returns> public static IPAddress GetIPAddressOfClient(ulong steamId) { try { var state = new MyP2PSessionState(); if (!MySteamServiceWrapper.Static.Peer2Peer.GetSessionState(steamId, ref state)) { return(null); } return(new IPAddress(BitConverter.GetBytes(state.RemoteIP).Reverse().ToArray())); } catch (Exception) { return(null); } }
public void GenerateAccount(Torch.API.IPlayer player) { try { var state = new MyP2PSessionState(); Sandbox.Engine.Networking.MyGameService.Peer2Peer.GetSessionState(player.SteamId, ref state); var ip = new IPAddress(BitConverter.GetBytes(state.RemoteIP).Reverse().ToArray()); ulong steamid = player.SteamId; PlayerAccountData data = new PlayerAccountData(); bool found = false; foreach (var Account in PlayersAccounts) { if (Account.SteamID == steamid) { if (!Account.KnownIps.Contains(ip.ToString()) && ip.ToString() != "0.0.0.0") { Account.KnownIps.Add(ip.ToString()); } if (Account.IdentityID == 0L && !string.IsNullOrEmpty(Account.Player)) { Account.IdentityID = Utilities.GetIdentityByNameOrIds(Account.Player)?.IdentityId ?? 0L; UpdatePlayerAccount(Account); } found = true; break; } } if (!found) { Log.Info($"Creating new account object for {player.Name}"); data.SteamID = steamid; data.Player = player.Name; data.Rank = EssentialsPlugin.Instance.Config.DefaultRank; data.KnownIps.Add(ip.ToString()); PlayersAccounts.Add(data); SaveAccountData(); return; } } catch (Exception e) { Log.Error($"Exception creating account for {player.Name} {e.ToString()}"); } }
public void GenerateAccount(Torch.API.IPlayer player) { try { ulong steamid = 0; var steamid_backup = MyEventContext.Current.Sender.Value; System.Net.IPAddress ip; if (player == null || player.SteamId == 0) { steamid = steamid_backup; } else { steamid = player.SteamId; } if (steamid != 0) { var state = new MyP2PSessionState(); Sandbox.Engine.Networking.MyGameService.Peer2Peer.GetSessionState(steamid, ref state); ip = new IPAddress(BitConverter.GetBytes(state.RemoteIP).Reverse().ToArray()); if (ip == null) { return; } } else { ip = null; } // Disconnect client with Ip 0.0.0.0 to prevent SteamLib Crash. if (ip != null) { if (ip.ToString() == "0.0.0.0") { MyMultiplayer.Static.DisconnectClient(steamid); Log.Info($"Detected IP: {ip} from SteamID {steamid} Client was disconnected"); } } PlayerAccountData data = new PlayerAccountData(); bool found = false; foreach (var Account in PlayersAccounts) { if (Account.SteamID == steamid) { if (!Account.KnownIps.Contains(ip.ToString()) && ip.ToString() != "0.0.0.0") { Account.KnownIps.Add(ip.ToString()); } if (Account.IdentityID == 0L && !string.IsNullOrEmpty(Account.Player)) { Account.IdentityID = Utilities.GetIdentityByNameOrIds(Account.Player)?.IdentityId ?? 0L; UpdatePlayerAccount(Account); } if (ip != null) { if (!Account.KnownIps.Contains(ip.ToString()) && ip.ToString() != "0.0.0.0") { if (Account != null && Account.KnownIps != null) { Account.KnownIps.Add(ip.ToString()); } else { Log.Info($"No account KnowIps exist for IP: {ip}"); } } } found = true; break; } } if (!found) { if (player == null) { Log.Info($"Cannont Create new account Player is Null"); return; } Log.Info($"Creating new account object for {player.Name}"); if (steamid != 0) { data.SteamID = steamid; } else { data.SteamID = steamid_backup; } data.Player = player.Name; data.Rank = EssentialsPlugin.Instance.Config.DefaultRank; if (ip != null) { data.KnownIps.Add(ip.ToString()); } PlayersAccounts.Add(data); SaveAccountData(); return; } if (steamid == 0) { Log.Info($"Cannont Create new account for player, no steamid or IP detected, maybe next time."); } } catch { Log.Error($"Creating NEW account for {player.Name}, Player was not found in List."); } }