FastGithub/FastGithub.Configuration/DnsConfig.cs
陈国伟 48e994182f 增加http反向代理;
使用IPGlobalProperties获取全局ip;
2021-07-29 13:59:22 +08:00

63 lines
1.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
namespace FastGithub.Configuration
{
/// <summary>
/// dns配置
/// </summary>
public class DnsConfig
{
/// <summary>
/// IP地址
/// </summary>
[AllowNull]
public string IPAddress { get; set; }
/// <summary>
/// 端口
/// </summary>
public int Port { get; set; } = 53;
/// <summary>
/// 转换为IPEndPoint
/// </summary>
/// <returns></returns>
/// <exception cref="FastGithubException"></exception>
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);
}
public override string ToString()
{
return $"{this.IPAddress}:{this.Port}";
}
/// <summary>
/// 是否为本机ip
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
private static bool IsLocalMachineIPAddress(IPAddress address)
{
return IPGlobalProperties
.GetIPGlobalProperties()
.GetUnicastAddresses()
.Any(item => item.Address.Equals(address));
}
}
}