0

We installed nuget titanium web proxy, created a window service and initiated titanium web proxy. The windows service works, runs, and start and stop times are written to a log file. But the web proxy is supposed to catch internet request and afford them, though no such events happens and nothing is logged, when i open some page with different browsers. Here is our code:

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");
            }
        }
    }
}
Gobot
  • 1
  • 1
  • 1

1 Answers1

0

I think you did not set the titanium proxy properly.

Before starting the proxy, you have to set endpoint.

There is titanium proxy using example here.

This is my sample source.

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();
Jack Lee
  • 363
  • 5
  • 18