增加https扫描规则
This commit is contained in:
		
							parent
							
								
									960f4efe18
								
							
						
					
					
						commit
						e04456878c
					
				@ -30,10 +30,10 @@ namespace FastGithub.Scanner
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 创建域名与ip的关系
 | 
			
		||||
        /// 查找域名与ip关系
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task<IEnumerable<DomainAddress>> CreateDomainAddressesAsync(CancellationToken cancellationToken)
 | 
			
		||||
        public async Task<IEnumerable<DomainAddress>> LookupAsync(CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            var hashSet = new HashSet<DomainAddress>();
 | 
			
		||||
            var domains = this.options.CurrentValue.Domains;
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ namespace FastGithub.Scanner
 | 
			
		||||
    [Service(ServiceLifetime.Singleton)]
 | 
			
		||||
    sealed class GithubScanService
 | 
			
		||||
    {
 | 
			
		||||
        private readonly GithubLookupFacotry domainAddressFactory;
 | 
			
		||||
        private readonly GithubLookupFacotry lookupFactory;
 | 
			
		||||
        private readonly GithubContextCollection scanResults;
 | 
			
		||||
        private readonly ILogger<GithubScanService> logger;
 | 
			
		||||
 | 
			
		||||
@ -24,17 +24,17 @@ namespace FastGithub.Scanner
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// github扫描服务
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="domainAddressFactory"></param>
 | 
			
		||||
        /// <param name="lookupFactory"></param>
 | 
			
		||||
        /// <param name="scanResults"></param>
 | 
			
		||||
        /// <param name="appService"></param>
 | 
			
		||||
        /// <param name="logger"></param>
 | 
			
		||||
        public GithubScanService(
 | 
			
		||||
            GithubLookupFacotry domainAddressFactory,
 | 
			
		||||
            GithubLookupFacotry lookupFactory,
 | 
			
		||||
            GithubContextCollection scanResults,
 | 
			
		||||
            IServiceProvider appService,
 | 
			
		||||
            ILogger<GithubScanService> logger)
 | 
			
		||||
        {
 | 
			
		||||
            this.domainAddressFactory = domainAddressFactory;
 | 
			
		||||
            this.lookupFactory = lookupFactory;
 | 
			
		||||
            this.scanResults = scanResults;
 | 
			
		||||
            this.logger = logger;
 | 
			
		||||
 | 
			
		||||
@ -58,7 +58,7 @@ namespace FastGithub.Scanner
 | 
			
		||||
        public async Task ScanAllAsync(CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            this.logger.LogInformation("完整扫描开始..");
 | 
			
		||||
            var domainAddresses = await this.domainAddressFactory.CreateDomainAddressesAsync(cancellationToken);
 | 
			
		||||
            var domainAddresses = await this.lookupFactory.LookupAsync(cancellationToken);
 | 
			
		||||
 | 
			
		||||
            var scanTasks = domainAddresses
 | 
			
		||||
                .Select(item => new GithubContext(item.Domain, item.Address, cancellationToken))
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,9 @@
 | 
			
		||||
 | 
			
		||||
namespace FastGithub.Scanner.LookupProviders
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Github公开的域名与ip关系提供者选项
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [Options("Github:Lookup:GithubMetaProvider")]
 | 
			
		||||
    sealed class GithubMetaProviderOptions
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,8 @@
 | 
			
		||||
namespace FastGithub.Scanner.LookupProviders
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// ipaddress.com的域名与ip关系提供者选项
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [Options("Github:Lookup:IPAddressComProvider")]
 | 
			
		||||
    sealed class IPAddressComProviderOptions
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -2,11 +2,20 @@
 | 
			
		||||
 | 
			
		||||
namespace FastGithub.Scanner.LookupProviders
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 公共dns的域名与ip关系提供者选项
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [Options("Github:Lookup:PublicDnsProvider")]
 | 
			
		||||
    sealed class PublicDnsProviderOptions
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否启用
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool Enable { get; set; } = true;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// dns列表
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string[] Dnss { get; set; } = Array.Empty<string>();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -48,11 +48,15 @@ namespace FastGithub.Scanner.ScanMiddlewares
 | 
			
		||||
            {
 | 
			
		||||
                context.Available = false;
 | 
			
		||||
 | 
			
		||||
                var request = new HttpRequestMessage
 | 
			
		||||
                var setting = this.options.CurrentValue;
 | 
			
		||||
                if (setting.Rules.TryGetValue(context.Domain, out var rule) == false)
 | 
			
		||||
                {
 | 
			
		||||
                    Method = HttpMethod.Head,
 | 
			
		||||
                    RequestUri = new Uri($"https://{context.Address}"),
 | 
			
		||||
                };
 | 
			
		||||
                    rule = new HttpsScanOptions.ScanRule();
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                using var request = new HttpRequestMessage();
 | 
			
		||||
                request.Method = new HttpMethod(rule.Method);
 | 
			
		||||
                request.RequestUri = new Uri(new Uri($"https://{context.Address}"), rule.Path);
 | 
			
		||||
                request.Headers.Host = context.Domain;
 | 
			
		||||
 | 
			
		||||
                var timeout = this.options.CurrentValue.Timeout;
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,38 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace FastGithub.Scanner.ScanMiddlewares
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// https扫描选项
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [Options("Github:Scan:HttpsScan")]
 | 
			
		||||
    sealed class HttpsScanOptions
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 扫描超时时长
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public TimeSpan Timeout { get; set; } = TimeSpan.FromSeconds(5d);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 各域名扫描规则
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Dictionary<string, ScanRule> Rules { get; set; } = new Dictionary<string, ScanRule>();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 扫描规则
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public class ScanRule
 | 
			
		||||
        {
 | 
			
		||||
            /// <summary>
 | 
			
		||||
            /// 请求方式
 | 
			
		||||
            /// </summary>
 | 
			
		||||
            public string Method { get; set; } = "HEAD";
 | 
			
		||||
 | 
			
		||||
            /// <summary>
 | 
			
		||||
            /// 请求路径
 | 
			
		||||
            /// </summary>
 | 
			
		||||
            public string Path { get; set; } = "/";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -74,7 +74,7 @@ namespace FastGithub.Scanner.ScanMiddlewares
 | 
			
		||||
                using var timeoutTokenSource = new CancellationTokenSource(timeout);
 | 
			
		||||
                using var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(timeoutTokenSource.Token, context.CancellationToken);
 | 
			
		||||
 | 
			
		||||
                using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 | 
			
		||||
                using var socket = new Socket(context.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
 | 
			
		||||
                await socket.ConnectAsync(context.Address, PORT, linkedTokenSource.Token);
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,9 @@
 | 
			
		||||
 | 
			
		||||
namespace FastGithub.Scanner.ScanMiddlewares
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// tcp扫描选项
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [Options("Github:Scan:TcpScan")]
 | 
			
		||||
    sealed class TcpScanOptions
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -12,14 +12,27 @@
 | 
			
		||||
        "CacheExpiration": "00:20:00" // 扫描结果缓存时长
 | 
			
		||||
      },
 | 
			
		||||
      "HttpsScan": {
 | 
			
		||||
        "Timeout": "00:00:05" // https扫描超时时间
 | 
			
		||||
        "Timeout": "00:00:05", // https扫描超时时间
 | 
			
		||||
        "Rules": {
 | 
			
		||||
          "github.githubassets.com": {
 | 
			
		||||
            "Path": "/favicons/favicon.png"
 | 
			
		||||
          },
 | 
			
		||||
          "avatars.githubusercontent.com": {
 | 
			
		||||
            "Path": "/u/8308014?s=40&v=4"
 | 
			
		||||
          },
 | 
			
		||||
          "raw.githubusercontent.com": {
 | 
			
		||||
            "Path": "/xljiulang/FastGithub/master/README.md"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "Lookup": {
 | 
			
		||||
      "Domains": [
 | 
			
		||||
        "github.com",
 | 
			
		||||
        "api.github.com",
 | 
			
		||||
        "github.githubassets.com"
 | 
			
		||||
        "github.githubassets.com",
 | 
			
		||||
        "raw.githubusercontent.com",
 | 
			
		||||
        "avatars.githubusercontent.com"
 | 
			
		||||
      ],
 | 
			
		||||
      "IPAddressComProvider": {
 | 
			
		||||
        "Enable": true
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user