From d19564131920c9925e359374800157e508544d67 Mon Sep 17 00:00:00 2001 From: xljiulang <366193849@qq.com> Date: Thu, 17 Jun 2021 23:39:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84xml=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FastGithub.Core/OptionsAttribute.cs | 5 ++- FastGithub.Dns/DnsHostedService.cs | 25 +++++++++-- FastGithub.Dns/DnsOptions.cs | 9 ++++ FastGithub.Dns/GithubRequestResolver.cs | 17 +++++++- FastGithub.Scanner/DomainAddress.cs | 8 ++++ FastGithub.Scanner/DomainAddressFacotry.cs | 11 +++++ .../GithubMetaProvider.cs | 19 +++++++++ .../IPAddressComProvider.cs | 18 ++++++++ .../PublicDnsProvider.cs | 18 ++++++++ FastGithub.Scanner/GithubContext.cs | 21 +++++++--- FastGithub.Scanner/GithubContextCollection.cs | 22 ++++++++-- FastGithub.Scanner/GithubContextHistory.cs | 11 +++++ .../GithubFullScanHostedService.cs | 14 ++++++- FastGithub.Scanner/GithubOptions.cs | 15 +++++++ .../GithubResultScanHostedService.cs | 13 ++++++ FastGithub.Scanner/GithubScanService.cs | 28 ++++++++++--- FastGithub.Scanner/IDomainAddressProvider.cs | 7 ++++ FastGithub.Scanner/IGithubScanResults.cs | 14 +++++++ FastGithub.Scanner/IPAddressRange.cs | 42 ++++++++++++++++--- .../ScanMiddlewares/ConcurrentMiddleware.cs | 12 ++++++ .../ScanMiddlewares/HttpsScanMiddleware.cs | 14 +++++++ .../ScanMiddlewares/StatisticsMiddleware.cs | 13 ++++++ .../ScanMiddlewares/TcpScanMiddleware.cs | 14 +++++++ 23 files changed, 345 insertions(+), 25 deletions(-) diff --git a/FastGithub.Core/OptionsAttribute.cs b/FastGithub.Core/OptionsAttribute.cs index 65dadb6..a123be5 100644 --- a/FastGithub.Core/OptionsAttribute.cs +++ b/FastGithub.Core/OptionsAttribute.cs @@ -8,6 +8,9 @@ namespace FastGithub [AttributeUsage(AttributeTargets.Class)] public sealed class OptionsAttribute : Attribute { + /// + /// 获取配置节点名称 + /// public string? SessionKey { get; } /// @@ -20,7 +23,7 @@ namespace FastGithub /// /// 选项特性 /// - /// + /// 配置节点名称 public OptionsAttribute(string sessionKey) { this.SessionKey = sessionKey; diff --git a/FastGithub.Dns/DnsHostedService.cs b/FastGithub.Dns/DnsHostedService.cs index 1a952fb..bbad889 100644 --- a/FastGithub.Dns/DnsHostedService.cs +++ b/FastGithub.Dns/DnsHostedService.cs @@ -7,20 +7,34 @@ using System.Threading.Tasks; namespace FastGithub.Dns { + /// + /// dns后台服务 + /// sealed class DnsHostedService : IHostedService { - private readonly DnsServer dnsServer; + private readonly DnsServer dnsServer; private readonly ILogger logger; + /// + /// dns后台服务 + /// + /// + /// + /// public DnsHostedService( GithubRequestResolver githubRequestResolver, IOptions options, ILogger logger) { - this.dnsServer = new DnsServer(githubRequestResolver, options.Value.UpStream); + this.dnsServer = new DnsServer(githubRequestResolver, options.Value.UpStream); this.logger = logger; - } + } + /// + /// 启动dns服务 + /// + /// + /// public Task StartAsync(CancellationToken cancellationToken) { this.dnsServer.Listen(); @@ -28,6 +42,11 @@ namespace FastGithub.Dns return Task.CompletedTask; } + /// + /// 停止dns服务 + /// + /// + /// public Task StopAsync(CancellationToken cancellationToken) { this.dnsServer.Dispose(); diff --git a/FastGithub.Dns/DnsOptions.cs b/FastGithub.Dns/DnsOptions.cs index 2718086..40d561e 100644 --- a/FastGithub.Dns/DnsOptions.cs +++ b/FastGithub.Dns/DnsOptions.cs @@ -3,11 +3,20 @@ using System.Net; namespace FastGithub.Dns { + /// + /// dns服务选项 + /// [Options("Dns")] sealed class DnsOptions { + /// + /// 获取或设置上游ip地址 + /// public IPAddress UpStream { get; set; } = IPAddress.Parse("114.114.114.114"); + /// + /// 获取或设置github相关域名的ip存活时长 + /// public TimeSpan GithubTTL { get; set; } = TimeSpan.FromMinutes(10d); } } diff --git a/FastGithub.Dns/GithubRequestResolver.cs b/FastGithub.Dns/GithubRequestResolver.cs index 3bfa8c9..1948342 100644 --- a/FastGithub.Dns/GithubRequestResolver.cs +++ b/FastGithub.Dns/GithubRequestResolver.cs @@ -11,13 +11,22 @@ using System.Threading.Tasks; namespace FastGithub.Dns { + /// + /// github相关域名解析器 + /// [Service(ServiceLifetime.Singleton)] sealed class GithubRequestResolver : IRequestResolver { private readonly IGithubScanResults githubScanResults; private readonly IOptionsMonitor options; - private readonly ILogger logger; + private readonly ILogger logger; + /// + /// github相关域名解析器 + /// + /// + /// + /// public GithubRequestResolver( IGithubScanResults githubScanResults, IOptionsMonitor options, @@ -28,6 +37,12 @@ namespace FastGithub.Dns this.logger = logger; } + /// + /// 解析域名 + /// + /// + /// + /// public Task Resolve(IRequest request, CancellationToken cancellationToken = default) { var response = Response.FromRequest(request); diff --git a/FastGithub.Scanner/DomainAddress.cs b/FastGithub.Scanner/DomainAddress.cs index 189145f..5f7989a 100644 --- a/FastGithub.Scanner/DomainAddress.cs +++ b/FastGithub.Scanner/DomainAddress.cs @@ -3,6 +3,9 @@ using System.Net; namespace FastGithub.Scanner { + /// + /// 域名与ip关系 + /// class DomainAddress : IEquatable { /// @@ -15,6 +18,11 @@ namespace FastGithub.Scanner /// public IPAddress Address { get; } + /// + /// 域名与ip关系 + /// + /// + /// public DomainAddress(string domain, IPAddress address) { this.Domain = domain; diff --git a/FastGithub.Scanner/DomainAddressFacotry.cs b/FastGithub.Scanner/DomainAddressFacotry.cs index fec8e0a..d82a691 100644 --- a/FastGithub.Scanner/DomainAddressFacotry.cs +++ b/FastGithub.Scanner/DomainAddressFacotry.cs @@ -4,16 +4,27 @@ using System.Threading.Tasks; namespace FastGithub.Scanner { + /// + /// 域名与ip关系工厂 + /// [Service(ServiceLifetime.Singleton)] sealed class DomainAddressFacotry { private readonly IEnumerable providers; + /// + /// 域名与ip关系工厂 + /// + /// public DomainAddressFacotry(IEnumerable providers) { this.providers = providers; } + /// + /// 创建域名与ip的关系 + /// + /// public async Task> CreateDomainAddressesAsync() { var hashSet = new HashSet(); diff --git a/FastGithub.Scanner/DomainAddressProviders/GithubMetaProvider.cs b/FastGithub.Scanner/DomainAddressProviders/GithubMetaProvider.cs index d0543a7..3de74d1 100644 --- a/FastGithub.Scanner/DomainAddressProviders/GithubMetaProvider.cs +++ b/FastGithub.Scanner/DomainAddressProviders/GithubMetaProvider.cs @@ -12,12 +12,20 @@ using System.Threading.Tasks; namespace FastGithub.Scanner.DomainMiddlewares { + /// + /// Github公开的域名与ip关系提供者 + /// [Service(ServiceLifetime.Singleton, ServiceType = typeof(IDomainAddressProvider))] sealed class GithubMetaProvider : IDomainAddressProvider { private readonly IOptionsMonitor options; private readonly ILogger logger; + /// + /// Github公开的域名与ip关系提供者 + /// + /// + /// public GithubMetaProvider( IOptionsMonitor options, ILogger logger) @@ -26,6 +34,10 @@ namespace FastGithub.Scanner.DomainMiddlewares this.logger = logger; } + /// + /// 创建域名与ip的关系 + /// + /// public async Task> CreateDomainAddressesAsync() { var setting = this.options.CurrentValue.DominAddressProviders.GithubMetaProvider; @@ -51,11 +63,18 @@ namespace FastGithub.Scanner.DomainMiddlewares return Enumerable.Empty(); } + /// + /// github的meta结构 + /// private class Meta { [JsonPropertyName("web")] public string[] Web { get; set; } = Array.Empty(); + /// + /// 转换为域名与ip关系 + /// + /// public IEnumerable ToDomainAddresses() { foreach (var range in IPAddressRange.From(this.Web).OrderBy(item => item.Size)) diff --git a/FastGithub.Scanner/DomainAddressProviders/IPAddressComProvider.cs b/FastGithub.Scanner/DomainAddressProviders/IPAddressComProvider.cs index d518236..f2cbe04 100644 --- a/FastGithub.Scanner/DomainAddressProviders/IPAddressComProvider.cs +++ b/FastGithub.Scanner/DomainAddressProviders/IPAddressComProvider.cs @@ -11,6 +11,9 @@ using System.Threading.Tasks; namespace FastGithub.Scanner.DomainMiddlewares { + /// + /// ipaddress.com的域名与ip关系提供者 + /// [Service(ServiceLifetime.Singleton, ServiceType = typeof(IDomainAddressProvider))] sealed class IPAddressComProvider : IDomainAddressProvider { @@ -18,6 +21,11 @@ namespace FastGithub.Scanner.DomainMiddlewares private readonly ILogger logger; private readonly Uri lookupUri = new("https://www.ipaddress.com/ip-lookup"); + /// + /// ipaddress.com的域名与ip关系提供者 + /// + /// + /// public IPAddressComProvider( IOptionsMonitor options, ILogger logger) @@ -26,6 +34,10 @@ namespace FastGithub.Scanner.DomainMiddlewares this.logger = logger; } + /// + /// 创建域名与ip的关系 + /// + /// public async Task> CreateDomainAddressesAsync() { var setting = this.options.CurrentValue.DominAddressProviders.IPAddressComProvider; @@ -54,6 +66,12 @@ namespace FastGithub.Scanner.DomainMiddlewares return result; } + /// + /// 反查ip + /// + /// + /// + /// private async Task> LookupAsync(HttpClient httpClient, string domain) { var keyValue = new KeyValuePair("host", domain); diff --git a/FastGithub.Scanner/DomainAddressProviders/PublicDnsProvider.cs b/FastGithub.Scanner/DomainAddressProviders/PublicDnsProvider.cs index 88d4dbd..fd430a6 100644 --- a/FastGithub.Scanner/DomainAddressProviders/PublicDnsProvider.cs +++ b/FastGithub.Scanner/DomainAddressProviders/PublicDnsProvider.cs @@ -10,12 +10,20 @@ using System.Threading.Tasks; namespace FastGithub.Scanner.DomainMiddlewares { + /// + /// 公共dns的域名与ip关系提供者 + /// [Service(ServiceLifetime.Singleton, ServiceType = typeof(IDomainAddressProvider))] sealed class PublicDnsProvider : IDomainAddressProvider { private readonly IOptionsMonitor options; private readonly ILogger logger; + /// + /// 公共dns的域名与ip关系提供者 + /// + /// + /// public PublicDnsProvider( IOptionsMonitor options, ILogger logger) @@ -24,6 +32,10 @@ namespace FastGithub.Scanner.DomainMiddlewares this.logger = logger; } + /// + /// 创建域名与ip的关系 + /// + /// public async Task> CreateDomainAddressesAsync() { var setting = this.options.CurrentValue.DominAddressProviders.PublicDnsProvider; @@ -45,6 +57,12 @@ namespace FastGithub.Scanner.DomainMiddlewares return result; } + /// + /// 反查ip + /// + /// dns服务器 + /// 域名 + /// private async Task> LookupAsync(string dns, IEnumerable domains) { var client = new DnsClient(dns); diff --git a/FastGithub.Scanner/GithubContext.cs b/FastGithub.Scanner/GithubContext.cs index abeb8de..07e5227 100644 --- a/FastGithub.Scanner/GithubContext.cs +++ b/FastGithub.Scanner/GithubContext.cs @@ -3,14 +3,11 @@ using System.Net; namespace FastGithub.Scanner { + /// + /// Github扫描上下文 + /// sealed class GithubContext : DomainAddress, IEquatable { - private record Github( - string Domain, - IPAddress Address, - double AvailableRate, - double AvgElapsed); - /// /// 获取或设置是否可用 /// @@ -22,6 +19,11 @@ namespace FastGithub.Scanner public GithubContextHistory History { get; } = new(); + /// + /// Github扫描上下文 + /// + /// + /// public GithubContext(string domain, IPAddress address) : base(domain, address) { @@ -41,5 +43,12 @@ namespace FastGithub.Scanner this.History.AvgElapsed.TotalSeconds ).ToString(); } + + private record Github( + string Domain, + IPAddress Address, + double AvailableRate, + double AvgElapsed); + } } diff --git a/FastGithub.Scanner/GithubContextCollection.cs b/FastGithub.Scanner/GithubContextCollection.cs index b04cbe3..99aa50a 100644 --- a/FastGithub.Scanner/GithubContextCollection.cs +++ b/FastGithub.Scanner/GithubContextCollection.cs @@ -5,12 +5,20 @@ using System.Net; namespace FastGithub.Scanner { + /// + /// GithubContext集合 + /// [Service(ServiceLifetime.Singleton)] sealed class GithubContextCollection : IGithubScanResults { private readonly object syncRoot = new(); private readonly List contextList = new(); + /// + /// 添加GithubContext + /// + /// + /// public bool Add(GithubContext context) { lock (this.syncRoot) @@ -24,7 +32,10 @@ namespace FastGithub.Scanner } } - + /// + /// 转换为数组 + /// + /// public GithubContext[] ToArray() { lock (this.syncRoot) @@ -33,7 +44,12 @@ namespace FastGithub.Scanner } } - + /// + /// 查询ip是否可用 + /// + /// + /// + /// public bool IsAvailable(string domain, IPAddress address) { lock (this.syncRoot) @@ -45,7 +61,7 @@ namespace FastGithub.Scanner } /// - /// 查找又稳又快的ip + /// 查找最优的ip /// /// /// diff --git a/FastGithub.Scanner/GithubContextHistory.cs b/FastGithub.Scanner/GithubContextHistory.cs index aec2095..5f9f70e 100644 --- a/FastGithub.Scanner/GithubContextHistory.cs +++ b/FastGithub.Scanner/GithubContextHistory.cs @@ -4,8 +4,14 @@ using System.Linq; namespace FastGithub.Scanner { + /// + /// GithubContext的扫描历史 + /// sealed class GithubContextHistory { + /// + /// 最多保存最的近的10条记录 + /// private const int MAX_LOG_COUNT = 10; private record ScanLog(bool Available, TimeSpan Elapsed); @@ -54,6 +60,11 @@ namespace FastGithub.Scanner } } + /// + /// 添加记录 + /// + /// 是否可用 + /// 扫描耗时 public void Add(bool available, TimeSpan elapsed) { this.scanLogs.Enqueue(new ScanLog(available, elapsed)); diff --git a/FastGithub.Scanner/GithubFullScanHostedService.cs b/FastGithub.Scanner/GithubFullScanHostedService.cs index 33eb41f..d745b69 100644 --- a/FastGithub.Scanner/GithubFullScanHostedService.cs +++ b/FastGithub.Scanner/GithubFullScanHostedService.cs @@ -6,11 +6,19 @@ using System.Threading.Tasks; namespace FastGithub { + /// + /// 完整扫描后台服务 + /// sealed class GithubFullScanHostedService : BackgroundService { private readonly GithubScanService githubScanService; private readonly IOptionsMonitor options; + /// + /// 完整扫描后台服务 + /// + /// + /// public GithubFullScanHostedService( GithubScanService githubScanService, IOptionsMonitor options) @@ -19,7 +27,11 @@ namespace FastGithub this.options = options; } - + /// + /// 后台轮询扫描 + /// + /// + /// protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (stoppingToken.IsCancellationRequested == false) diff --git a/FastGithub.Scanner/GithubOptions.cs b/FastGithub.Scanner/GithubOptions.cs index 5910756..230f456 100644 --- a/FastGithub.Scanner/GithubOptions.cs +++ b/FastGithub.Scanner/GithubOptions.cs @@ -2,13 +2,25 @@ namespace FastGithub.Scanner { + /// + /// github选项 + /// [Options("Github")] sealed class GithubOptions { + /// + /// 扫描配置 + /// public ScanSetting Scan { get; set; } = new ScanSetting(); + /// + /// 域名与ip关系提供者配置 + /// public DomainAddressProvidersSetting DominAddressProviders { get; set; } = new DomainAddressProvidersSetting(); + /// + /// 扫描配置 + /// public class ScanSetting { public TimeSpan FullScanInterval = TimeSpan.FromHours(2d); @@ -20,6 +32,9 @@ namespace FastGithub.Scanner public TimeSpan HttpsScanTimeout { get; set; } = TimeSpan.FromSeconds(2d); } + /// + /// 域名与ip关系提供者配置 + /// public class DomainAddressProvidersSetting { public GithubMetaProviderSetting GithubMetaProvider { get; set; } = new GithubMetaProviderSetting(); diff --git a/FastGithub.Scanner/GithubResultScanHostedService.cs b/FastGithub.Scanner/GithubResultScanHostedService.cs index 9ec46b1..510efc9 100644 --- a/FastGithub.Scanner/GithubResultScanHostedService.cs +++ b/FastGithub.Scanner/GithubResultScanHostedService.cs @@ -6,11 +6,19 @@ using System.Threading.Tasks; namespace FastGithub { + /// + /// 扫描结果轮询扫描后台服务 + /// sealed class GithubResultScanHostedService : BackgroundService { private readonly GithubScanService githubScanService; private readonly IOptionsMonitor options; + /// + /// 扫描结果轮询扫描后台服务 + /// + /// + /// public GithubResultScanHostedService( GithubScanService githubScanService, IOptionsMonitor options) @@ -19,6 +27,11 @@ namespace FastGithub this.options = options; } + /// + /// 后台轮询扫描 + /// + /// + /// protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (stoppingToken.IsCancellationRequested == false) diff --git a/FastGithub.Scanner/GithubScanService.cs b/FastGithub.Scanner/GithubScanService.cs index c57dad2..c63684a 100644 --- a/FastGithub.Scanner/GithubScanService.cs +++ b/FastGithub.Scanner/GithubScanService.cs @@ -7,24 +7,34 @@ using System.Threading.Tasks; namespace FastGithub.Scanner { + /// + /// github扫描服务 + /// [Service(ServiceLifetime.Singleton)] sealed class GithubScanService { private readonly DomainAddressFacotry domainAddressFactory; + private readonly GithubContextCollection scanResults; private readonly ILogger logger; - private readonly GithubContextCollection contextCollection; private readonly InvokeDelegate fullScanDelegate; private readonly InvokeDelegate resultScanDelegate; + /// + /// github扫描服务 + /// + /// + /// + /// + /// public GithubScanService( DomainAddressFacotry domainAddressFactory, - GithubContextCollection contextCollection, + GithubContextCollection scanResults, IServiceProvider appService, ILogger logger) { this.domainAddressFactory = domainAddressFactory; - this.contextCollection = contextCollection; + this.scanResults = scanResults; this.logger = logger; this.fullScanDelegate = new PipelineBuilder(appService, ctx => Task.CompletedTask) @@ -40,6 +50,10 @@ namespace FastGithub.Scanner .Build(); } + /// + /// 扫描所有的ip + /// + /// public async Task ScanAllAsync() { this.logger.LogInformation("完整扫描开始.."); @@ -59,17 +73,21 @@ namespace FastGithub.Scanner await this.fullScanDelegate(context); if (context.Available == true) { - this.contextCollection.Add(context); + this.scanResults.Add(context); } return context.Available; } } + /// + /// 扫描曾经扫描到的结果 + /// + /// public async Task ScanResultAsync() { this.logger.LogInformation("结果扫描开始.."); - var contexts = this.contextCollection.ToArray(); + var contexts = this.scanResults.ToArray(); foreach (var context in contexts) { await this.resultScanDelegate(context); diff --git a/FastGithub.Scanner/IDomainAddressProvider.cs b/FastGithub.Scanner/IDomainAddressProvider.cs index af0d97f..1b06dc1 100644 --- a/FastGithub.Scanner/IDomainAddressProvider.cs +++ b/FastGithub.Scanner/IDomainAddressProvider.cs @@ -3,8 +3,15 @@ using System.Threading.Tasks; namespace FastGithub.Scanner { + /// + /// 定义域名的ip提值者 + /// interface IDomainAddressProvider { + /// + /// 创建域名与ip的关系 + /// + /// Task> CreateDomainAddressesAsync(); } } diff --git a/FastGithub.Scanner/IGithubScanResults.cs b/FastGithub.Scanner/IGithubScanResults.cs index ef126ef..b12be24 100644 --- a/FastGithub.Scanner/IGithubScanResults.cs +++ b/FastGithub.Scanner/IGithubScanResults.cs @@ -2,10 +2,24 @@ namespace FastGithub.Scanner { + /// + /// 定义扫描结果的接口 + /// public interface IGithubScanResults { + /// + /// 查询ip是否可用 + /// + /// + /// + /// bool IsAvailable(string domain, IPAddress address); + /// + /// 查找最优的ip + /// + /// + /// IPAddress? FindBestAddress(string domain); } } diff --git a/FastGithub.Scanner/IPAddressRange.cs b/FastGithub.Scanner/IPAddressRange.cs index e47ecb6..16ec763 100644 --- a/FastGithub.Scanner/IPAddressRange.cs +++ b/FastGithub.Scanner/IPAddressRange.cs @@ -8,12 +8,29 @@ using System.Net.Sockets; namespace FastGithub.Scanner { + /// + /// 表示IP范围 + /// + /// + /// • 192.168.1.0/24 + /// • 192.168.1.1-192.168.1.254 + /// abstract class IPAddressRange : IEnumerable { + /// + /// 获取ip数量 + /// public abstract int Size { get; } + /// + /// 获取地址族 + /// public abstract AddressFamily AddressFamily { get; } + /// + /// 获取迭代器 + /// + /// public abstract IEnumerator GetEnumerator(); @@ -22,6 +39,11 @@ namespace FastGithub.Scanner return this.GetEnumerator(); } + /// + /// 从多个ip范围文本解析 + /// + /// + /// public static IEnumerable From(IEnumerable ranges) { foreach (var item in ranges) @@ -33,12 +55,17 @@ namespace FastGithub.Scanner } } - + /// + /// 尝试解析 + /// + /// + /// + /// public static bool TryParse(ReadOnlySpan range, [MaybeNullWhen(false)] out IPAddressRange value) { if (range.IsEmpty == false && IPNetwork.TryParse(range.ToString(), out var ipNetwork)) { - value = new NetworkIPAddressRange(ipNetwork); + value = new CidrIPAddressRange(ipNetwork); return true; } @@ -61,8 +88,10 @@ namespace FastGithub.Scanner return false; } - - private class NetworkIPAddressRange : IPAddressRange + /// + /// 192.168.1.0/24 + /// + private class CidrIPAddressRange : IPAddressRange { private readonly IPAddressCollection addressCollection; @@ -72,7 +101,7 @@ namespace FastGithub.Scanner public override AddressFamily AddressFamily => this.addressFamily; - public NetworkIPAddressRange(IPNetwork network) + public CidrIPAddressRange(IPNetwork network) { this.addressCollection = network.ListIPAddress(FilterEnum.All); this.addressFamily = network.AddressFamily; @@ -84,6 +113,9 @@ namespace FastGithub.Scanner } } + /// + /// 192.168.1.1-192.168.1.254 + /// private class SplitIPAddressRange : IPAddressRange { private readonly IPAddress start; diff --git a/FastGithub.Scanner/ScanMiddlewares/ConcurrentMiddleware.cs b/FastGithub.Scanner/ScanMiddlewares/ConcurrentMiddleware.cs index 8a4af05..6b97dde 100644 --- a/FastGithub.Scanner/ScanMiddlewares/ConcurrentMiddleware.cs +++ b/FastGithub.Scanner/ScanMiddlewares/ConcurrentMiddleware.cs @@ -5,17 +5,29 @@ using System.Threading.Tasks; namespace FastGithub.Scanner.ScanMiddlewares { + /// + /// 扫描并发限制中间件 + /// [Service(ServiceLifetime.Singleton)] sealed class ConcurrentMiddleware : IMiddleware { private readonly SemaphoreSlim semaphoreSlim; + /// + /// 扫描并发限制中间件 + /// public ConcurrentMiddleware() { var currentCount = Environment.ProcessorCount * 2; this.semaphoreSlim = new SemaphoreSlim(currentCount, currentCount); } + /// + /// 限制描并发扫 + /// + /// + /// + /// public async Task InvokeAsync(GithubContext context, Func next) { try diff --git a/FastGithub.Scanner/ScanMiddlewares/HttpsScanMiddleware.cs b/FastGithub.Scanner/ScanMiddlewares/HttpsScanMiddleware.cs index 4786dab..69151a8 100644 --- a/FastGithub.Scanner/ScanMiddlewares/HttpsScanMiddleware.cs +++ b/FastGithub.Scanner/ScanMiddlewares/HttpsScanMiddleware.cs @@ -10,12 +10,20 @@ using System.Threading.Tasks; namespace FastGithub.Scanner.ScanMiddlewares { + /// + /// https扫描中间件 + /// [Service(ServiceLifetime.Singleton)] sealed class HttpsScanMiddleware : IMiddleware { private readonly IOptionsMonitor options; private readonly ILogger logger; + /// + /// https扫描中间件 + /// + /// + /// public HttpsScanMiddleware( IOptionsMonitor options, ILogger logger) @@ -24,6 +32,12 @@ namespace FastGithub.Scanner.ScanMiddlewares this.logger = logger; } + /// + /// https扫描 + /// + /// + /// + /// public async Task InvokeAsync(GithubContext context, Func next) { try diff --git a/FastGithub.Scanner/ScanMiddlewares/StatisticsMiddleware.cs b/FastGithub.Scanner/ScanMiddlewares/StatisticsMiddleware.cs index 6febd4a..0f951ec 100644 --- a/FastGithub.Scanner/ScanMiddlewares/StatisticsMiddleware.cs +++ b/FastGithub.Scanner/ScanMiddlewares/StatisticsMiddleware.cs @@ -6,16 +6,29 @@ using System.Threading.Tasks; namespace FastGithub.Scanner.ScanMiddlewares { + /// + /// 扫描统计中间件 + /// [Service(ServiceLifetime.Singleton)] sealed class StatisticsMiddleware : IMiddleware { private readonly ILogger logger; + /// + /// 扫描统计中间件 + /// + /// public StatisticsMiddleware(ILogger logger) { this.logger = logger; } + /// + /// 记录扫描结果 + /// + /// + /// + /// public async Task InvokeAsync(GithubContext context, Func next) { var stopwatch = new Stopwatch(); diff --git a/FastGithub.Scanner/ScanMiddlewares/TcpScanMiddleware.cs b/FastGithub.Scanner/ScanMiddlewares/TcpScanMiddleware.cs index 15d0bb1..d7a3698 100644 --- a/FastGithub.Scanner/ScanMiddlewares/TcpScanMiddleware.cs +++ b/FastGithub.Scanner/ScanMiddlewares/TcpScanMiddleware.cs @@ -8,6 +8,9 @@ using System.Threading.Tasks; namespace FastGithub.Scanner.ScanMiddlewares { + /// + /// tcp扫描中间件 + /// [Service(ServiceLifetime.Singleton)] sealed class TcpScanMiddleware : IMiddleware { @@ -15,6 +18,11 @@ namespace FastGithub.Scanner.ScanMiddlewares private readonly IOptionsMonitor options; private readonly ILogger logger; + /// + /// tcp扫描中间件 + /// + /// + /// public TcpScanMiddleware( IOptionsMonitor options, ILogger logger) @@ -23,6 +31,12 @@ namespace FastGithub.Scanner.ScanMiddlewares this.logger = logger; } + /// + /// tcp扫描 + /// + /// + /// + /// public async Task InvokeAsync(GithubContext context, Func next) { try