From 52b5272c180e7292ea2e99579b1cf819f40fddcb Mon Sep 17 00:00:00 2001 From: xljiulang <366193849@qq.com> Date: Thu, 17 Jun 2021 22:09:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0DnsDomainAddressProvider?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FastGithub.Dns/FastGithub.Dns.csproj | 6 +- .../DnsDomainAddressProvider.cs | 72 ++++++++++++++++++ .../LocalDomainAddressProvider.cs | 73 ------------------- ...ovider.cs => MetaDomainAddressProvider.cs} | 27 ++----- FastGithub.Scanner/FastGithub.Scanner.csproj | 7 +- FastGithub.Scanner/GithubOptions.cs | 14 ++-- FastGithub.Scanner/IPRange.json | 36 --------- FastGithub/appsettings.json | 32 ++++++-- 8 files changed, 114 insertions(+), 153 deletions(-) create mode 100644 FastGithub.Scanner/DomainAddressProviders/DnsDomainAddressProvider.cs delete mode 100644 FastGithub.Scanner/DomainAddressProviders/LocalDomainAddressProvider.cs rename FastGithub.Scanner/DomainAddressProviders/{RemoteDomainAddressProvider.cs => MetaDomainAddressProvider.cs} (69%) delete mode 100644 FastGithub.Scanner/IPRange.json diff --git a/FastGithub.Dns/FastGithub.Dns.csproj b/FastGithub.Dns/FastGithub.Dns.csproj index a399977..fa0e740 100644 --- a/FastGithub.Dns/FastGithub.Dns.csproj +++ b/FastGithub.Dns/FastGithub.Dns.csproj @@ -6,10 +6,6 @@ - - - - - + diff --git a/FastGithub.Scanner/DomainAddressProviders/DnsDomainAddressProvider.cs b/FastGithub.Scanner/DomainAddressProviders/DnsDomainAddressProvider.cs new file mode 100644 index 0000000..e81787a --- /dev/null +++ b/FastGithub.Scanner/DomainAddressProviders/DnsDomainAddressProvider.cs @@ -0,0 +1,72 @@ +using DNS.Client; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Sockets; +using System.Threading.Tasks; + +namespace FastGithub.Scanner.DomainMiddlewares +{ + [Service(ServiceLifetime.Singleton, ServiceType = typeof(IDomainAddressProvider))] + sealed class DnsDomainAddressProvider : IDomainAddressProvider + { + private readonly IOptionsMonitor options; + private readonly ILogger logger; + + public DnsDomainAddressProvider( + IOptionsMonitor options, + ILogger logger) + { + this.options = options; + this.logger = logger; + } + + public async Task> CreateDomainAddressesAsync() + { + var setting = this.options.CurrentValue.DnsDomainAddress; + if (setting.Enable == false) + { + return Enumerable.Empty(); + } + + var result = new List(); + foreach (var dns in setting.Dnss) + { + var domainAddresses = await this.LookupAsync(dns, setting.Domains); + result.AddRange(domainAddresses); + } + + return result; + } + + private async Task> LookupAsync(string dns, IEnumerable domains) + { + var client = new DnsClient(dns); + var result = new List(); + + foreach (var domain in domains) + { + try + { + var addresses = await client.Lookup(domain); + foreach (var address in addresses) + { + if (address.AddressFamily == AddressFamily.InterNetwork) + { + result.Add(new DomainAddress(domain, address)); + } + } + } + catch (Exception) + { + this.logger.LogWarning($"dns({dns})无法解析{domain}"); + } + } + + return result; + } + } +} diff --git a/FastGithub.Scanner/DomainAddressProviders/LocalDomainAddressProvider.cs b/FastGithub.Scanner/DomainAddressProviders/LocalDomainAddressProvider.cs deleted file mode 100644 index 9647b14..0000000 --- a/FastGithub.Scanner/DomainAddressProviders/LocalDomainAddressProvider.cs +++ /dev/null @@ -1,73 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.Json; -using System.Threading.Tasks; - -namespace FastGithub.Scanner.DomainMiddlewares -{ - [Service(ServiceLifetime.Singleton, ServiceType = typeof(IDomainAddressProvider))] - sealed class LocalDomainAddressProvider : IDomainAddressProvider - { - private readonly IOptionsMonitor options; - private readonly ILogger logger; - - public LocalDomainAddressProvider( - IOptionsMonitor options, - ILogger logger) - { - this.options = options; - this.logger = logger; - } - - public async Task> CreateDomainAddressesAsync() - { - var setting = this.options.CurrentValue.LocalAddressProvider; - if (setting.Enable == false) - { - return Enumerable.Empty(); - } - - try - { - if (File.Exists(setting.IPRangeFilePath) == true) - { - using var fileStream = File.OpenRead(setting.IPRangeFilePath); - var datas = await JsonSerializer.DeserializeAsync>(fileStream); - if (datas != null) - { - return this.GetDomainAddresses(datas); - } - } - } - catch (Exception ex) - { - this.logger.LogWarning($"加载本机的ip列表异常:{ex.Message}"); - } - - return Enumerable.Empty(); - } - - private IEnumerable GetDomainAddresses(Dictionary datas) - { - foreach (var kv in datas) - { - var domain = kv.Key; - foreach (var item in kv.Value) - { - if (IPAddressRange.TryParse(item, out var range)) - { - foreach (var address in range) - { - yield return new DomainAddress(domain, address); - } - } - } - } - } - } -} diff --git a/FastGithub.Scanner/DomainAddressProviders/RemoteDomainAddressProvider.cs b/FastGithub.Scanner/DomainAddressProviders/MetaDomainAddressProvider.cs similarity index 69% rename from FastGithub.Scanner/DomainAddressProviders/RemoteDomainAddressProvider.cs rename to FastGithub.Scanner/DomainAddressProviders/MetaDomainAddressProvider.cs index 6c6d0f9..3507ce3 100644 --- a/FastGithub.Scanner/DomainAddressProviders/RemoteDomainAddressProvider.cs +++ b/FastGithub.Scanner/DomainAddressProviders/MetaDomainAddressProvider.cs @@ -13,14 +13,14 @@ using System.Threading.Tasks; namespace FastGithub.Scanner.DomainMiddlewares { [Service(ServiceLifetime.Singleton, ServiceType = typeof(IDomainAddressProvider))] - sealed class RemoteDomainAddressProvider : IDomainAddressProvider + sealed class MetaDomainAddressProvider : IDomainAddressProvider { private readonly IOptionsMonitor options; - private readonly ILogger logger; + private readonly ILogger logger; - public RemoteDomainAddressProvider( + public MetaDomainAddressProvider( IOptionsMonitor options, - ILogger logger) + ILogger logger) { this.options = options; this.logger = logger; @@ -28,7 +28,7 @@ namespace FastGithub.Scanner.DomainMiddlewares public async Task> CreateDomainAddressesAsync() { - var setting = this.options.CurrentValue.RemoteAddressProvider; + var setting = this.options.CurrentValue.MetaDomainAddress; if (setting.Enable == false) { return Enumerable.Empty(); @@ -53,13 +53,9 @@ namespace FastGithub.Scanner.DomainMiddlewares private class Meta { - [JsonPropertyName("web")] + [JsonPropertyName("web")] public string[] Web { get; set; } = Array.Empty(); - [JsonPropertyName("api")] - public string[] Api { get; set; } = Array.Empty(); - - public IEnumerable ToDomainAddresses() { foreach (var range in IPAddressRange.From(this.Web).OrderBy(item => item.Size)) @@ -72,17 +68,6 @@ namespace FastGithub.Scanner.DomainMiddlewares } } } - - foreach (var range in IPAddressRange.From(this.Api).OrderBy(item => item.Size)) - { - if (range.AddressFamily == AddressFamily.InterNetwork) - { - foreach (var address in range) - { - yield return new DomainAddress("api.github.com", address); - } - } - } } } } diff --git a/FastGithub.Scanner/FastGithub.Scanner.csproj b/FastGithub.Scanner/FastGithub.Scanner.csproj index fd9657f..48f7e49 100644 --- a/FastGithub.Scanner/FastGithub.Scanner.csproj +++ b/FastGithub.Scanner/FastGithub.Scanner.csproj @@ -6,6 +6,7 @@ + @@ -14,10 +15,4 @@ - - - Always - - - diff --git a/FastGithub.Scanner/GithubOptions.cs b/FastGithub.Scanner/GithubOptions.cs index 324584e..76bbdb8 100644 --- a/FastGithub.Scanner/GithubOptions.cs +++ b/FastGithub.Scanner/GithubOptions.cs @@ -1,5 +1,7 @@ using System; + + namespace FastGithub.Scanner { [Options("Github")] @@ -7,9 +9,9 @@ namespace FastGithub.Scanner { public ScanSetting Scan { get; set; } = new ScanSetting(); - public RemoteAddressProviderSetting RemoteAddressProvider { get; set; } = new RemoteAddressProviderSetting(); + public MetaDoaminAddressSetting MetaDomainAddress { get; set; } = new MetaDoaminAddressSetting(); - public LocalAddressProviderSetting LocalAddressProvider { get; set; } = new LocalAddressProviderSetting(); + public DnsDomainAddressSetting DnsDomainAddress { get; set; } = new DnsDomainAddressSetting(); public class ScanSetting { @@ -23,18 +25,20 @@ namespace FastGithub.Scanner } - public class RemoteAddressProviderSetting + public class MetaDoaminAddressSetting { public bool Enable { get; set; } = true; public Uri MetaUri { get; set; } = new Uri("https://gitee.com/jiulang/fast-github/raw/master/FastGithub/meta.json"); } - public class LocalAddressProviderSetting + public class DnsDomainAddressSetting { public bool Enable { get; set; } = true; - public string IPRangeFilePath { get; set; } = "./IPRange.json"; + public string[] Dnss { get; set; } = Array.Empty(); + + public string[] Domains { get; set; } = Array.Empty(); } } } diff --git a/FastGithub.Scanner/IPRange.json b/FastGithub.Scanner/IPRange.json deleted file mode 100644 index 1f7ae34..0000000 --- a/FastGithub.Scanner/IPRange.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "github.com": [ - "13.114.40.48/32", - "52.192.72.89/32", - "52.69.186.44/32", - "15.164.81.167/32", - "52.78.231.108/32", - "13.234.176.102/32", - "13.234.210.38/32", - "13.229.188.59/32", - "13.250.177.223/32", - "52.74.223.119/32", - "13.236.229.21/32", - "13.237.44.5/32", - "52.64.108.95/32", - "18.228.52.138/32", - "18.228.67.229/32", - "18.231.5.6/32", - "192.30.252.0/22", - "185.199.108.0/22", - "140.82.112.0/20", - "143.55.64.0/20" - ], - "github.githubassets.com": [ - "185.199.108.154/32", - "185.199.109.154/32", - "185.199.110.154/32", - "185.199.111.154/32" - ], - "avatars.githubusercontent.com": [ - "185.199.108.133/32", - "185.199.109.133/32", - "185.199.110.133/32", - "185.199.111.133/32" - ] -} diff --git a/FastGithub/appsettings.json b/FastGithub/appsettings.json index b054d18..78457a3 100644 --- a/FastGithub/appsettings.json +++ b/FastGithub/appsettings.json @@ -5,18 +5,36 @@ }, "Github": { "Scan": { - "FullScanInterval": "02:00:00", // ɨʱ + "FullScanInterval": "02:00:00", // ɨʱ "ResultScanInterval": "00:01:00", // ɨʱ - "TcpScanTimeout": "00:00:01", // tcpɨ賬ʱʱ - "HttpsScanTimeout": "00:00:02" // httpsɨ賬ʱʱ + "TcpScanTimeout": "00:00:01", // tcpɨ賬ʱʱ + "HttpsScanTimeout": "00:00:02" // httpsɨ賬ʱʱ }, - "RemoteAddressProvider": { + "MetaDomainAddress": { "Enable": true, - "MetaUri": "https://gitee.com/jiulang/fast-github/raw/master/FastGithub/meta.json" // metaԴuri + "MetaUri": "https://gitee.com/jiulang/fast-github/raw/master/FastGithub/meta.json" // metaԴuri }, - "LocalAddressProvider": { + "DnsDomainAddress": { "Enable": true, - "IPRangeFilePath": "./IPRange.json" + "Dnss": [ + "119.29.29.29", + "180.76.76.76", + "8.8.8.8", + "8.8.4.4", + "114.114.114.114", + "114.114.115.115", + "223.5.5.5", + "223.6.6.6", + "1.2.4.8", + "210.2.4.8", + "208.67.220.220", + "208.67.222.222" + ], + "Domains": [ + "github.com", + "api.github.com", + "github.githubassets.com" + ] } }, "Logging": {