using System.Diagnostics.CodeAnalysis; using System.Net; using System.Net.NetworkInformation; namespace FastGithub { /// /// dns配置 /// public class DnsConfig { /// /// IP地址 /// [AllowNull] public string IPAddress { get; set; } /// /// 端口 /// public int Port { get; set; } = 53; /// /// 转换为IPEndPoint /// /// /// public IPEndPoint ToIPEndPoint() { if (System.Net.IPAddress.TryParse(this.IPAddress, out var address) == false) { throw new FastGithubException($"无效的ip:{this.IPAddress}"); } if (this.Port == 53 && IsLocalMachineIPAddress(address)) { throw new FastGithubException($"配置的dns值不能指向{nameof(FastGithub)}自身:{this.IPAddress}:{this.Port}"); } return new IPEndPoint(address, this.Port); } /// /// 是否为本机ip /// /// /// private static bool IsLocalMachineIPAddress(IPAddress address) { foreach (var @interface in NetworkInterface.GetAllNetworkInterfaces()) { foreach (var addressInfo in @interface.GetIPProperties().UnicastAddresses) { if (addressInfo.Address.Equals(address)) { return true; } } } return false; } } }