diff options
Diffstat (limited to 'Impostor-dev/src/Impostor.Server/Utils/IpUtils.cs')
-rw-r--r-- | Impostor-dev/src/Impostor.Server/Utils/IpUtils.cs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/Impostor-dev/src/Impostor.Server/Utils/IpUtils.cs b/Impostor-dev/src/Impostor.Server/Utils/IpUtils.cs new file mode 100644 index 0000000..649d45a --- /dev/null +++ b/Impostor-dev/src/Impostor.Server/Utils/IpUtils.cs @@ -0,0 +1,42 @@ +using System.Linq; +using System.Net; +using System.Net.Sockets; +using Impostor.Api; + +namespace Impostor.Server.Utils +{ + internal static class IpUtils + { + public static string ResolveIp(string ip) + { + // Check if valid ip was entered. + if (!IPAddress.TryParse(ip, out var ipAddress)) + { + // Attempt to resolve DNS. + try + { + var hostAddresses = Dns.GetHostAddresses(ip); + if (hostAddresses.Length == 0) + { + throw new ImpostorConfigException($"Invalid IP Address entered '{ip}'."); + } + + // Use first IPv4 result. + ipAddress = hostAddresses.First(x => x.AddressFamily == AddressFamily.InterNetwork); + } + catch (SocketException) + { + throw new ImpostorConfigException($"Failed to resolve hostname '{ip}'."); + } + } + + // Only IPv4. + if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6) + { + throw new ImpostorConfigException($"Invalid IP Address entered '{ipAddress}', only IPv4 is supported by Among Us."); + } + + return ipAddress.ToString(); + } + } +} |