有所改动

This commit is contained in:
Muihd
2024-08-17 13:42:07 +08:00
parent 389b1b4f0f
commit 3fec2dfed4
3 changed files with 88 additions and 8 deletions
+22 -1
View File
@@ -91,7 +91,28 @@ namespace BarrageGrab
foreach (var item in list) func(item, i++); foreach (var item in list) func(item, i++);
} }
/// <summary>
/// 是否包含
/// </summary>
/// <param name="obj"></param>
/// <param name="args"></param>
/// <returns></returns>
public static bool In<T>(this T obj, params T[] args)
{
return args.Contains(obj);
}
/// <summary>
/// 是否包含
/// </summary>
/// <param name="obj"></param>
/// <param name="args"></param>
/// <returns></returns>
public static bool LikeIn(this string str, params string[] args)
{
return args.Any(a => str.Contains(a));
}
public static CookieCollection ToCookies(this string cookieStr, string domain) public static CookieCollection ToCookies(this string cookieStr, string domain)
{ {
var cookies = new CookieCollection(); var cookies = new CookieCollection();
+2 -2
View File
@@ -33,6 +33,6 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示: //通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.7.4.0")] [assembly: AssemblyVersion("2.7.6.0")]
[assembly: AssemblyFileVersion("2.7.4.0")] [assembly: AssemblyFileVersion("2.7.6.0")]
[assembly: NeutralResourcesLanguage("zh-CN")] [assembly: NeutralResourcesLanguage("zh-CN")]
+64 -5
View File
@@ -16,6 +16,8 @@ using Titanium.Web.Proxy.EventArguments;
using Titanium.Web.Proxy.Http; using Titanium.Web.Proxy.Http;
using Titanium.Web.Proxy.Models; using Titanium.Web.Proxy.Models;
using Titanium.Web.Proxy.StreamExtended.Network; using Titanium.Web.Proxy.StreamExtended.Network;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
namespace BarrageGrab.Proxy namespace BarrageGrab.Proxy
{ {
@@ -65,7 +67,7 @@ namespace BarrageGrab.Proxy
Logger.LogWarn("代理环境设置失败:" + ex.Message); Logger.LogWarn("代理环境设置失败:" + ex.Message);
} }
} }
public TitaniumProxy() public TitaniumProxy()
{ {
//注册系统代理 //注册系统代理
@@ -75,9 +77,10 @@ namespace BarrageGrab.Proxy
proxyServer.ReuseSocket = false; proxyServer.ReuseSocket = false;
proxyServer.EnableConnectionPool = true; proxyServer.EnableConnectionPool = true;
proxyServer.ForwardToUpstreamGateway = true; proxyServer.ForwardToUpstreamGateway = true;
proxyServer.CertificateManager.SaveFakeCertificates = true;
proxyServer.CertificateManager.RootCertificate = proxyServer.CertificateManager.LoadRootCertificate(); proxyServer.CertificateManager.CertificateValidDays = 365 * 10;
proxyServer.CertificateManager.SaveFakeCertificates = true;
proxyServer.CertificateManager.RootCertificate = GetCert();
if (proxyServer.CertificateManager.RootCertificate == null) if (proxyServer.CertificateManager.RootCertificate == null)
{ {
Logger.PrintColor("正在进行证书安装,需要信任该证书才可进行https解密,若有提示请确定"); Logger.PrintColor("正在进行证书安装,需要信任该证书才可进行https解密,若有提示请确定");
@@ -97,6 +100,62 @@ namespace BarrageGrab.Proxy
proxyServer.AddEndPoint(explicitEndPoint); proxyServer.AddEndPoint(explicitEndPoint);
} }
private X509Certificate2 GetCert()
{
X509Certificate2 result = proxyServer.CertificateManager.LoadRootCertificate();
if (result != null) return result;
// 打开“受信任的根证书颁发机构”存储区
using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
store.Open(OpenFlags.ReadOnly);
// 遍历证书集合
foreach (X509Certificate2 cert in store.Certificates)
{
try
{
// 尝试使用证书创建 X509Certificate2 实例
X509Certificate2 certificate = new X509Certificate2(cert);
//判断过期
if (DateTime.Now > certificate.NotAfter) continue;
//判断黑名单
var black = new string[] { "localhost" };
if (certificate.FriendlyName.ToLower().LikeIn(black) ||
certificate.Subject.ToLower().LikeIn(black)
) continue;
if (certificate.FriendlyName.ToLower().LikeIn("titanium"))
{
result = certificate;
break;
}
// 打印证书信息
//Console.WriteLine("证书: " + certificate.Subject);
//Console.WriteLine("颁发者: " + certificate.Issuer);
//Console.WriteLine("有效期: " + certificate.NotBefore + " - " + certificate.NotAfter);
//result = certificate;
//break;
}
catch (CryptographicException ex)
{
//捕获加密异常,如果证书需要密码,这里会抛出异常
throw new Exception("证书加载失败: " + ex.Message);
}
}
store.Close();
}
return result;
}
public override void SetUpstreamProxy(string upstreamProxyAddr) public override void SetUpstreamProxy(string upstreamProxyAddr)
{ {
if (string.IsNullOrWhiteSpace(upstreamProxyAddr)) return; if (string.IsNullOrWhiteSpace(upstreamProxyAddr)) return;
@@ -208,7 +267,7 @@ namespace BarrageGrab.Proxy
if (uri.Contains(BARRAGE_POOL_PATH) && contentType.Contains("application/protobuffer")) if (uri.Contains(BARRAGE_POOL_PATH) && contentType.Contains("application/protobuffer"))
{ {
var payload = await e.GetResponseBody(); var payload = await e.GetResponseBody();
base.FireOnFetchResponse(new HttpResponseEventArgs() base.FireOnFetchResponse(new HttpResponseEventArgs()
{ {
HttpClient = e.HttpClient, HttpClient = e.HttpClient,
@@ -585,7 +644,7 @@ namespace BarrageGrab.Proxy
/// </summary> /// </summary>
override public void Start() override public void Start()
{ {
proxyServer.Start(AppSetting.Current.UsedProxy); proxyServer.Start(false);
if (AppSetting.Current.UsedProxy) if (AppSetting.Current.UsedProxy)
{ {
base.RegisterSystemProxy(); base.RegisterSystemProxy();