增加ipaddress.com提供者
This commit is contained in:
parent
52b5272c18
commit
2390787863
@ -17,7 +17,7 @@ namespace FastGithub.Scanner.DomainMiddlewares
|
|||||||
private readonly ILogger<DnsDomainAddressProvider> logger;
|
private readonly ILogger<DnsDomainAddressProvider> logger;
|
||||||
|
|
||||||
public DnsDomainAddressProvider(
|
public DnsDomainAddressProvider(
|
||||||
IOptionsMonitor<GithubOptions> options,
|
IOptionsMonitor<GithubOptions> options,
|
||||||
ILogger<DnsDomainAddressProvider> logger)
|
ILogger<DnsDomainAddressProvider> logger)
|
||||||
{
|
{
|
||||||
this.options = options;
|
this.options = options;
|
||||||
@ -26,7 +26,7 @@ namespace FastGithub.Scanner.DomainMiddlewares
|
|||||||
|
|
||||||
public async Task<IEnumerable<DomainAddress>> CreateDomainAddressesAsync()
|
public async Task<IEnumerable<DomainAddress>> CreateDomainAddressesAsync()
|
||||||
{
|
{
|
||||||
var setting = this.options.CurrentValue.DnsDomainAddress;
|
var setting = this.options.CurrentValue.DominAddressProvider.DnsDomainAddress;
|
||||||
if (setting.Enable == false)
|
if (setting.Enable == false)
|
||||||
{
|
{
|
||||||
return Enumerable.Empty<DomainAddress>();
|
return Enumerable.Empty<DomainAddress>();
|
||||||
|
|||||||
@ -0,0 +1,90 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FastGithub.Scanner.DomainMiddlewares
|
||||||
|
{
|
||||||
|
[Service(ServiceLifetime.Singleton, ServiceType = typeof(IDomainAddressProvider))]
|
||||||
|
sealed class IPAddressComDomainAddressProvider : IDomainAddressProvider
|
||||||
|
{
|
||||||
|
private readonly IOptionsMonitor<GithubOptions> options;
|
||||||
|
private readonly ILogger<IPAddressComDomainAddressProvider> logger;
|
||||||
|
private readonly Uri lookupUri = new("https://www.ipaddress.com/ip-lookup");
|
||||||
|
|
||||||
|
public IPAddressComDomainAddressProvider(
|
||||||
|
IOptionsMonitor<GithubOptions> options,
|
||||||
|
ILogger<IPAddressComDomainAddressProvider> logger)
|
||||||
|
{
|
||||||
|
this.options = options;
|
||||||
|
this.logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IEnumerable<DomainAddress>> CreateDomainAddressesAsync()
|
||||||
|
{
|
||||||
|
var setting = this.options.CurrentValue.DominAddressProvider.IPAddressComDomainAddress;
|
||||||
|
if (setting.Enable == false)
|
||||||
|
{
|
||||||
|
return Enumerable.Empty<DomainAddress>();
|
||||||
|
}
|
||||||
|
|
||||||
|
using var httpClient = new HttpClient();
|
||||||
|
var result = new List<DomainAddress>();
|
||||||
|
foreach (var domain in setting.Domains)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var addresses = await this.LookupAsync(httpClient, domain);
|
||||||
|
foreach (var address in addresses)
|
||||||
|
{
|
||||||
|
result.Add(new DomainAddress(domain, address));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
this.logger.LogWarning($"ipaddress.com无法解析{domain}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<List<IPAddress>> LookupAsync(HttpClient httpClient, string domain)
|
||||||
|
{
|
||||||
|
var keyValue = new KeyValuePair<string?, string?>("host", domain);
|
||||||
|
var content = new FormUrlEncodedContent(Enumerable.Repeat(keyValue, 1));
|
||||||
|
var request = new HttpRequestMessage
|
||||||
|
{
|
||||||
|
Method = HttpMethod.Post,
|
||||||
|
RequestUri = lookupUri,
|
||||||
|
Content = content
|
||||||
|
};
|
||||||
|
|
||||||
|
var response = await httpClient.SendAsync(request);
|
||||||
|
var html = await response.Content.ReadAsStringAsync();
|
||||||
|
var match = Regex.Match(html, @"(?<=<h1>IP Lookup : )\d+\.\d+\.\d+\.\d+", RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
|
if (match.Success && IPAddress.TryParse(match.Value, out var address))
|
||||||
|
{
|
||||||
|
return new List<IPAddress> { address };
|
||||||
|
}
|
||||||
|
|
||||||
|
var prefix = Regex.Escape("type=\"radio\" value=\"");
|
||||||
|
var matches = Regex.Matches(html, @$"(?<={prefix})\d+\.\d+\.\d+\.\d+", RegexOptions.IgnoreCase);
|
||||||
|
var addressList = new List<IPAddress>();
|
||||||
|
foreach (Match item in matches)
|
||||||
|
{
|
||||||
|
if (IPAddress.TryParse(item.Value, out address))
|
||||||
|
{
|
||||||
|
addressList.Add(address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return addressList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -28,7 +28,7 @@ namespace FastGithub.Scanner.DomainMiddlewares
|
|||||||
|
|
||||||
public async Task<IEnumerable<DomainAddress>> CreateDomainAddressesAsync()
|
public async Task<IEnumerable<DomainAddress>> CreateDomainAddressesAsync()
|
||||||
{
|
{
|
||||||
var setting = this.options.CurrentValue.MetaDomainAddress;
|
var setting = this.options.CurrentValue.DominAddressProvider.MetaDomainAddress;
|
||||||
if (setting.Enable == false)
|
if (setting.Enable == false)
|
||||||
{
|
{
|
||||||
return Enumerable.Empty<DomainAddress>();
|
return Enumerable.Empty<DomainAddress>();
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace FastGithub.Scanner
|
namespace FastGithub.Scanner
|
||||||
{
|
{
|
||||||
[Options("Github")]
|
[Options("Github")]
|
||||||
@ -9,9 +7,7 @@ namespace FastGithub.Scanner
|
|||||||
{
|
{
|
||||||
public ScanSetting Scan { get; set; } = new ScanSetting();
|
public ScanSetting Scan { get; set; } = new ScanSetting();
|
||||||
|
|
||||||
public MetaDoaminAddressSetting MetaDomainAddress { get; set; } = new MetaDoaminAddressSetting();
|
public DomainAddressProviderSetting DominAddressProvider { get; set; } = new DomainAddressProviderSetting();
|
||||||
|
|
||||||
public DnsDomainAddressSetting DnsDomainAddress { get; set; } = new DnsDomainAddressSetting();
|
|
||||||
|
|
||||||
public class ScanSetting
|
public class ScanSetting
|
||||||
{
|
{
|
||||||
@ -24,21 +20,34 @@ namespace FastGithub.Scanner
|
|||||||
public TimeSpan HttpsScanTimeout { get; set; } = TimeSpan.FromSeconds(2d);
|
public TimeSpan HttpsScanTimeout { get; set; } = TimeSpan.FromSeconds(2d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class DomainAddressProviderSetting
|
||||||
public class MetaDoaminAddressSetting
|
|
||||||
{
|
{
|
||||||
public bool Enable { get; set; } = true;
|
public DnsDomainAddressSetting DnsDomainAddress { get; set; } = new DnsDomainAddressSetting();
|
||||||
|
public MetaDoaminAddressSetting MetaDomainAddress { get; set; } = new MetaDoaminAddressSetting();
|
||||||
|
public IPAddressComDomainAddressSetting IPAddressComDomainAddress { get; set; } = new IPAddressComDomainAddressSetting();
|
||||||
|
|
||||||
public Uri MetaUri { get; set; } = new Uri("https://gitee.com/jiulang/fast-github/raw/master/FastGithub/meta.json");
|
public class DnsDomainAddressSetting
|
||||||
}
|
{
|
||||||
|
public bool Enable { get; set; } = true;
|
||||||
|
|
||||||
public class DnsDomainAddressSetting
|
public string[] Dnss { get; set; } = Array.Empty<string>();
|
||||||
{
|
|
||||||
public bool Enable { get; set; } = true;
|
|
||||||
|
|
||||||
public string[] Dnss { get; set; } = Array.Empty<string>();
|
public string[] Domains { get; set; } = Array.Empty<string>();
|
||||||
|
}
|
||||||
|
|
||||||
public string[] Domains { get; set; } = Array.Empty<string>();
|
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 IPAddressComDomainAddressSetting
|
||||||
|
{
|
||||||
|
public bool Enable { get; set; } = true;
|
||||||
|
|
||||||
|
public string[] Domains { get; set; } = Array.Empty<string>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,31 +10,41 @@
|
|||||||
"TcpScanTimeout": "00:00:01", // tcp扫描超时时间
|
"TcpScanTimeout": "00:00:01", // tcp扫描超时时间
|
||||||
"HttpsScanTimeout": "00:00:02" // https扫描超时时间
|
"HttpsScanTimeout": "00:00:02" // https扫描超时时间
|
||||||
},
|
},
|
||||||
"MetaDomainAddress": {
|
"DominAddressProvider": {
|
||||||
"Enable": true,
|
"MetaDomainAddress": {
|
||||||
"MetaUri": "https://gitee.com/jiulang/fast-github/raw/master/FastGithub/meta.json" // meta×ÊÔ´uri
|
"Enable": true,
|
||||||
},
|
"MetaUri": "https://gitee.com/jiulang/fast-github/raw/master/FastGithub/meta.json" // meta×ÊÔ´uri
|
||||||
"DnsDomainAddress": {
|
},
|
||||||
"Enable": true,
|
"IPAddressComDomainAddress": {
|
||||||
"Dnss": [
|
"Enable": true,
|
||||||
"119.29.29.29",
|
"Domains": [
|
||||||
"180.76.76.76",
|
"github.com",
|
||||||
"8.8.8.8",
|
"api.github.com",
|
||||||
"8.8.4.4",
|
"github.githubassets.com"
|
||||||
"114.114.114.114",
|
]
|
||||||
"114.114.115.115",
|
},
|
||||||
"223.5.5.5",
|
"DnsDomainAddress": {
|
||||||
"223.6.6.6",
|
"Enable": true,
|
||||||
"1.2.4.8",
|
"Dnss": [
|
||||||
"210.2.4.8",
|
"119.29.29.29",
|
||||||
"208.67.220.220",
|
"180.76.76.76",
|
||||||
"208.67.222.222"
|
"8.8.8.8",
|
||||||
],
|
"8.8.4.4",
|
||||||
"Domains": [
|
"114.114.114.114",
|
||||||
"github.com",
|
"114.114.115.115",
|
||||||
"api.github.com",
|
"223.5.5.5",
|
||||||
"github.githubassets.com"
|
"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": {
|
"Logging": {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user