0

我们安装了 nuget Titan Web 代理,创建了一个窗口服务并启动了 Titan Web 代理。Windows 服务的工作、运行以及启动和停止时间被写入日志文件。但是当我用不同的浏览器打开一些页面时,网络代理应该捕捉互联网请求并提供它们,尽管没有发生此类事件并且没有记录任何内容。这是我们的代码:

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using Titanium.Web.Proxy;
using Titanium.Web.Proxy.EventArguments;

namespace WebProxy1 {
    public partial class MyNewService : ServiceBase {
        public ProxyServer proxyServer;

        public MyNewService() {
            InitializeComponent();
        }

        protected override void OnStart(string[] args) {
            proxyServer = new ProxyServer(true, true, true);

            proxyServer.BeforeRequest += OnRequest;

            proxyServer.Start();

            WriteToFile("Service is started at " + DateTime.Now);

        }

        protected override void OnStop() {
            proxyServer.Stop();
            WriteToFile("Service is stopped at " + DateTime.Now);
        }
        public void WriteToFile(string Message) {
            string path = "E:\\Downloads\\Logs";
            if (!Directory.Exists(path)) {
                Directory.CreateDirectory(path);
            }
            string filepath = "E:\\Downloads\\Logs\\ServiceLog_" + DateTime.Now.Date.ToShortDateString().Replace('/', '_') + ".txt";
            if (!File.Exists(filepath)) {
                // Create a file to write to.   
                using (StreamWriter sw = File.CreateText(filepath)) {
                    sw.WriteLine(Message);
                }
            } else {
                using (StreamWriter sw = File.AppendText(filepath)) {
                    sw.WriteLine(Message);
                }
            }
        }

        public async Task OnRequest(object sender, SessionEventArgs e) {
            WriteToFile(e.HttpClient.Request.Url);

            // To cancel a request with a custom HTML content
            // Filter URL
            if (e.HttpClient.Request.Method.ToUpper() == "GET" && e.HttpClient.Request.RequestUri.AbsoluteUri.Contains("google.com")) {
                e.Ok("<!DOCTYPE html>" +
                    "<html><body><h1>" +
                    "Website Blocked" +
                    "</h1>" +
                    "<p>Blocked by titanium web proxy.</p>" +
                    "</body>" +
                    "</html>");
            }

            // Redirect example
            if (e.HttpClient.Request.RequestUri.AbsoluteUri.Contains("wikipedia.org")) {
                e.Redirect("https://www.paypal.com");
            }
        }
    }
}
4

1 回答 1

0

我认为您没有正确设置钛代理。

在启动代理之前,您必须设置端点。

这里有钛代理使用示例。

这是我的示例源。

var explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Any, 8000, true)
{
    // Use self-issued generic certificate on all https requests
    // Optimizes performance by not creating a certificate for each https-enabled domain
    // Useful when certificate trust is not required by proxy clients
   //GenericCertificate = new X509Certificate2(Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "genericcert.pfx"), "password")
};

// Fired when a CONNECT request is received
explicitEndPoint.BeforeTunnelConnect += OnBeforeTunnelConnect;

// An explicit endpoint is where the client knows about the existence of a proxy
// So client sends request in a proxy friendly manner
proxyServer.AddEndPoint(explicitEndPoint);
proxyServer.Start();
于 2020-10-09T14:48:38.417 回答