diff --git a/FastGithub.Configuration/DomainConfig.cs b/FastGithub.Configuration/DomainConfig.cs
index 75dbc5b..988a53f 100644
--- a/FastGithub.Configuration/DomainConfig.cs
+++ b/FastGithub.Configuration/DomainConfig.cs
@@ -23,6 +23,11 @@ namespace FastGithub.Configuration
///
public bool TlsIgnoreNameMismatch { get; init; }
+ ///
+ /// 使用的ip地址
+ ///
+ public string? IPAddress { get; init; }
+
///
/// 请求超时时长
///
diff --git a/FastGithub.Http/HttpClient.cs b/FastGithub.Http/HttpClient.cs
index 064cf30..5a9e04a 100644
--- a/FastGithub.Http/HttpClient.cs
+++ b/FastGithub.Http/HttpClient.cs
@@ -48,6 +48,7 @@ namespace FastGithub.Http
request.SetRequestContext(new RequestContext
{
Host = request.RequestUri?.Host,
+ IPAddress = this.domainConfig.IPAddress,
IsHttps = request.RequestUri?.Scheme == Uri.UriSchemeHttps,
TlsSniPattern = this.domainConfig.GetTlsSniPattern(),
TlsIgnoreNameMismatch = this.domainConfig.TlsIgnoreNameMismatch
diff --git a/FastGithub.Http/HttpClientHandler.cs b/FastGithub.Http/HttpClientHandler.cs
index 1650649..f78eb46 100644
--- a/FastGithub.Http/HttpClientHandler.cs
+++ b/FastGithub.Http/HttpClientHandler.cs
@@ -160,7 +160,10 @@ namespace FastGithub.Http
if (uri.HostNameType == UriHostNameType.Dns)
{
- var address = await this.domainResolver.ResolveAsync(domain, cancellationToken);
+ if (IPAddress.TryParse(context.IPAddress, out var address) == false)
+ {
+ address = await this.domainResolver.ResolveAsync(domain, cancellationToken);
+ }
uriBuilder.Host = address.ToString();
request.Headers.Host = domain;
context.TlsSniPattern = context.TlsSniPattern.WithIPAddress(address);
diff --git a/FastGithub.Http/RequestContext.cs b/FastGithub.Http/RequestContext.cs
index 9934030..0616762 100644
--- a/FastGithub.Http/RequestContext.cs
+++ b/FastGithub.Http/RequestContext.cs
@@ -1,4 +1,5 @@
using FastGithub.Configuration;
+using System.Net;
namespace FastGithub.Http
{
@@ -17,6 +18,11 @@ namespace FastGithub.Http
///
public string? Host { get; set; }
+ ///
+ /// 请求的ip
+ ///
+ public string? IPAddress { get; set; }
+
///
/// 获取或设置Sni值的表达式
///
diff --git a/FastGithub/appsettings.github.json b/FastGithub/appsettings.github.json
index 05dd4c5..144279a 100644
--- a/FastGithub/appsettings.github.json
+++ b/FastGithub/appsettings.github.json
@@ -11,27 +11,21 @@
"TlsSni": false
},
"gist.github.com": {
- "TlsSni": false,
"TlsIgnoreNameMismatch": true
},
"*.github.io": {
- "TlsSni": false,
"TlsIgnoreNameMismatch": true
},
"*.githubapp.com": {
- "TlsSni": false,
"TlsIgnoreNameMismatch": true
},
"*.githubassets.com": {
- "TlsSni": false,
"TlsIgnoreNameMismatch": true
},
"*.githubusercontent.com": {
- "TlsSni": false,
"TlsIgnoreNameMismatch": true
},
"*github*.s3.amazonaws.com": {
- "TlsSni": false,
"TlsIgnoreNameMismatch": true
}
}
diff --git a/FastGithub/appsettings.json b/FastGithub/appsettings.json
index 5b3023c..9c80f83 100644
--- a/FastGithub/appsettings.json
+++ b/FastGithub/appsettings.json
@@ -15,6 +15,7 @@
"TlsSniPattern": null, // SNI表达式,@domain变量表示取域名值 @ipaddress变量表示取ip @random变量表示取随机值,其它字符保留不替换
"TlsIgnoreNameMismatch": false, // 是否忽略服务器证书域名不匹配,当不发送SNI时服务器可能发回域名不匹配的证书,默认为false
"Timeout": null, // 请求超时时长,格式为"00:02:00",默认为null
+ "IPAddress": null, // 请求的ip,默认为null
"Destination": null, // 请求目的地,格式为绝对或相对Uri,默认null
"Response": { // 阻断请求直接响应,设置了Response其它配置都不起作用了
"StatusCode": 404, // 响应的状态码
diff --git a/FastGithub/appsettings.pixiv.json b/FastGithub/appsettings.pixiv.json
index aaefd46..345e950 100644
--- a/FastGithub/appsettings.pixiv.json
+++ b/FastGithub/appsettings.pixiv.json
@@ -2,122 +2,70 @@
"FastGithub": {
"DomainConfigs": {
"www.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.223/"
+ "IPAddress": "210.140.131.223"
},
"pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.226/"
+ "IPAddress": "210.140.131.226"
},
"ssl.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.226/"
+ "IPAddress": "210.140.131.226"
},
"accounts.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.226/"
+ "IPAddress": "210.140.131.226"
},
"touch.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.226/"
+ "IPAddress": "210.140.131.226"
},
"oauth.secure.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.226/"
+ "IPAddress": "210.140.131.226"
},
"i.pximg.net": {
- "TlsSni": true,
- "Destination": "https://i.pixiv.cat/"
+ "IPAddress": "210.140.92.143"
},
"sketch.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.174.37/"
+ "IPAddress": "210.140.174.37"
},
"*.pixivsketch.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.214.211/"
+ "IPAddress": "210.140.214.211"
},
"factory.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.180/"
+ "IPAddress": "210.140.131.180"
},
- "dic.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.222/"
- },
- "en-dic.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.222/"
+ "*dic.pixiv.net": {
+ "IPAddress": "210.140.131.222"
},
"sensei.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.222/"
+ "IPAddress": "210.140.131.222"
},
"fanbox.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.222/"
+ "IPAddress": "210.140.131.222"
},
"payment.pixiv.net.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.222/"
+ "IPAddress": "210.140.131.222"
},
"imgaz.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.145/"
+ "IPAddress": "210.140.131.145"
},
"comic.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.145/"
+ "IPAddress": "210.140.131.145"
},
"novel.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.145/"
+ "IPAddress": "210.140.131.145"
},
"source.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.145/"
+ "IPAddress": "210.140.131.145"
},
"i*.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.145/"
+ "IPAddress": "210.140.131.145"
},
"app-api.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.218/"
- },
- "*.pixiv.net": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true
+ "IPAddress": "210.140.131.218"
},
"pixiv.org": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.158/"
+ "IPAddress": "210.140.131.158"
},
"*.pixiv.org": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://210.140.131.158/"
+ "IPAddress": "210.140.131.158"
},
"t.co": {
"Response": {
diff --git a/FastGithub/appsettings.stackoverflow.json b/FastGithub/appsettings.stackoverflow.json
index b256d65..3afa590 100644
--- a/FastGithub/appsettings.stackoverflow.json
+++ b/FastGithub/appsettings.stackoverflow.json
@@ -26,14 +26,10 @@
"Destination": "https://fdn.geekzu.org/"
},
"i.imgur.com": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://151.101.196.193/"
+ "IPAddress": "151.101.196.193"
},
"i.stack.imgur.com": {
- "TlsSni": false,
- "TlsIgnoreNameMismatch": true,
- "Destination": "https://151.101.196.193/"
+ "IPAddress": "151.101.196.193"
},
"lh*.googleusercontent.com": {
"Response": {