using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Net; namespace Netch.Utils { public static class DnsUtils { /// /// 缓存 /// private static readonly Hashtable Cache = new(); /// /// 查询 /// /// 主机名 /// public static IPAddress? Lookup(string hostname) { try { if (Cache.Contains(hostname)) return Cache[hostname] as IPAddress; var task = Dns.GetHostAddressesAsync(hostname); if (!task.Wait(1000)) return null; if (task.Result.Length == 0) return null; Cache.Add(hostname, task.Result[0]); return task.Result[0]; } catch (Exception) { return null; } } /// /// 查询 /// /// 主机名 /// public static void ClearCache() { Cache.Clear(); } public static IEnumerable Split(string dns) { return dns.SplitRemoveEmptyEntriesAndTrimEntries(','); } public static bool TrySplit(string value, out IEnumerable result, ushort maxCount = 0) { result = Split(value).ToArray(); return maxCount == 0 || result.Count() <= maxCount && result.All(ip => IPAddress.TryParse(ip, out _)); } public static string Join(IEnumerable dns) { return string.Join(",", dns); } } }