Exemplo n.º 1
0
        async public static Task <ProxySslRequest> For(ProxyRequest wrapperRequest, IRequestInspector wrapperRequestInspector)
        {
            if (_certProvider == null)
            {
                _certProvider = new CertificateProvider(MakeCertPath);
                _certProvider.EnsureRootCertificate();
            }

            var sslRequest = new ProxySslRequest
            {
                WrapperRequest = wrapperRequest,
                ClientPid      = wrapperRequest.ClientPid,
                ClientSocket   = wrapperRequest.ClientSocket,
                ClientStream   = wrapperRequest.ClientStream
            };

            if (wrapperRequestInspector != null)
            {
                wrapperRequestInspector.OnTransferredToSecureRequest(sslRequest);
            }

            var hostName = sslRequest.GetHostName();

            sslRequest._hostCert = _certProvider.GetCertificateForHost(hostName);

            var clientSsslStream = new SslStream(wrapperRequest.ClientStream, true, RemoteCertificateValidator, sslRequest.LocalCertificateSelector);
            await clientSsslStream.AuthenticateAsServerAsync(sslRequest._hostCert);

            sslRequest.SecureClientStream = clientSsslStream;

            sslRequest.ReadPrologue();

            return(sslRequest);
        }
Exemplo n.º 2
0
        async public static Task<ProxySslRequest> For(ProxyRequest wrapperRequest, IRequestInspector wrapperRequestInspector)
        {
            if (_certProvider == null)
            {
                _certProvider = new CertificateProvider(MakeCertPath);
                _certProvider.EnsureRootCertificate();
            }

            var sslRequest = new ProxySslRequest
                {
                    WrapperRequest = wrapperRequest,
                    ClientPid = wrapperRequest.ClientPid,
                    ClientSocket = wrapperRequest.ClientSocket,
                    ClientStream = wrapperRequest.ClientStream
                };

            if (wrapperRequestInspector != null)
                wrapperRequestInspector.OnTransferredToSecureRequest(sslRequest);

            var hostName = sslRequest.GetHostName();
            sslRequest._hostCert = _certProvider.GetCertificateForHost(hostName);

            var clientSsslStream = new SslStream(wrapperRequest.ClientStream, true, RemoteCertificateValidator, sslRequest.LocalCertificateSelector);
            await clientSsslStream.AuthenticateAsServerAsync(sslRequest._hostCert);
            sslRequest.SecureClientStream = clientSsslStream;

            sslRequest.ReadPrologue();

            return sslRequest;
        }
Exemplo n.º 3
0
 public HarRequestInspector(ProxyRequest request, Log log)
 {
     _request = request;
     _log     = log;
     _entry   = new Entry();
     _log.Entries.Add(_entry);
     _entry.StartedDateTime = DateTime.Now;
     _entry.Request         = new RequestInfo();
     _start = DateTime.Now;
 }
Exemplo n.º 4
0
 public HarRequestInspector(ProxyRequest request, Log log)
 {
     _request = request;
     _log = log;
     _entry = new Entry();
     _log.Entries.Add(_entry);
     _entry.StartedDateTime = DateTime.Now;
     _entry.Request = new RequestInfo();
     _start = DateTime.Now;
 }
Exemplo n.º 5
0
        public static ProxyRequest For(Socket clientSocket, IProxyInspector proxyInspector = null)
        {
            var request = new ProxyRequest
            {
                ClientSocket = clientSocket,
                ClientStream = new NetworkStream(clientSocket)
            };

            if (proxyInspector != null)
                proxyInspector.OnRequestReceived(request);

            request.ResolvePid();
            request.ReadPrologue();

            return request;
        }
Exemplo n.º 6
0
        public static ProxyRequest For(Socket clientSocket, IProxyInspector proxyInspector = null)
        {
            var request = new ProxyRequest
            {
                ClientSocket = clientSocket,
                ClientStream = new NetworkStream(clientSocket)
            };

            if (proxyInspector != null)
            {
                proxyInspector.OnRequestReceived(request);
            }

            request.ResolvePid();
            request.ReadPrologue();

            return(request);
        }
Exemplo n.º 7
0
        async private void HandleRequest(Socket clientSocket)
        {
            if (clientSocket == null)
            {
                throw new ArgumentNullException("clientSocket");
            }

            try
            {
                var socketRequests = 0;
                while (clientSocket.Connected)
                {
                    socketRequests++;
                    var proxyRequest = ProxyRequest.For(clientSocket, _proxyInspector);
                    if (socketRequests > 1)
                    {
                        Debug.WriteLine("Client Connection Reused #" + socketRequests);
                    }
                    await proxyRequest.Process();

                    if (!proxyRequest.Response.Prologue.Headers.ContainsIgnoreCase("Connection", "Keep-Alive"))
                    {
                        Debug.WriteLine("Client Connection Closed");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine("Socket Error: " + e.Message);
            }
            finally
            {
                clientSocket.Close();
            }
        }
Exemplo n.º 8
0
        void IProxyInspector.OnRequestReceived(ProxyRequest request)
        {
            var requestInspector = new HarRequestInspector(request, _log);

            request.RegisterInspector(requestInspector);
        }
Exemplo n.º 9
0
 void IProxyInspector.OnRequestReceived(ProxyRequest request)
 {
     var requestInspector = new HarRequestInspector(request, _log);
     request.RegisterInspector(requestInspector);
 }