using System.Diagnostics.CodeAnalysis; using System.Net; using System.Net.NetworkInformation; namespace FastGithub { /// /// dns的终节点 /// public class DnsIPEndPoint { /// /// IP地址 /// [AllowNull] public string IPAddress { get; set; } /// /// 端口 /// public int Port { get; set; } /// /// 转换为IPEndPoint /// /// public IPEndPoint ToIPEndPoint() { return new IPEndPoint(System.Net.IPAddress.Parse(this.IPAddress), this.Port); } /// /// 验证dns /// 防止使用自己使用自己来解析域名造成死循环 /// /// public bool Validate() { if (System.Net.IPAddress.TryParse(this.IPAddress, out var address) == false) { return false; } if (this.Port == 53 && IsLocalMachineIPAddress(address)) { return false; } return true; } /// /// 是否为本机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; } } }