有所改动
This commit is contained in:
@@ -91,6 +91,27 @@ 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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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")]
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
@@ -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;
|
||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user