From c6ae3c5f894de17c5aada83a33c2fac127ea4b01 Mon Sep 17 00:00:00 2001 From: VahidN Date: Sat, 8 Jul 2017 13:19:13 +0430 Subject: [PATCH] =?UTF-8?q?Added=20Basic=C2=A0Authentication=20support.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Libs/DotNet4/FiddlerCore4.XML | 13731 ++++++++-------- Libs/DotNet4/FiddlerCore4.dll | Bin 354304 -> 578416 bytes ProcessProxifier/Core/ProcessesListManager.cs | 5 + ProcessProxifier/Core/ProxyRouter.cs | 56 +- ProcessProxifier/MainWindow.xaml | 106 +- ProcessProxifier/Models/ServerInfo.cs | 35 +- ProcessProxifier/Properties/AssemblyInfo.cs | 4 +- ProcessProxifier/Utils/ExceptionLogger.cs | 6 +- README.md | 3 +- 9 files changed, 7411 insertions(+), 6535 deletions(-) diff --git a/Libs/DotNet4/FiddlerCore4.XML b/Libs/DotNet4/FiddlerCore4.XML index bbec7a9..299756b 100644 --- a/Libs/DotNet4/FiddlerCore4.XML +++ b/Libs/DotNet4/FiddlerCore4.XML @@ -1,6472 +1,7259 @@ - - - - FiddlerCore4 - - - - - Wrapper for WinINET cache APIs. - - - - - Clear all HTTP Cookies from the WinINET Cache - - - - - Clear all files from the WinINET Cache - - - - - Delete all permanent WinINET cookies for sHost; won't clear memory-only session cookies. Supports hostnames with an optional leading wildcard, e.g. *example.com. NOTE: Will not work on VistaIE Protected Mode cookies. - - The hostname whose cookies should be cleared - - - - Clear the Cache items. Note: May be synchronous, may be asynchronous. - - TRUE if cache files should be cleared - TRUE if cookies should be cleared - - - - For PInvoke: Contains information about an entry in the Internet cache - - - - - Wrapper for WinINET proxy configuration APIs - - - - - Hostnames of sites to bypass proxy. <local> is common. - - - - - Allow direct connection to host - - - - - Attempt WPAD autoproxy detection - - - - - Ignore WinINET "no autoproxy unticks box" optimization - - - - - Use user-supplied URL to get FindProxyForURL script - - - - - Use user-supplied manual/fixed proxy address list - - - - - WPAD script url that may be used if _bUseScript true - - - - - Gathers proxy information from a named connection. - - Pass DefaultLAN to look for the "null" connection - Proxy info, or null - - - - Get a string describing the proxy settings - - Returns a multi-line string representing the proxy settings - - - - Calculate a string suitable for passing into WinINET APIs. - - Returns a string containing proxy information, or NULL. NB: I've seen WinINET blow up when passed String.Empty rather than null. - - - - - Given a proxy string, we crack out the proxy gateways for each protocol - - e.g. HTTP=itgproxy:80;FTP=ftpprox:21; - false on error - - - - Fills this WinINETProxyInfo instance with settings from specified WinINET connection. - - Name of the connection. Pass NULL for LAN connection. - TRUE if the settings were successfully retrieved. - - - - Sets WinINET proxy settings for specified connection to those specified in this WinINETProxy instance. - - Name of the connection. Pass NULL for LAN connection. - - - - Semi-colon delimited list of hostnames that should bypass the fixed proxy - - - - - TRUE if manually-specified proxy should be used. - - - - - TRUE if a direct HTTP connection may be made if AutoProxy/PAC is unreachable or corrupt - - - - - True if the proxy should be bypassed for dotless hostnames. - NOTE: Simply looks at the bypassList string to see if it contains a LOCAL rule. - - - - - String representing the endpoint of the proxy for HTTP-traffic, if configured - - - - - String representing the endpoint of the proxy for HTTPS-traffic, if configured - - - - - String representing the endpoint of the proxy for FTP-traffic, if configured - - - - - String representing the endpoint of the proxy for SOCKS-traffic, if configured - - - - - Bool indicating whether this connection is set to autodetect the proxy - - - - - Returns a string pointing to the ProxyAutoConfig script, or null if there is no such URL or it is not enabled - - - - - Provides simple utility functions common to both ClientHello and ServerHello parsing - - - - - Gets a textual string from a TLS extension - - - - - Builds a string from an ALPN List of strings - - - - - List defined ECC Curves from RFC4492 - - - - - - - List defined ECC Point Formats from RFC4492 - - - - - - - Converts a HTTPS version to a "Major.Minor (Friendly)" string - - - - - The HTTPSClientHello class is used to parse the bytes of a HTTPS ClientHello message. - - - - - Map cipher id numbers to names. See http://www.iana.org/assignments/tls-parameters/ - - - - - Parse a single extension using the list from http://tools.ietf.org/html/rfc6066 - http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xml - - - - - - - Parse a single extension using the list from http://tools.ietf.org/html/rfc6066 - - - - - - - Did client use ALPN to go to SPDY? - http://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg-01#section-3.1 - - - - - Did this ServerHello Handshake specify an upgrade to SPDY? - - - - - The Session object manages the complete HTTP session including the UI listitem, the ServerChatter, and the ClientChatter. - - - - - Should we try to use the SPNToken type? - Cached for performance reasons - - - - - Sorta hacky, we may use a .NET WebRequest object to generate a valid NTLM/Kerberos response if the server - demands authentication and the Session is configured to automatically respond. - - - - - Used if the Session is bound to a WebSocket or CONNECTTunnel - - - - - DO NOT USE. TEMPORARY WHILE REFACTORING VISIBILITY OF MEMBERS - - - - - - - Sets or unsets the specified SessionFlag(s) - - SessionFlags - Desired set value - - - - Test the session's BitFlags - - One or more (OR'd) SessionFlags - TRUE if specified flag(s) are set - - - - Test the session's BitFlags - - One or more (OR'd) SessionFlags - TRUE if any of specified flag(s) are set - - - - Should response be buffered for tampering - - - - - Timers stored as this Session progresses - - - - - Field is set to False if socket is poisoned due to HTTP errors. - - - - - Object representing the HTTP Response. - - - - - Object representing the HTTP Request. - - - - - Fiddler-internal flags set on the Session. - - TODO: ARCH: This shouldn't be exposed directly; it should be wrapped by a ReaderWriterLockSlim to prevent - exceptions while enumerating the flags for storage, etc - - - - Contains the bytes of the request body. - - - - - Contains the bytes of the response body. - - - - - IP Address of the client for this session. - - - - - Client port attached to Fiddler. - - - - - IP Address of the server for this session. - - - - - Event object used for pausing and resuming the thread servicing this session - - - - - Returns TRUE if the Session's HTTP Method is available and matches the target method. - - The target HTTP Method being compared. - true, if the method is specified and matches sTestFor (case-insensitive); otherwise false. - - - - Returns TRUE if the Session's target hostname (no port) matches sTestHost (case-insensitively). - - The host to which this session's host should be compared. - True if this session is targeted to the specified host. - - - - Replaces any characters in a filename that are unsafe with safe equivalents, and trim to 160 characters. - - - - - - - Notify extensions if this Session naturally led to another (e.g. due to redirect chasing or Automatic Authentication) - - The original session - The new session created - - - - Returns HTML representing the session. Call Utilities.StringToCF_HTML on the result of this function before placing it on the clipboard. - - TRUE if only the headers should be copied. - A HTML-formatted fragment representing the current session. - - - - Store this session's request and response to a string. - - If true, return only the request and response headers - String representing this session - - - - Store this session's request and response to a string. - - A string containing the content of the request and response. - - - - This private method pauses the Session's thread to allow breakpoint debugging - - - - - This method resumes the Session's thread in response to "Continue" commands from the UI - - - - - Set the SessionFlags.Ignore bit for this Session, also configuring it to stream, drop read data, and bypass event handlers. - - - - - Called by an AcceptConnection-spawned background thread, create a new session object from a client socket and execute the session - - Parameter object defining client socket and endpoint's HTTPS certificate, if present - - - - Call this method to AuthenticateAsServer on the client pipe. If configured, the pipe will first sniff the request - for the SubjectCN expected, which might be advertised in the TLS ServerNameIndicator extension. - - The default certificate to use - TRUE if a HTTPS handshake was achieved; FALSE for any exceptions or other errors. - - - - Call this function while in the "reading response" state to update the responseBodyBytes array with - the partially read response. - - TRUE if the peek succeeded; FALSE if not in the ReadingResponse state - - - - Prevents the server pipe from this session from being pooled for reuse - - - - - Ensures that, after the response is complete, the client socket is closed and not reused. - Does NOT (and must not) close the pipe. - - - - - Immediately close client and server sockets. Call in the event of errors-- doesn't queue server pipes for future reuse. - - - - - - Closes both client and server pipes and moves state to Aborted; unpauses thread if paused. - - - - - Save HTTP response body to Fiddler Captures folder. You likely want to call utilDecodeResponse first. - - True if the response body was successfully saved - - - - Save HTTP response body to specified location. You likely want to call utilDecodeResponse first. - - The name of the file to which the response body should be saved. - True if the file was successfully written. - - - - Save the request body to a file. You likely want to call utilDecodeRequest first. - - The name of the file to which the request body should be saved. - True if the file was successfully written. - - - - Save the request and response to a single file. - - The filename to which the session should be saved. - TRUE if only the headers should be written. - - - - Save the request to a file; the headers' Request Line will not contain the scheme or host - - The name of the file to which the request should be saved. - TRUE to save only the headers - - - - Save the request to a file - - The name of the file to which the request should be saved. - TRUE to save only the headers. - TRUE to include the Scheme and Host in the Request Line. - - - - Read metadata about this session from a stream. NB: Closes the Stream when done. - - The stream of XML text from which session metadata will be loaded. - True if the Metadata was successfully loaded; False if any exceptions were trapped. - - - - Writes this session's metadata to a file. - - The name of the file to which the metadata should be saved in XML format. - True if the file was successfully written. - - - - Saves the response (headers and body) to a file - - The File to write - TRUE if only heaers should be written - - - - Write the metadata about this Session to a stream. The Stream is left open! - - The Stream to write to - - - - Write the session's Request to the specified stream - - TRUE if only the headers should be be written - TRUE if the Scheme and Host should be written in the Request Line - The Stream to which the request should be written - True if the request was written to the stream. False if the request headers do not exist. Throws on other stream errors. - - - - Write the session's Request to the specified stream - - TRUE if only the headers should be be written - TRUE if the Scheme and Host should be written in the Request Line - TRUE if binary bodies should be encoded in base64 for text-safe transport - The Stream to which the request should be written - True if the request was written to the stream. False if the request headers do not exist. Throws on other stream errors. - - - - Write the session's Response to the specified stream - - The stream to which the response should be written - TRUE if only the headers should be written - TRUE if the response was written to the stream. False if the response headers do not exist. Throws on other stream errors. - - - - Write the session to the specified stream - - The stream to which the session should be written - TRUE if only the request and response headers should be written - False on any exceptions; True otherwise - - - - Replace HTTP request headers and body using the specified file. - - The file containing the request - True if the file was successfully loaded as the request body - - - - Replace HTTP response headers and body using the specified stream. - - The stream containing the response. - True if the Stream was successfully loaded. - - - - Replace HTTP response headers and body using the specified file. - - The file containing the response. - True if the file was successfully loaded. - - - - Return a string generated from the request body, decoding it and converting from a codepage if needed. Throws on errors. - - A string containing the request body. - - - - Return a string generated from the response body, decoding it and converting from a codepage if needed. Throws on errors. - - A string containing the response body. - - - - Find the text encoding of the request - - Returns the Encoding of the requestBodyBytes - - - - Find the text encoding of the response - - The Encoding of the responseBodyBytes - - - - Returns true if the absolute request URI contains the specified string. Case-insensitive. - - Case-insensitive string to find - TRUE if the URI contains the string - - - - Removes chunking and HTTP Compression from the Response. Adds or updates Content-Length header. - - Returns TRUE if the response was decoded; returns FALSE on failure, or if response didn't have headers that showed encoding. - - - - Removes chunking and HTTP Compression from the Response. Adds or updates Content-Length header. - - TRUE if error messages should be suppressed. False otherwise. - TRUE if the decoding was successsful. - - - - Removes chunking and HTTP Compression from the Request. Adds or updates Content-Length header. - - Returns TRUE if the request was decoded; returns FALSE on failure, or if request didn't have headers that showed encoding. - - - - Use GZIP to compress the request body. Throws exceptions to caller. - - TRUE if compression succeeded - - - - Use GZIP to compress the response body. Throws exceptions to caller. - - TRUE if compression succeeded - - - - Use DEFLATE to compress the response body. Throws exceptions to caller. - - TRUE if compression succeeded - - - - Use BZIP2 to compress the response body. Throws exceptions to caller. - - TRUE if compression succeeded - - - - Introduces HTTP Chunked encoding on the response body - - The number of chunks to try to create - TRUE if the chunking could be performed. - - - - Perform a string replacement on the request body. Adjusts the Content-Length header if needed. - - The case-sensitive string to search for. - The text to replace. - TRUE if one or more replacements occurred. - - - - Call inside OnBeforeRequest to create a response object and bypass the server. - - - - - Perform a regex-based string replacement on the response body. Adjusts the Content-Length header if needed. - - The regular expression used to search the body. Specify RegEx Options via leading Inline Flags, e.g. (?im) for case-Insensitive Multi-line. - The text or expression used to replace - TRUE if replacements occured - - - - Perform a string replacement on the response body (potentially multiple times). Adjust the Content-Length header if needed. - - String to find (case-sensitive) - String to use to replace - TRUE if replacements occurred - - - - Perform a one-time string replacement on the response body. Adjust the Content-Length header if needed. - - String to find (case-sensitive) - String to use to replace - TRUE for Case-Sensitive - TRUE if a replacement occurred - - - - Replaces the request body with sString as UTF8. Sets Content-Length header and removes Transfer-Encoding/Content-Encoding. - - The desired request Body as a string - - - - Replaces the response body with sString. Sets Content-Length header and removes Transfer-Encoding/Content-Encoding - - The desired response Body as a string - - - - Add a string to the top of the response body, updating Content-Length. (Call utilDecodeResponse first!) - - The string to prepend - - - - Find a string in the request body. Return its index, or -1. - - Term to search for - Require case-sensitive match? - Location of sSearchFor,or -1 - - - - Find a string in the response body. Return its index, or -1. - - Term to search for - Require case-sensitive match? - Location of sSearchFor,or -1 - - - - Reset the SessionID counter to 0. This method can lead to confusing UI, so use sparingly. - - - - - Create a session object from two byte[] representing request and response. - - The client data bytes - The server data bytes - - - - Create a Session object from a (serializable) SessionData object - - - - - - Create a session object from two byte[] representing request and response. This is used when loading a Session Archive Zip. - - The client data bytes - The server data bytes - SessionFlags for this session - - - - Creates a new session and attaches it to the pipes passed as arguments - - The client pipe from which the request is read and to which the response is written. - The server pipe to which the request is sent and from which the response is read. May be null. - - - - Initialize a new session from a given request headers and body request builder data. Note: No Session ID is assigned here. - - NB: If you're copying an existing request, use oRequestHeaders.Clone() - The bytes of the request's body - - - - THREADHACK: - TODO: Use an I/O Completion Port to wait for traffic on the client socket without blocking a threadpool thread - - - - - Called when the Session is ready to begin processing. Eats exceptions to prevent unhandled exceptions on background threads from killing the application. - - Unused parameter (required by ThreadPool) - - - - InnerExecute() implements Fiddler's HTTP Pipeline - - - - - If the response demands credentials and the Session is configured to have Fiddler provide those - credentials, try to do so now. - - TRUE if Fiddler has generated a response to an Auth challenge; FALSE otherwise. - - - - This method will perform obtain authentication credentials from System.NET using a reflection trick to grab the internal value. - It's needed to cope with CBT. - - This MUST live within its own non-inlined method such that when it's run on an outdated version of the .NET Framework, the outdated - version of the target object triggers a TypeLoadException in such a way that the caller can catch it and warn the user without - killing Fiddler.exe. - - - - - - Returns a Kerberos-usable SPN for the target - http://dev.chromium.org/developers/design-documents/http-authentication - "HttpAuthHandlerNegotiate::CreateSPN" - http://blog.michelbarneveld.nl/michel/archive/2009/11/14/the-reason-why-kb911149-and-kb908209-are-not-the-soluton.aspx - - - - - - - Returns the fully-qualified URL to which this Session's response points, or null. - This method is needed because many servers (illegally) return a relative url in HTTP/3xx Location response headers. - - null, or Target URL. Note, you may want to call Utilities.TrimAfter(sTarget, '#'); on the response - - - - Gets a redirect-target from a base URI and a Location header - - - - null, or Target URL. Note, you may want to call Utilities.TrimAfter(sTarget, '#'); - - - - Fiddler can only auto-follow redirects to HTTP/HTTPS/FTP. - - The BASE URL to which a relative redirection should be applied - Response "Location" header - TRUE if the auto-redirect target is allowed - - - - Handles a Response's Redirect if the Session is configured to do so. - - TRUE if a redirect was handled, FALSE otherwise - - - - Check for common mistakes in HTTP Responses and notify the user if they are found. Called only if Linting is enabled. - - - - - Assign a Session ID. Called by ClientChatter when headers are available - - - - - Called only by InnerExecute, this method reads a request from the client and performs tampering/manipulation on it. - - TRUE if there's a Request object and we should continue processing. FALSE if reading the request failed - *OR* if script or an extension changed the session's State to DONE or ABORTED. - - - - - Returns TRUE if response is a NTLM or NEGO challenge - - True for HTTP/401,407 with NEGO or NTLM demand - - - - Returns TRUE if response is a Digest, NTLM, or Nego challenge - - True for HTTP/401,407 with Digest, NEGO, NTLM demand - - - - Replace the "ipv*.fiddler "fake" hostnames with the IP-literal equvalents. - - - - - Determines if request host is pointing directly at Fiddler. - - - - - - Echo the client's request back as a HTTP Response, encoding to prevent XSS. - - - - - Send a Proxy Configuration script back to the client. - - - - - Send a Proxy Configuration script back to WinHTTP, so that Fiddler can use an upstream proxy specified - by a script on a fileshare. (WinHTTP only allows HTTP/HTTPS-hosted script files) - - - - - Send the Fiddler Root certificate back to the client - - - - - This method indicates to the client that a secure tunnel was created, - without actually talking to an upstream server. - - If Fiddler's AutoResponder is enabled, and that autoresponder denies passthrough, - then Fiddler itself will always indicate "200 Connection Established" and wait for - another request from the client. That subsequent request can then potentially be - handled by the AutoResponder engine. - - BUG BUG: This occurs even if Fiddler isn't configured for HTTPS Decryption - - - The hostname to use in the Certificate returned to the client - - - - This method adds a Proxy-Support: Session-Based-Authentication header and indicates whether the response is Nego:Type2. - - Returns TRUE if server returned a credible Type2 NTLM Message - - - - This helper evaluates the conditions for client socket reuse. - - - - - - Sends the Response that Fiddler received from the server back to the client socket. - - Should the client and server pipes be tightly-bound together? - True, if the response was successfully sent to the client - - - - Sets up the next Session on these pipes, binding this Session's pipes to that new Session, as appropriate. When this method is called, - the nextSession variable is populated with the new Session, and that object is executed at the appropriate time. - - TRUE if both the client and server pipes should be bound regardless of the serverPipe's ReusePolicy - - - - Refresh the UI elements for the session. - - Use TRUE to call Invoke, use FALSE to call BeginInvoke. - - - - Bitflags of commonly-queried session attributes - - - - - Returns True if this is a HTTP CONNECT tunnel. - - - - - A common use for the Tag property is to store data that is closely associated with the Session. - It is NOT marshalled during drag/drop and is NOT serialized to a SAZ file. - - - - - This event fires at any time the session's State changes. Use with caution due to the potential for performance impact. - - - - - This event fires if this Session automatically yields a new one, for instance, if Fiddler is configured to automatically - follow redirects or perform multi-leg authentication (X-AutoAuth). - - - - - If this session is a Tunnel, and the tunnel's IsOpen property is TRUE, returns TRUE. Otherwise returns FALSE. - - - - - If this session is a Tunnel, returns number of bytes sent from the Server to the Client - - - - - If this session is a Tunnel, returns number of bytes sent from the Client to the Server - - - - - Gets or Sets the HTTP Request body bytes. - Setter adjusts Content-Length header, and removes Transfer-Encoding and Content-Encoding headers. - Setter DOES NOT CLONE the passsed array. - Setter will throw if the Request object does not exist for some reason. - Use utilSetRequestBody(sStr) to ensure proper character encoding if you need to use a string. - - - - - Gets or Sets the HTTP Response body bytes. - Setter adjusts Content-Length header, and removes Transfer-Encoding and Content-Encoding headers. - Setter DOES NOT CLONE the passsed array. - Setter will throw if the Response object has not yet been created. (See utilCreateResponseAndBypassServer) - Use utilSetResponseBody(sStr) to ensure proper character encoding if you need to use a string. - - - - - When true, this session was conducted using the HTTPS protocol. - - - - - When true, this session was conducted using the FTP protocol. - - - - - Get the process ID of the application which made this request, or 0 if it cannot be determined. - - - - - Gets a path-less filename suitable for saving the Response entity. Uses Content-Disposition if available. - - - - - Set to true in OnBeforeRequest if this request should bypass the gateway - - - - - Returns the port used by the client to communicate to Fiddler. - - - - - State of session. Note Side-Effects: If setting to .Aborted, calls FinishUISession. If setting to/from a Tamper state, calls RefreshMyInspectors - - - - - Returns the path and query part of the URL. (For a CONNECT request, returns the host:port to be connected.) - - - - - Retrieves the complete URI, including protocol/scheme, in the form http://www.host.com/filepath?query. - Or sets the complete URI, adjusting the UriScheme and/or Host. - - - - - Gets or sets the URL (without protocol) being requested from the server, in the form www.host.com/filepath?query. - - - - - DNS Name of the host server targeted by this request. May include IPv6 literal brackets. NB: a port# may be included. - - - - - DNS Name of the host server (no port) targeted by this request. Will include IPv6-literal brackets for IPv6-literal addresses - - - - - Returns the server port to which this request is targeted. - - - - - Returns the sequential number of this session. Note, by default numbering is restarted at zero when the session list is cleared. - - - - - Returns the Address used by the client to communicate to Fiddler. - - - - - Gets or Sets the HTTP Status code of the server's response - - - - - Checks whether this is a WebSocket, and if so, whether it has logged any parsed messages. - - - - - Returns TRUE if this session's State > ReadingResponse, and oResponse, oResponse.headers, and responseBodyBytes are all non-null. Note that - bHasResponse returns FALSE if the session is currently reading, even if a body was copied using the COMETPeek feature - - - - - Indexer property into SESSION flags, REQUEST headers, and RESPONSE headers. e.g. oSession["Request", "Host"] returns string value for the Request host header. If null, returns String.Empty - - SESSION, REQUEST or RESPONSE - The name of the flag or header - String value or String.Empty - - - - Simple indexer into the Session's oFlags object; returns null if flag is not present. - - - Returns the string value if the specified flag is present, or null if it is not. - - - - - This object holds Session information as a set of four easily-marshalled byte arrays. - It is serializable, which enables cross-process transfer of this data (as in a drag/drop operation). - (Internally, data is serialized as if it were being stored in a SAZ file) - - - - - Create a SessionData object. - Note: Method must run as cheaply as possible, since it runs on all Drag/Dropped sessions within Fiddler itself. - - - - - - Parameters passed into the AcceptConnection method. - - - - - The Socket which represents the newly-accepted Connection - - - - - The Certificate to pass to SecureClientPipeDirect immediately after accepting the connection. - Normally null, this will be set if the proxy endpoint is configured as a "Secure" endpoint - by AssignEndpointCertificate / ActAsHTTPSEndpointForHostname. - - - - - The DateTime of Creation of this connection - - - - - Unknown - - - - - The new Session is needed to respond to an Authentication Challenge - - - - - The new Session is needed to follow a Redirection - - - - - The new Session is needed to generate a CONNECT tunnel - - - - - Event arguments constructed for the OnStateChanged event raised when a Session's state property changed - - - - - The prior state of this session - - - - - The new state of this session - - - - - Constructor for the change in state - - The old state - The new state - - - - This class holds a specialized memory stream with growth characteristics more suitable for reading from a HTTP Stream. - The default MemoryStream's Capacity will always grow to 256 bytes, then at least ~2x current capacity up to 1gb, then to the exact length after that. - That has two problems: - - The capacity may unnecessarily grow to >85kb, putting the object on the LargeObjectHeap even if we didn't really need 85kb. - After the capacity reaches 1gb in length, the capacity growth never exceeds the length, leading to huge reallocations and copies on every write. - - TODO: In some cases, the client could "hint" what the proper capacity ultimately needs to be by adding the Header size in bytes to the Content-Length specified size. - - - - - Used by the caller to supply a hint on the expected total size of reads from the pipe. - We cannot blindly trust this value because sometimes the client or server will lie and provide a - huge value that it will never use. This is common for RPC-over-HTTPS tunnels like that used by Outlook, for instance. - - Suggested total buffer size in bytes - - - - Interface for the WebSocket and CONNECT Tunnel classes - - - - - The CONNECTTunnel class represents a "blind tunnel" through which a CONNECT request is serviced to shuffle bytes between a client and the server. - - - See pg 206 in HTTP: The Complete Reference for details on how Tunnels work. - When HTTPS Decryption is disabled, Fiddler accepts a CONNECT request from the client. Then, we open a connection to the remote server. - We shuttle bytes back and forth between the client and the server in this tunnel, keeping Fiddler itself out of the loop - (no tampering, etc). - - - - - Number of bytes received from the client - - - - - Number of bytes received from the server - - - - - TRUE if this is a Blind tunnel, FALSE if decrypting - - - - - This "Factory" method creates a new HTTPS Tunnel and executes it on a background (non-pooled) thread. - - The Session containing the HTTP CONNECT request - - - - Creates a HTTPS tunnel. External callers instead use the CreateTunnel static method. - - The session for which this tunnel was initially created. - Client Pipe - Server Pipe - - - - This function keeps the thread alive until it is signaled that the traffic is complete - - - - - Executes the HTTPS tunnel inside an All-it-can-eat exception handler. - Call from a background thread. - - - - - Close the HTTPS tunnel and signal the event to let the service thread die. - WARNING: This MUST not be allowed to throw any exceptions, because it will do so on threads that don't catch them, and this will kill the application. - - - - - Called when we have received data from the local client. - Incoming data will immediately be forwarded to the remote host. - - The result of the asynchronous operation. - - - Called when we have sent data to the local client.
When all the data has been sent, we will start receiving again from the remote host.
- The result of the asynchronous operation. -
- - Called when we have sent data to the remote host.
When all the data has been sent, we will start receiving again from the local client.
- The result of the asynchronous operation. -
- - Called when we have received data from the remote host.
Incoming data will immediately be forwarded to the local client.
- The result of the asynchronous operation. -
- - - Returns number of bytes sent from the Server to the Client - - - - - Returns number of bytes sent from the Client to the Server - - - - - Common functions we'll want to use on Strings. Fiddler makes extensive use of strings which - should be interpreted in a case-insensitive manner. - - - - - Holds a variety of useful functions used in Fiddler and its addons. - - - - - Ensures a value is within a specified range. - - Type of the value - Current value - Min value - Max value - Returns the provided value, unless it is outside of the specified range, in which case the nearest "fencepost" is returned. - - - - A static byte array containing 0 elements. Use to avoid having many copies of an empty byte[] floating around. - - - - - Queries the user for a filename - - Dialog title - String representing file dialog filter - Filename or null - - - - Queries the user for a filename - - Dialog title - String representing file dialog filter - Initial directory or null - Filename or null - - - - Queries the user for an OPEN filename - - Dialog title - String representing file dialog filter (e.g. "All files (*.*)|*.*") - Filename or null - - - - Queries the user for an OPEN filename - - Dialog title - String representing file dialog filter - Initial directory or null - Filename or null - - - - Check to see that the target assembly defines a RequiredVersionAttribute and that the current Fiddler instance meets that requirement - - The assembly to test - The "type" of extension for display in error message - TRUE if the assembly includes a requirement and Fiddler meets it. - - - - Typically, a version number is displayed as "major number.minor number.build number.private part number". - - Version required - Version of the binary being tested - Returns 0 if exact match, else greater than 0 if Required version greater than verTest - - - - Shrinks a path string to fit within a certain number of characters, replacing segments with ellipses if needed. - - The Path to compact - Number of characters to shrink to - The compacted string, or the original string if compaction wasn't needed or failed - - - - Convert a full path into one that uses environment variables - - e.g. C:\windows\system32\foo.dll - %WINDIR%\System32\foo.dll - - - - Address the problem where the target "PATH" calls for a directoryname is already a filename - - - - - - - Ensure that the target file does not yet exist. If it does, generates a new filename with an embedded identifier, e.g. out[1].txt instead. - Attempts to ensure filename is creatable; e.g. if a path component needs to be a directory but is a file already, injects [#] into that - path component. - - Candidate filename - New filename which does not yet exist - - - - Ensure that the target path exists and if a file exists there, it is not readonly or hidden. - WARNING: Can throw if target "Filename" calls for a parent directoryname that is already used as a filename by a non-directory. - E.g. EnsureOverwriteable(C:\io.sys\filename.txt); would throw. - - The candidate filename - - - - Writes arrBytes to a file, creating the target directory and overwriting if the file exists. - - Path to File to write. - Bytes to write. - - - - Fills an array completely using the provided stream. Unlike a normal .Read(), this one will always fully fill the array unless the Stream throws. - - The stream from which to read. - The byte array into which the data should be stored. - The count of bytes read. - - - - Create a new byte[] containing the contents of two other byte arrays. - - - - - - - - Returns the Value from a (case-insensitive) token in the header string. Correctly handles double-quoted strings. Allows comma and semicolon as delimiter - - Name of the header - Name of the token - Value of the token if present; otherwise, null - - - - Ensures that the target string is iMaxLength or fewer characters - - The string to trim from - The maximum number of characters to return - Up to iMaxLength characters from the "Head" of the string. - - - - Ensures that the target string is iMaxLength or fewer characters, appending ... if truncation occurred - - The string to trim from - The maximum number of characters to return - The string, or up to iMaxLength-1 characters from the "Head" of the string, with \u2026 appeneded. - - - - Returns the "Head" of a string, before and not including a specified search string. - - The string to trim from - The delimiting string at which the trim should end. - Part of a string up to (but not including) sDelim, or the full string if sDelim was not found. - - - - Returns the "Head" of a string, before and not including the first instance of specified delimiter. - - The string to trim from. - The delimiting character at which the trim should end. - Part of a string up to (but not including) chDelim, or the full string if chDelim was not found. - - - - [Deprecated] Ensures that the target string is iMaxLength or fewer characters - - The string to trim from - The maximum number of characters to return - Identical to the method. - Up to iMaxLength characters from the "Head" of the string. - - - - Returns the "Tail" of a string, after (but NOT including) the First instance of specified delimiter. - - - The string to trim from. - The delimiting character after which the text should be returned. - Part of a string after (but not including) chDelim, or the full string if chDelim was not found. - - - - Returns the "Tail" of a string, after (but NOT including) the First instance of specified search string. - - - The string to trim from. - The delimiting string after which the text should be returned. - Part of a string after (but not including) sDelim, or the full string if sDelim was not found. - - - - Returns the "Tail" of a string, after (and including) the first instance of specified search string. - - The string to trim from. - The delimiting string at which the text should be returned. - Part of the string starting with sDelim, or the entire string if sDelim not found. - - - - Returns the "Tail" of a string, after (but not including) the Last instance of specified delimiter. - - - The string to trim from. - The delimiting character after which text should be returned. - Part of a string after (but not including) the final chDelim, or the full string if chDelim was not found. - - - - Returns the "Tail" of a string, after (but not including) the Last instance of specified substring. - - - The string to trim from. - The delimiting string after which text should be returned. - Part of a string after (but not including) the final sDelim, or the full string if sDelim was not found. - - - - Determines true if a request with the specified HTTP Method/Verb MUST contain a entity body - - The Method/Verb - TRUE if the HTTP Method MUST contain a request body. - - - - Returns true if a request with the specified HTTP Method/Verb may contain a entity body - - The Method/Verb - TRUE if the HTTP Method MAY contain a request body. - - - - Detects whether string ends in a file extension generally recognized as an image file extension. - Pass lowercase into this function. - - *Lowercase* string - TRUE if string ends with common image file extension - - - - Determines if the specified MIME type is "binary" in nature. - - The MIME type - TRUE if the MIME type is likely binary in nature - - - - Gets a string from a byte-array, stripping a Byte Order Marker preamble if present. - - - This function really shouldn't need to exist. Why doesn't calling .GetString on a string with a preamble remove the preamble??? - - The byte array - The encoding to convert from *if* there's no Byte-order-marker - The string - - - - Gets (via Headers or Sniff) the provided body's text Encoding. If not found, returns CONFIG.oHeaderEncoding (usually UTF-8). Potentially slow. - - HTTP Headers, ideally containing a Content-Type header with a charset attribute. - byte[] containing the entity body. - A character encoding, if one could be determined - - - - Gets (via Headers or Sniff) the Response Text Encoding. Returns CONFIG.oHeaderEncoding (usually UTF-8) if unknown. - Perf: May be quite slow; cache the response - - The session - The encoding of the response body - - - - Set of encodings for which we'll attempt to sniff. (List order matters, I think) - - - - - HtmlEncode a string. - In Fiddler itself, this is a simple wrapper for the System.Web.HtmlEncode function. - The .NET3.5/4.0 Client Profile doesn't include System.Web, so we must provide our - own implementation of HtmlEncode for FiddlerCore's use. - - String to encode - String encoded according to the rules of HTML Encoding, or null. - - - - This function accepts a string and an offset into the string. It reads one or more %XX sequences from the - string converting them into a UTF-8 string based on the input text - - - - - - - - Convert the %-encoded string into a string, interpreting %-escape sequences as UTF-8 characters - - %-encoded string - Unencoded string - - - - Replaces System.Web.HttpUtility.UrlPathEncode(str). - - String to encode as a URL Path - Encoded string - - - - Tokenize a string into tokens. Delimits on unquoted whitespace ; quote marks are dropped unless preceded by \ characters. - BUG BUG: Doesn't do what you expect with a path like this, due to the trailing slash: - prefs set fiddler.config.path.webtestexport.plugins "F:\users\ericlaw\documents\fiddler2\importexport\VSWebTest\" - For now, the simple bet is to drop the final backslash (since it'll get put back by other code) - - The string to tokenize - An array of strings - - - - Pretty-print a Hex view of a byte array. Slow. - - The byte array - Number of bytes per line - String containing a pretty-printed array - - - - Pretty-print a Hex view of a byte array. Slow. - - The byte array - Number of bytes per line - The maximum number of bytes to pretty-print - String containing a pretty-printed array - - - - Pretty-print a Hex view of a byte array. Slow. - - The byte array - Number of bytes per line - The maximum number of bytes to pretty-print - Show ASCII text at the end of each line - String containing a pretty-printed array - - - - Print an byte array to a hex string. - Slow. - - Byte array - String of hex bytes, or "null"/"empty" if no bytes provided - - - - Create a string in CF_HTML format - - The HTML string - The HTML string wrapped with a CF_HTML prelude - - - - Returns an integer from the registry, or a default. - - The Registry key in which to find the value. - The registry value name. - Default to return if the registry key is missing or cannot be used as an integer - The retrieved integer, or the default. - - - - Save a string to the registry. Correctly handles null Value, saving as String.Empty - - The registry key into which the value will be written. - The name of the value. - The value to write. - - - - Returns an Float from the registry, or a default. - - Registry key in which to find the value. - The value name. - The default float value if the registry key is missing or cannot be used as a float. - Float representing the value, or the default. - - - - Get a bool from the registry - - The RegistryKey - The Value name - The default value - Returns an bool from the registry, or bDefault if the registry key is missing or cannot be used as an bool. - - - - Maps a MIMEType to a file extension. Note: May hit the registry, so consider the performance implications. - Pass only the TYPE (e.g. use oResponse.MIMEType), to ensure no charset info in the string. - - The MIME Type - A file extension for the type, or .TXT - - - - Return the content type of a target file, or application/octet-stream if unknown. - - A filename, including the extension - - - - - Use the system registry to find the proper MIME-Type for a given file extension. - WARNING: Calling Path.GetExtension may throw on bad input. Use to guard against that. - - Dot-prefixed file extension (e.g. ".js") - Content-Type, or null if one cannot be determined - - - - Determines if we have a complete chunked response body (RFC2616 Section 3.6.1) - - The session object, used for error reporting - The response data stream. Note: We do not touch the POSITION property. - The start of the HTTP body to scan for chunk size info - Returns the start of the final received/partial chunk - End of byte data in stream representing this chunked content, or -1 if error - True, if we've found the complete last chunk, false otherwise. - - - - Takes a byte array and applies HTTP Chunked Transfer Encoding to it - - The byte array to convert - The number of chunks to try to create - The byte array with Chunked Transfer Encoding applied - - - - Removes HTTP chunked encoding from the data in writeData and returns the resulting array. - - Some chunked data - Unchunked data. Warning: Throws on data format errors - - - - Returns TRUE if the Array contains nulls. TODO: Extend to check for other chars which are clearly non-Unicode - - - - - - - Implements a BlockList for "unknown" encodings that the utilDecode* functions cannot handle - - Transfer-Encoding - Content-Encoding - TRUE if any encoding is known to be unsupported - - - - Removes one or more encodings in the proper order to reconstruct the unencoded body. - If removing Transfer-Encoding and Content-Encoding, ALWAYS remove Transfer-Encoding first. - - The list of encodings in the order that they were applied - RFC2616: If multiple encodings have been applied to an entity, the content codings MUST be listed in the order in which they were applied. - Should unchunking be permitted (TRUE for Transfer-Encoding, FALSE for Content-Encoding) - The bytes of the body - - - - Remove all encodings from arrBody, based on those specified in the supplied HTTP headers; does NOT modify headers. - Throws on errors. - - *Readonly* headers specifying what encodings are applied - In/Out array to be modified - - - - Decompress an array compressed using an Zlib DEFLATE stream. Not a HTTP Encoding; it's used internally in the PNG format. - - The array to expand - byte[] of decompressed data - - - - GZIPs a byte-array - - Input byte array - byte[] containing a gzip-compressed copy of writeData[] - - - - GZIP-Expand function which shows no UI and will throw on error - - TRUE if you want to use Xceed to decompress; false if you want to use System.IO - byte[] to decompress - A decompressed byte array, or byte[0]. Throws on errors. - - - - Expands a GZIP-compressed byte array - - The array to decompress - byte[] containing an un-gzipped copy of compressedData[] - - - - Compress a byte array using RFC1951 DEFLATE - - Array to compress - byte[] containing a DEFLATE'd copy of writeData[] - - - - UnDeflate function which shows no UI and will throw on error - - TRUE if you want to use Xceed to decompress; false if you want to use System.IO - byte[] to decompress - A decompressed byte array, or byte[0]. Throws on errors. - - - - Decompress a byte array that was compressed using RFC1951 DEFLATE - - Array to decompress - byte[] of decompressed data - - - - Compress a byte[] using the bzip2 algorithm - - Array to compress - byte[] of data compressed using bzip2 - - - - Decompress an array compressed using bzip2 - - The array to expand - byte[] of decompressed data - - - - Decompress an array compressed using bzip2 - - The array to expand - byte[] of decompressed data - - - - Try parsing the string for a Hex-formatted int. If it fails, return false and 0 in iOutput. - - The hex number - The int value - TRUE if the parsing succeeded - - - - Returns TRUE if two ORIGIN (scheme+host+port) values are functionally equivalent. - - The first ORIGIN - The second ORIGIN - The default port, if a port is not specified - TRUE if the two origins are equivalent - - - - This function cracks a sHostPort string to determine if the address - refers to a "local" site - - The string to evaluate, potentially containing a port - True if the address is local - - - - This function cracks a sHostPort string to determine if the address - refers to the local computer - - The string to evaluate, potentially containing a port - True if the address is 127.0.0.1, 'localhost', or ::1 - - - - Determines if the specified Hostname is a either 'localhost' or an IPv4 or IPv6 loopback literal - - Hostname (no port) - TRUE if the hostname is equivalent to localhost - - - - This function cracks the Hostname/Port combo, removing IPV6 brackets if needed - - Hostname/port combo, like www.foo.com or www.example.com:8888 or [::1]:80 - The hostname, minus any IPv6 literal brackets, if present - Port #, 80 if not specified, -1 if corrupt - - - - Given a string/list in the form HOSTNAME:PORT#;HOSTNAME2:PORT2#, this function returns the FIRST IPEndPoint. Defaults to port 80 if not specified. - Warning: DNS resolution is slow, so use this function wisely. - - HOSTNAME:PORT#;OPTHOST2:PORT2# - An IPEndPoint or null - - - - Given a string/list in the form HOSTNAME:PORT#;HOSTNAME2:PORT2#, this function returns all IPEndPoints for ALL listed hosts. Defaults to port 80 if not specified. - Warning: DNS resolution is slow, so use this function wisely. - - HOSTNAME:PORT#;OPTHOST2:PORT2# - An array of IPEndPoints or null if no results were obtained - - - - This function attempts to be a ~fast~ way to return an IP from a hoststring that contains an IP-Literal. - - Hostname - IPAddress, or null, if the sHost wasn't an IP-Literal - - - - Launch the user's browser to a hyperlink. This function traps exceptions and notifies the user via UI dialog. - - The URL to ShellExecute. - TRUE if the ShellExecute call succeeded. - - - - Wrapper for Process.Start that shows error messages in the event of failure. - - Fully-qualified filename to execute. - Command line parameters to pass. - TRUE if the execution succeeded. FALSE if the execution failed. An error message will be shown for any error except the user declining UAC. - - - - Run an executable and wait for it to exit, notifying the user of any exceptions. - - Fully-qualified filename of file to execute. - Command-line parameters to pass. - TRUE if the execution succeeded. FALSE if the error message was shown. - - - - Run an executable, wait for it to exit, and return its output as a string. - NOTE: Uses CreateProcess, so you cannot launch applications which require Elevation. - - Fully-qualified filename of file to Execute - Command-line parameters to pass - Exit code returned by the executable - String containing the standard-output of the executable - - - - Copy a string to the clipboard, notifying the user of any exceptions - - The text to copy - TRUE if the copy succeeded - - - - Copy an object to the clipboard, notifying the user of any exceptions - - The object to copy - True if successful - - - - This method prepares a string to be converted into a regular expression by escaping special characters. - This method was originally meant for parsing WPAD proxy script strings, but is now used in other places. You should probably be using the Static RegEx.Escape method for most purposes instead. - - - - - - - - - Determines whether the arrData array STARTS WITH with the supplied arrMagics bytes. Used for Content-Type sniffing. - - The data, or null - The MagicBytes to look for - TRUE if arrData begins with arrMagics - - - - Determines whether the arrData array begins with the supplied sMagics ASCII text. Used for Content-Type sniffing. - - The data, or null - The ASCII text to look for - TRUE if arrData begins with sMagics (encoded as ASCII octets) - - - - Is this HTTPMethod used for RPC-over-HTTPS? - - - - - Determine if a given byte array has the start of a HTTP/1.* 200 response. - Useful primarily to determine if a CONNECT request to a proxy returned success. - - - - - - - Determine if a given byte array has the start of a HTTP/1.* 200 response. - Useful primarily to determine if a CONNECT request to a proxy returned success. - - - - - - - For a given process name, returns a bool indicating whether this is a known browser process name. - - The Process name (e.g. "abrowser.exe") - Returns true if the process name starts with a common browser process name (e.g. ie, firefox, etc) - - - - Ensure that a given path is absolute, if not, applying the root path - - - - - - - - If sFilename is absolute, returns it, otherwise, combines the leaf filename with local response folders hunting for a match. - Trims at the first ? character, if any - - Either a fully-qualified path, or a leaf filename - File path - - - - Format an Exception message, including InnerException message if present. - - - - - - - Get a TickCount (milliseconds since system start) as an unsigned 64bit value. On Vista+, uses the GetTickCount64 API that won't rollover, - but on XP, this unsigned wrapper moves the rollover point to 49 days of uptime. - - Number of ms since Windows started - - - - Returns TRUE if the user is running Elevated. Requires WinXP to Win8 - - TRUE if the user is an Admin and the process is Elevated - - - - Returns a succinct version of Environment.OSVersion.VersionString - - - - - - Duplicate a byte array, replacing null with byte[0]. - Doing this instead of .Clone() because it better handles nulls and it may be faster. - - The array to copy - The new array. - - - - Returns TRUE if the array is null or contains 0 bytes - - byte[] to test - - - - - - - - True if ClientChatter is non-null and its headers are non-null - - - - True if ClientChatter is non-null and its headers are non-null - - - True if ClientChatter is non-null and its headers are non-null - - - - Return a multi-line string describing the NetworkInterfaces[] - - - - - - Checks a DLL's filename for signals that it doesn't contain extensions. - TODO: This is only needed because I wasn't smart enough to require that the assembly be named something like Fiddler.* - - DLL filename - TRUE if we should skip this assembly during enumeration - - - - Create a Session Archive Zip file containing the specified sessions - - The filename of the SAZ file to store - Array of sessions to store - Password to encrypt the file with, or null - TRUE if verbose error dialogs should be shown. - - - - - This is a refactored helper function which writes a single session to an open SAZ file. - - The session to write to the file - The ZIP File - The number of this file - The format string (e.g. "D3") to use when formatting the file number - The HTML String builder to write index information - TRUE to show verbose error dialog information - - - - Reads a Session Archive Zip file into an array of Session objects - - Filename to load - - Loaded array of sessions or null, in case of failure - - - - URLMon Interop Class - - - - - Set the user-agent string for the current process - - New UA string - - - - Query WinINET for the current process' proxy settings. Oddly, there's no way to UrlMkGetSessionOption for the current proxy. - - String of hex suitable for display - - - - Configures the current process to use the system proxy for URLMon/WinINET traffic. - - - - - Configures the current process to use no Proxy for URLMon/WinINET traffic. - - - - - Sets the proxy for the current process to the specified list. See http://msdn.microsoft.com/en-us/library/aa383996(VS.85).aspx - - e.g. "127.0.0.1:8888" or "http=insecProxy:80;https=secProxy:444" - Semi-colon delimted list of hosts to bypass proxy; use <local> to bypass for Intranet - - - - States for the (future) Session-processing State Machine. - NOT YET USED. - - - - - State of the current session - - - - - Object created but nothing's happening yet - - - - - Thread is reading the HTTP Request - - - - - AutoTamperRequest pass 1 (Only used by IAutoTamper) - - - - - User can tamper using Fiddler Inspectors - - - - - AutoTamperRequest pass 2 (Only used by IAutoTamper) - - - - - Thread is sending the Request to the server - - - - - Thread is reading the HTTP Response - - - - - AutoTamperResponse pass 1 (Only used by IAutoTamper) - - - - - User can tamper using Fiddler Inspectors - - - - - AutoTamperResponse pass 2 (Only used by IAutoTamper) - - - - - Sending response to client application - - - - - Session complete - - - - - Session was aborted (client didn't want response, fatal error, etc) - - - - - This enumeration provides the values for the Session object's BitFlags field - - - - - No flags are set - - - - - The request originally arrived with a URL specifying the HTTPS protocol. - - - - - The request originally arrived with a URL specifying the FTP protocol. - - - - - Ignore this traffic; do not buffer, store, or call event handlers - - - - - The client pipe was reused - - - - - The server pipe was reused - - - - - The request was streamed (e.g. on an RPC_OUT_DATA request) - - - - - The response was streamed - - - - - The request was generated by Fiddler itself (e.g. the Composer tab) - - - - - The response was generated by Fiddler itself (e.g. AutoResponder or utilCreateResponseAndBypassServer) - - - - - This session was loaded from a .SAZ File - - - - - This session was loaded from some other tool - - - - - This request was sent to an upstream (CERN) gateway proxy - - - - - This is a "blind" CONNECT tunnel for HTTPS traffic - - - - - This is a CONNECT tunnel which decrypts HTTPS traffic as it flows through - - - - - This response was served from a client cache, bypassing Fiddler. Fiddler only "sees" this session because other software reported it to Fiddler - - - - - There was a HTTP Protocol violation in the client's request - - - - - There was a HTTP Protocol violation in the server's response - - - - - Response body was dropped, e.g due to fiddler.network.streaming.ForgetStreamedData - - - - - This is a CONNECT tunnel for WebSocket traffic - - - - - This request was sent using the SOCKS protocol - - - - - This class maintains the Proxy Bypass List for the upstream gateway. - In the constructor, pass the desired proxy bypass string, as retrieved from WinINET for the Fiddler Options screen. - Then, call the IsBypass(sTarget) method to determine if the Gateway should be bypassed - - - - - List of regular expressions for matching against request Scheme://HostPort. - NB: This list is either null or contains at least one item. - - - - - Boolean flag indicating whether the bypass list contained a <local> token. - - - - - Pass the desired proxy bypass string retrieved from WinINET. - - - - - - Given the rules for this bypasslist, should this target bypass the proxy? - - The URI Scheme - The Host and PORT - True if this request should not be sent to the gateway proxy - - - - Convert the string representing the bypass list into an array of rules escaped and ready to be turned into regular expressions - - - - - - Does the bypassList contain any rules at all? - - - - - Flags that indicate what problems, if any, were encountered in parsing HTTP headers - - - - - There were no problems parsing the HTTP headers - - - - - The HTTP headers ended incorrectly with \n\n - - - - - The HTTP headers ended incorrectly with \n\r\n - - - - - The HTTP headers were malformed. - - - - - The Parser class exposes static methods used to parse strings or byte arrays into HTTP messages. - - - - - Given a byte[] representing a request, determines the offsets of the components of the line. WARNING: Input MUST contain a LF or an exception will be thrown - - Byte array of the request - Returns the index of the byte of the URI in the Request line - Returns the length of the URI in the Request line - Returns the index of the first byte of the name/value header pairs - - - - Parse out HTTP Header lines. - - Header collection to update - Array of Strings - Index into array at which parsing should start - String containing any errors encountered - TRUE if there were no errors, false otherwise - - - - Given a byte array, determines the Headers length - - Input array of data - Returns the calculated length of the headers. - Returns the calculated start of the response body. - Any HTTPHeaderParseWarnings discovered during parsing. - True, if the parsing was successful. - - - - Given a MemoryStream, attempts to parse a HTTP Request starting at the current position. - - TRUE if a request could be parsed, FALSE otherwise - - - - Given a MemoryStream, attempts to parse a HTTP Response starting at the current position - - TRUE if the response must not have a body (e.g. because Request method was HEAD) - TRUE if a response could be parsed, FALSE otherwise - - - - Parse the HTTP Request into a headers object. - - The HTTP Request string, including *at least the headers* with a trailing CRLFCRLF - HTTPRequestHeaders parsed from the string. - - - - Break headers off, then convert CRLFs into LFs - - - - - - - Parse the HTTP Response into a headers object. - - The HTTP response as a string, including at least the headers. - HTTPResponseHeaders parsed from the string. - - - - The RASInfo class is used to enumerate Network Connectoids so Fiddler can adjust proxy configuration for all connectoids, not just the DefaultLAN - - - - - Ask RAS for the list of network connectoids. We'll always add "DefaultLAN" to this list as well. - - - - - - Abstract base class for the ClientPipe and ServerPipe classes. A Pipe represents a connection to either the client or the server, optionally encrypted using SSL/TLS. - - - - - The base socket wrapped in this pipe - - - - - The number of times that this Pipe has been used - - - - - The HTTPS stream wrapped around the base socket - - - - - The display name of this Pipe - - - - - Number of milliseconds to delay each 1024 bytes transmitted - - - - - Create a new pipe, an enhanced wrapper around a socket - - Socket which this pipe wraps - Identification string used for debugging purposes - - - - Poll the underlying socket for readable data (or closure/errors) - - TRUE if this Pipe requires attention - - - - Call this method when about to reuse a socket. Currently, increments the socket's UseCount and resets its transmit delay to 0. - - The session identifier of the new session, or zero - - - - Sends a byte array through this pipe - - The bytes - - - - Sends the data specified in oBytes (between iOffset and iOffset+iCount-1 inclusive) down the pipe. - - - - - - - - Receive bytes from the pipe into the DATA buffer. - - Throws IO exceptions from the socket/stream - Array of data read - Bytes read - - - - Return the raw socket this pipe wraps. Avoid calling this method if at all possible. - - The Socket object this Pipe wraps. - - - - Shutdown and close the socket inside this pipe. Eats exceptions. - - - - - Abruptly closes the socket by sending a RST packet - - - - - Return the Connected status of the base socket - - - - - Returns a bool indicating if the socket in this Pipe is CURRENTLY connected and wrapped in a SecureStream - - - - - Returns the SSL/TLS protocol securing this connection - - - - - Return the Remote Port to which this socket is attached. - - - - - Return the Local Port to which the base socket is attached. Note: May return a misleading port if the ISA Firewall Client is in use. - - - - - Returns the remote address to which this Pipe is connected, or 0.0.0.0 on error. - - - - - Gets or sets the transmission delay on this Pipe, used for performance simulation purposes. - - - - - Summary description for frmPrompt. - - - - - Required designer variable. - - - - - GetUserString prompts the user for a string. - - Title of the dialog - The prompt text in the dialog - The default response - If true, will return null if user hits cancel. Else returns sDefault. - The user's result, or null if user cancelled and bReturnNullIfCancelled set. - - - - Clean up any resources being used. - - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - To override default certificate handling, your class should implement this interface in an assembly - referenced by the fiddler.certmaker.assembly preference; by default, "certmaker.dll" in the application - folder is loaded - - - - - Implement ICertificateProvider2 instead - - - - - Return a certificate to secure this traffic. Generally, it's expected that this method WILL create a new certificate if needed. - - Hostname (e.g. "www.example.com") - An X509Certificate, or null on error - - - - Return the root certificate to which Host Certificates are chained. Generally, it's expected that this method will NOT create a root certificate. - - An X509Certificate, or null on error - - - - When this method is called, your extension should create a Root certificate. - - TRUE if the operation was successful - - - - When this method is called, your extension should copy the your Root certificate into - the user's (or machines's) Root certificate store. - - TRUE if the operation was successful - - - - When this method is called, your extension should discard all certificates and - clear any certificates that have been added to the user's certificate store. - - TRUE, if all certificates were removed; FALSE if any certificates were preserved - - - - When this method is called, your extension should check to see if the User or Machine Root - certificate store contains your Root certificate. - - Set to TRUE if StoreLocation.CurrentUser StoreName.Root has the certificate - Set to TRUE if StoreLocation.LocalMachine StoreName.Root has the certificate - TRUE if either bUserTrusted or bMachineTrusted - - - - When this method is called, your extension should discard all certificates and - clear any certificates that have been added to the user's certificate store - - TRUE if the root certificate should also be cleared - TRUE, if all certificates were removed; FALSE if any certificates were preserved - - - - Call this function to cache a certificate in the Certificate Provider - - The hostname to match - The certificate that the Provider should later provide when GetCertificateForHost is called - True if the request was successful - - - - File path pointing to the location of MakeCert.exe - - - - - Cache of previously-generated EE certificates. Thread safety managed by _oRWLock - - - - - Cache of previously-generated Root certificate - - - - - Reader/Writer lock gates access to the certificate cache and generation functions. - - We must set the SupportsRecursion flag because there are cases where the thread holds the lock in Write mode and then enters Read mode in a nested call. - - - - Constructor: Simply cache the path to MakeCert - - - - - Find certificates that have the specified full subject. - - The store to search - FindBySubject{Distinguished}Name requires a complete match of the SUBJECT, including CN, O, and OU - Matching certificates - - - - Find certificates that have the specified issuer. - - The store to search - FindByIssuer{Distinguished}Name requires a complete match of the SUBJECT, including CN, O, and OU - Matching certificates - - - - Interface method: Clear the in-memory caches and Windows certificate stores - - TRUE to clear the Root Certificate from the cache and Windows stores - TRUE if successful - - - - Interface method: Clear the in-memory caches and Windows certificate stores - - - - - - Use MakeCert to generate a unique self-signed certificate - - TRUE if the Root certificate was generated successfully - - - - Get the root certificate from cache or storage, only if it already exists. - - - - - - Returns an Interception certificate for the specified hostname - - Hostname for the target certificate - This method uses a Reader lock when checking the cache and a Writer lock when updating the cache. - An Interception Certificate, or NULL - - - - Find a certificate from the certificate store, creating a new certificate if it was not found. - - A SubjectCN hostname, of the form www.example.com - TRUE if the cert wasn't found in the Windows Certificate store and this function attempted to create it. - No locks are acquired by this method itself. - A certificate or /null/ - - - - Find a certificate from the certificate store, if present. - - No locks are acquired by this method itself. - A certificate or /null/ - - - - Updates the Server Certificate cache under the Writer lock - - The target hostname - The certificate to cache - - - - - Creates a certificate for ServerAuth. If isRoot is set, designates that this is a self-signed root. - - Uses a reader lock when checking for the Root certificate. Uses a Writer lock when creating a certificate. - A string of the form: "www.hostname.com" - A boolean indicating if this is a request to create the root certificate - Newly-created certificate, or Null - - - - The ClientChatter object, exposed as the oRequest object on the Session object, represents a single web request. - - - - - Size of buffer passed to pipe.Receive when reading from the client - - - - - The ClientPipe object which is connected to the client, or null. - - - - - Parsed Headers - - - - - The session object which owns this ClientChatter - - - - - The host pulled from the URI, usually null except while reading/parsing the request - - - - - Buffer holds this request's data as it is read from the pipe. - - - - - Offset to first byte of body in m_requestData - - - - - Optimization: tracks how far we've previously looked when determining iEntityBodyOffset - - - - - Create a ClientChatter object initialized with a set of HTTP headers - Called primarily when loading session data from a file. - - The session object which will own this request - The string containing the request data - - - - Loads a HTTP request from a file rather than a memory stream. TODO: Why not make this public and have a responsebody version? - - The file to load - TRUE if the file existed. - - - - Based on this session's data, determine the expected Transfer-Size of the request body. See RFC2616 Section 4.4 Message Length. - Note, there's currently no support for "multipart/byteranges" requests anywhere in Fiddler. - - Expected Transfer-Size of the body, in bytes. - - - - Free Request data. Called by TakeEntity or by ReadRequest method on request failure - - - - - Extract a byte array representing the entity, put any excess bytes back in the socket, delete the requestData stream, and return the entity. - - Byte array containing the entity - - - - Send a HTTP/XXX Error Message to the Client, calling FiddlerApplication.BeforeReturningError and DoReturningError in FiddlerScript. - Note: This method does not poison either the client or server pipe, so if poisoning is desired, it's the caller's responsibility to do that. - - Response code - Response status text - Body of the HTTP Response - - - - Parse the headers from the requestData buffer. - Precondition: Call AFTER having set the correct iEntityBodyOffset. - - Note: This code used to be a lot simpler before, when it used strings instead of byte[]s. Sadly, - we've gotta use byte[]s to ensure nothing in the URI gets lost. - - TRUE if successful. Frees arrRequest if successful. - - - - This function decides if the request string represents a complete HTTP request - - - - - - Scans requestData stream for the \r\n\r\n (or variants) sequence - which indicates that the header block is complete. - - SIDE EFFECTS: - iBodySeekProgress is updated and maintained across calls to this function - iEntityBodyOffset is updated if the end of headers is found - - True, if requestData contains a full set of headers - - - - Read a complete HTTP Request from the Client. - - TRUE, if a request could be read. FALSE, otherwise. - - - - Peek at number of bytes received from the client thus far. - - - - - HTTP Headers sent in the client request, or null. - - - - - Was this request received from a reused client connection? - - - - - Note: This returns the HTTP_HOST header, which may include a trailing port #. - - - - - Simple indexer into the Request Headers object - - - - - The PipePool maintains a collection of connected ServerPipes for reuse - - - - - Minimum idle time of pipes to be expired from the pool. - Note, we don't check the pipe's ulLastPooled value when extracting a pipe, - so its age could exceed the allowed lifetime by up to MSEC_POOL_CLEANUP_INTERVAL - - - - - The Pool itself. - - - - - Time at which a "Clear before" operation was conducted. We store this - so that we don't accidentally put any pipes that were in use back into - the pool after a clear operation - - - - - Remove any pipes from Stacks if they exceed the age threshold - Remove any Stacks from pool if they are empty - - - - - Clear all pooled Pipes, calling .End() on each. - - - - - Return a string representing the Pipes in the Pool - - A string representing the pipes in the pool - - - - Get a Server connection for reuse, or null if a suitable connection is not in the pool. - - The key which identifies the connection to search for. Good syntax is [HTTPS:]HOSTNAME:PORT - The ProcessID of the client requesting the Pipe - HACK to be removed; the SessionID# of the request - A Pipe to reuse, or NULL - - - - Store a pipe for later use, if reuse is allowed by settings and state of the pipe. - - The Pipe to place in the pool - - - - A ClientPipe wraps a socket connection to a client application. - - - - - Does this Pipe have data (or closure/errors) to read? - - TRUE if this Pipe requires attention - - - - If you previously read more bytes than you needed from this client socket, you can put some back. - - Array of bytes to put back - - - - Sets the receiveTimeout based on whether this is a freshly opened client socket or a reused one. - - - - - Returns a semicolon-delimited string describing this ClientPipe - - A semicolon-delimited string - - - - Perform a HTTPS Server handshake to the client. Swallows exception and returns false on failure. - - - - - - - This function sends the client socket a CONNECT ESTABLISHED, and then performs a HTTPS authentication - handshake, with Fiddler acting as the server. - - Hostname Fiddler is pretending to be (NO PORT!) - The set of headers to be returned to the client in response to the client's CONNECT tunneling request - true if the handshake succeeds - - - - ID of the process that opened this socket, assuming that Port Mapping is enabled, and the connection is from the local machine - - - - - Name of the Process referred to by LocalProcessID, or String.Empty if unknown - - - - - Timestamp of either 1> The underlying socket's creation from a .Accept() call, or 2> when this ClientPipe was created. - - - - - The Logger object is a simple event log - - - - - Queue of Messages that are be logged (usually during application startup) until another object has loaded and registered for notification of such Messages - - - - - Creates a Logger object - - True if a queue should be created to store messages during Fiddler's startup - - - - Flushes previously-queued messages to the newly attached listener. - - - - - Log a string with specified string formatting - - The format string - The arguments to replace in the string - - - - Log a string - - The string to log - - - - The Event to raise when a string is logged - - - - - EventArgs class for the LogEvent handler - - - - - The String which has been logged - - - - - Fiddler Transcoders allow import and export of Sessions from Fiddler - - - - - Create the FiddlerTranscoders object - - - - - List all of the Transcoder objects that are loaded - - - - - - Add Import/Export encoders to FiddlerApplication.oTranscoders - - Assembly to import exporters and importers - FALSE on obvious errors - - - - Add Import/Export encoders to FiddlerApplication.oTranscoders - - Assembly to scan for transcoders - FALSE on obvious errors - - - - Loads any assembly in the specified path that ends with .dll and does not start with "_", checks that a compatible version requirement was specified, - and adds the importer and exporters within to the collection. - - The path to scan for extensions - - - - Ensures that Import/Export Transcoders have been loaded - - - - - Returns a TranscoderTuple willing to handle the specified format - - The Format - TranscoderTuple, or null - - - - Returns a TranscoderTuple willing to handle the specified format - - The Format - TranscoderTuple, or null - - - - Gets the format list of the specified type and adds that type to the collection. - - - - TRUE if any formats were found; FALSE otherwise - - - - Clear Importer and Exporter collections - - - - - True if one or more classes implementing ISessionImporter are available. - - - - - True if one or more classes implementing ISessionImporter are available. - - - - - The WebSocket class represents a "tunnel" through a WebSocket shuffles bytes between a client and the server. - The class' messages may be deserialized from a SAZ file. - - - - - Should this WebSocket Tunnel parse the WS traffic within into individual messages? - - - - - Writes all of the messages stored in this WebSocket to a stream. - - - - - - - Read headers from the stream. - - The Stream from which WebSocketSerializationHeaders should be read - The Array of headers, or String[0] - - - - Number of bytes received from the client - - - - - Number of bytes received from the server - - - - - Creates a "detached" WebSocket which contains messages loaded from the specified stream - - Session to which the WebSocket messages belong - The Stream containing messages, which will be closed upon completion - - - - This factory method creates a new WebSocket Tunnel and executes it on a background (non-pooled) thread. - - The Session containing the HTTP CONNECT request - - - - Creates a WebSocket tunnel. External callers instead use the CreateTunnel static method. - - The session for which this tunnel was initially created. - The client pipe - The server pipe - - - - This function keeps the Tunnel/Thread alive until it is signaled that the traffic is complete - - - - - Performs cleanup of the WebSocket instance. Call this after the WebSocket closes normally or after abort/exceptions. - - - - - Executes the WebSocket tunnel on a background thread - - - - - Interface Method - Close the WebSocket and signal the event to let its service thread die. Also called by oSession.Abort() - WARNING: This should not be allowed to throw any exceptions, because it will do so on threads that don't - catch them, and this will kill the application. - - - - - When we get a buffer from the client, we push it into the memory stream - - - - - When we get a buffer from the server, we push it into the memory stream - - - - - This method parses the data in strmClientBytes to extact one or more WebSocket messages. It then sends each message - through the pipeline. - - - - This method parses the data in strmServerBytes to extact one or more WebSocket messages. It then sends each message - through the pipeline to the client. - - - - Called when we have received data from the local client. - - The result of the asynchronous operation. - - - Called when we have received data from the remote host. Incoming data will immediately be forwarded to the local client. - The result of the asynchronous operation. - - - - Is this WebSocket open/connected? - - - - - Boolean that determines whether the WebSocket tunnel tracks messages. - - - - - Returns number of bytes sent from the Server to the Client on this WebSocket - - - - - Returns number of bytes sent from the Client to the Server on this WebSocket - - - - - A WebSocketMessage stores a single frame of a single WebSocket message - http://tools.ietf.org/html/rfc6455 - - - - - Unmasks the first array into the third, using the second as a masking key. - - - - - - - - Masks the first array's data using the key in the second - - The data to be masked - A 4-byte obfuscation key, or null. - - - - Replaces the WebSocketMessage's payload with the specified string, masking if needed. - - - - - - Copies the provided byte array over the WebSocketMessage's payload, masking if needed. - - - - - - Masks the provided array (if necessary) and assigns it to the WebSocketMessage's payload. - - New array of data - - - - Return the WebSocketMessage's payload as a string. - - - - - - Copy the WebSocketMessage's payload into a new Byte Array. - - A new byte array containing the (unmasked) payload. - - - - Is this a Request message? - - - - - Was this Message eaten? - - - - - Should this message be paused for tampering? - TODO: Not yet implemented - - - - - The WebSocketTimers collection tracks the timestamps for this message - - - - - The raw payload data, which may be masked - - - - - The four-byte payload masking key, if any - - - - - The type of the WebSocket Message's frame - - - - - Timers - - - - - When was this message read from the sender - - - - - When did transmission of this message to the recipient begin - - - - - When did transmission of this message to the recipient end - - - - - Return the timers formatted to be placed in pseudo-headers used in saving the WebSocketMessage to a stream (SAZ) - - - - - - Utilities for WebSocket interop. - - - - - Servers must indicate that they speak the WebSocket protocol by echo'ing back a SHA1-hash of the - client's [Sec-WebSocket-Key] header appended with the magic value [258EAFA5-E914-47DA-95CA-C5AB0DC85B11]. - This challenge-response is provided in the server's [Sec-WebSocket-Accept] response header. - - The value of the Sec-WebSocket-Key header - A value suitable for the server's Sec-WebSocket-Accept header - - - - The MockTunnel represents a CONNECT tunnel which was reloaded from a SAZ file. - - - - - The CONFIG object is Fiddler's legacy settings object, introduced before the advent of the Preferences system. - - - - - Cached layout info for columns. - - - - - True if this is a "Viewer" instance of Fiddler that will not persist its settings - - - - - TODO: Why is this defaulted to FALSE? Has been since 2009, probably due to some bug. Should keep better records. (Sigh). - - - - - Boolean controls whether Fiddler should map inbound connections to their original process using IPHLPAPI - - - - - Boolean controls whether Fiddler should attempt to decrypt HTTPS Traffic - - - - - Boolean controls whether Fiddler will attempt to use the Server Name Indicator TLS extension to generate the SubjectCN for certificates - - - - - Should Audio/Video types automatically stream by default? - - - - - Returns 127.0.0.1:{ListenPort} or fiddler.network.proxy.RegistrationHostName:{ListenPort} - - - - - Use 128bit AES Encryption when password-protecting .SAZ files. Note that, while this - encryption is much stronger than the default encryption algorithm, it is significantly - slower to save and load these files, and the Windows Explorer ZIP utility cannot open them. - - - - - SSL/TLS Protocols we allow the client to choose from (when we call AuthenticateAsServer) - We allow all protocols by default (Ssl2,Ssl3,Tls1) and also 'Bitwise OR' in the constants for TLS1.1 and TLS1.2 in case we happen to be running on .NET4.5. - - - - - SSL/TLS Protocols we request the server use (when we call AuthenticateAsClient). By default, SSL3 and TLS1 are accepted; we exclude SSL2 so that TLS Extensions may be sent. - We do NOT enable TLS1.1 or TLS1.2 by default because many servers will fail if you offer them and unlike browsers, .NET has no fallback code. - - - - - Version information for the Fiddler/FiddlerCore assembly - - - - - Controls whether Fiddler will send traffic to the previously-set system proxy. - OBSOLETE. DO NOT USE. see instead. - - - - - The encoding with which HTTP Headers should be parsed. Defaults to UTF8, but may be overridden by specifying a REG_SZ containing the encoding name in the registry key \Fiddler2\HeaderEncoding - - - - - Controls whether Fiddler will reuse server connections for multiple sessions - - - - - Controls whether Fiddler will reuse client connections for multiple sessions - - - - - Controls whether Fiddler should register as the HTTPS proxy - - - - - Controls whether Fiddler should register as the FTP proxy - - - - - Controls whether Fiddler will try to write exceptions to the System Event log. Note: Usually fails due to ACLs on the Event Log. - - - - - Controls whether Fiddler will attempt to log on to the upstream proxy server to download the proxy configuration script - - - - - Controls whether Fiddler will attempt to connect to IPv6 addresses - - - - - Name of connection to which Fiddler should autoattach if MonitorAllConnections is not set - - - - - The username to send to the upstream gateway if the Version Checking webservice request requires authentication - - - - - The password to send to the upstream gateway if the Version Checking webservice request requires authentication - - - - - Set this flag if this is a "temporary" port (E.g. specified on command line) and it shouldn't be overridden in the registry - - - - - Controls whether Certificate-Generation output will be spewed to the Fiddler Log - - - - - Alternative hostname which Fiddler should recognize as an alias for the local machine. The - default value of ? will never be usable, as it's the QueryString delimiter - - - - - (Lowercase) Machine Name - - - - - (Lowercase) Machine Domain Name - - - - - List of hostnames for which HTTPS decryption (if enabled) should be skipped - - - - - True if Fiddler should be maximized on restart - - - - - Return a Special URL. - - String constant describing the URL to return. CASE-SENSITIVE! - Returns target URL - - - - Get a registry path for a named constant - - The path to retrieve [Root, UI, Dynamic, Prefs] - The registry path - - - - Return an app path (ending in Path.DirectorySeparatorChar) or a filename - - CASE-SENSITIVE - The specified filesystem path - - - - Ensure that the per-user folders used by Fiddler are present. - - - - - Control which processes have HTTPS traffic decryption enabled - - - - - Port to which Fiddler should forward inbound requests when configured to run as a Reverse Proxy - - - - - On attach, will configure WinINET to bypass Fiddler for these hosts. - - - - - Boolean indicating whether Fiddler will open the listening port exclusively - - - - - Controls whether server certificate errors are ignored when decrypting HTTPS traffic. - - - - - Controls whether notification dialogs and prompts should be shown. - - - - - The port upon which Fiddler is configured to listen. - - - - - Returns the path and filename of the editor used to edit the Rules script file. - - - - - Returns true if Fiddler should permit remote connections. Requires restart. - - - - - Traffic should be sent directly to the server - - - - - Traffic should be sent to a manually-specified proxy - - - - - Traffic should be sent to the System-configured proxy - - - - - Proxy should be automatically detected - - - - - A simple Process Type enumeration used by various filtering features - - - - - Include all Processes - - - - - Processes which appear to be Web Browsers - - - - - Processes which appear to NOT be Web Browsers - - - - - Include only traffic where Process ID isn't known (e.g. remote clients) - - - - - EventArgs for preference-change events. See http://msdn.microsoft.com/en-us/library/ms229011.aspx. - - - - - The name of the preference being added, changed, or removed - - - - - The string value of the preference, or null if the preference is being removed - - - - - Returns TRUE if ValueString=="true", case-insensitively - - - - - The IFiddlerPreferences Interface is exposed by the FiddlerApplication.Prefs object, and enables - callers to Add, Update, and Remove preferences, as well as observe changes to the preferences. - - - - - Store a boolean value for a preference - - The named preference - The boolean value to store - - - - Store an Int32 value for a preference - - The named preference - The int32 value to store - - - - Store a string value for a preference - - The named preference - The string value to store - - - - Get a preference's value as a boolean - - The Preference Name - The default value for missing or invalid preferences - A Boolean - - - - Gets a preference's value as a string - - The Preference Name - The default value for missing preferences - A string - - - - Gets a preference's value as a 32-bit integer - - The Preference Name - The default value for missing or invalid preferences - An integer - - - - Removes a named preference from storage - - The name of the preference to remove - - - - Add a Watcher that will be notified when a value has changed within the specified prefix. - - The prefix of preferences for which changes are interesting - The Event handler to notify - Returns the Watcher object added to the notification list - - - - Removes a previously-created preference Watcher from the notification queue - - The Watcher to remove - - - - Indexer. Returns the value of the preference as a string - - The Preference Name - The Preference value as a string, or null - - - - The PreferenceBag is used to maintain a threadsafe Key/Value list of preferences, persisted in the registry, and with appropriate eventing when a value changes. - - - - - Load the existing preferences from the Registry into the Preferences bag. - Note: Does not fire any events. - - - - - Serialize the existing preferences to the Registry. - - - - - Get a string array of the preference names - - string[] of preference names - - - - Gets a preference's value as a string - - The Preference Name - The default value if the preference is missing - A string - - - - Return a bool preference. - - The Preference name - The default value to return if the specified preference does not exist - The boolean value of the Preference, or the default value - - - - Return an Int32 Preference. - - The Preference name - The default value to return if the specified preference does not exist - The Int32 value of the Preference, or the default value - - - - Update or create a string preference. - - The name of the Preference - The value to assign to the Preference - - - - Update or create a Int32 Preference - - The name of the Preference - The value to assign to the Preference - - - - Update or create a Boolean preference. - - The name of the Preference - The value to assign to the Preference - - - - Delete a Preference from the collection. - - The name of the Preference to be removed. - - - - Remove all Watchers - - - - - Remove all watchers and write the registry. - - - - - Return a description of the contents of the preference bag - - Multi-line string - - - - Return a string-based serialization of the Preferences settings. - - TRUE for a multi-line format with all preferences - String - - - - Returns a CRLF-delimited string containing all Preferences whose Name case-insensitively contains the specified filter string. - - Partial string to match - A string - - - - Add a watcher for changes to the specified preference or preference branch. - - Preference branch to monitor, or String.Empty to watch all - The EventHandler accepting PrefChangeEventArgs to notify - Returns the PrefWatcher object which has been added, store to pass to RemoveWatcher later. - - - - Remove a previously attached Watcher - - The previously-specified Watcher - - - - This function executes on a single background thread and notifies any registered - Watchers of changes in preferences they care about. - - A string containing the name of the Branch that changed - - - - Spawn a background thread to notify any interested Watchers of changes to the Target preference branch. - - The arguments to pass to the interested Watchers - - - - Returns a string naming the current profile - - - - - Indexer into the Preference collection. - - The name of the Preference to update/create or return. - The string value of the preference, or null. - - - - A simple struct which contains a Branch identifier and EventHandler - - - - - The HostList allows fast determination of whether a given host is in the list. It supports leading wildcards (e.g. *.foo.com), and the special tokens <local> and <loopback>. - Note: List is *not* threadsafe; instead of updating it, construct a new one. - - - - - Generate an empty HostList - - - - - Create a hostlist and assign it an initial set of sites - - List of hostnames, including leading wildcards, and optional port specifier. Special tokens are *, <local>, <nonlocal>, and <loopback>. - - - - Clear the HostList - - - - - Clear the List and assign the new string as the contents of the list. - - List of hostnames, including leading wildcards, and optional port specifier. Special tokens are *, <local>, <nonlocal>, and <loopback>. - TRUE if the list was constructed without errors - - - - Clear the list and assign the new string as the contents of the list. - - List of hostnames, including leading wildcards, and optional port specifier. Special tokens are *, <local>, <nonlocal>, and <loopback>. - Outparam string containing list of parsing errors - TRUE if the list was constructed without errors - - - - Return the current list of rules as a string - - String containing current rules, using "; " as a delimiter between entries - - - - Determine if a given Host is in the list - - A Host string, potentially including a port - TRUE if the Host's hostname matches a rule in the list - - - - Determine if a given Hostname is in the list - - A hostname, NOT including a port - TRUE if the hostname matches a rule in the list - - - - Determine if a given Host:Port pair matches an entry in the list - - A hostname, NOT including the port - The port - TRUE if the hostname matches a rule in the list - - - - This private tuple allows us to associate a Hostname and a Port - - - - - Port specified in the rule - - - - - Hostname specified in the rule - - - - - Create a new HostPortTuple - - - - - The policy which describes how this pipe may be reused by a later request. Ordered by least restrictive to most. - - - - - The ServerPipe may be freely reused by any subsequent request - - - - - The ServerPipe may be reused only by a subsequent request from the same client process - - - - - The ServerPipe may be reused only by a subsequent request from the same client pipe - - - - - The ServerPipe may not be reused for a subsequent request - - - - - A ServerPipe wraps a socket connection to a server. - - - - - User-controlled list of Certificate Serial #s for which Fiddler should not raise a warning about certificate errors - - - - - DateTime of the completion of the TCP/IP Connection - - - - - TickCount when this Pipe was last placed in a PipePool - - - - - Returns TRUE if this ServerPipe is connected to a Gateway - - - - - Returns TRUE if this ServerPipe is connected to a SOCKS gateway - - - - - The Pooling key used for reusing a previously pooled ServerPipe. See sPoolKey property. - - - - - This field, if set, tracks the process ID to which this Pipe is permanently bound; set by MarkAsAuthenticated. - NOTE: This isn't actually checked by anyone; instead the PID is added to the POOL Key - - - - - Backing field for the isAuthenticated property - - - - - String containing representation of the server's certificate - - - - - Wraps a socket in a Pipe - - The Socket - Pipe's human-readable name - True if the Pipe is attached to a gateway - The Pooling key used for socket reuse - - - - Marks this Pipe as having been authenticated. Depending on the preference "fiddler.network.auth.reusemode" this may impact the reuse policy for this pipe - - The client's process ID, if known. - - - - Sets the receiveTimeout based on whether this is a freshly opened server socket or a reused one. - - - - - Returns a semicolon-delimited string describing this ServerPipe - - A semicolon-delimited string - - - - Returns the Server's certificate Subject CN - - The CN field from the Subject of the certificate used to secure this HTTPS connection, or null if the connection is unsecure - - - - Return a string describing the HTTPS connection security, if this socket is secured - - A string describing the HTTPS connection's security. - - - - Returns a string describing how this connection is secured. - - - - - - Get the Transport Context for the underlying HTTPS connection so that Channel-Binding Tokens work correctly - - - - - - Get the user's default client cert for authentication; caching if if possible and permitted. - - - - - - This method is called by the HTTPS Connection establishment to optionally attach a client certificate to the request. - Test Page: https://tower.dartmouth.edu/doip/OracleDatabases.jspx https://roaming.officeapps.live.com/rs/roamingsoapservice.svc - - - - - - - - - - - This function secures an existing connection and authenticates as client. This is primarily useful when - the socket is connected to a Gateway/Proxy and we had to send a CONNECT and get a HTTP/200 Connected back before - we actually secure the socket. - http://msdn.microsoft.com/en-us/library/system.net.security.sslstream.aspx - - The CN to use in the certificate - Path to client certificate file - Reference-passed integer which returns the time spent securing the connection - TRUE if the connection can be secued - - - - Return a Certificate Collection containing certificate from the specified file. - - Path to the certificate. Relative Paths will be absolutified automatically - The Certificate collection, or null - - - - Policy for reuse of this pipe - - - - - Returns TRUE if there is an underlying, mutually-authenticated HTTPS stream. - - - - - Returns TRUE if this PIPE is marked as having been authenticated using a Connection-Oriented Auth protocol: NTLM, Kerberos, or HTTPS Client Certificate - - - - - Indicates if this pipe is connected to an upstream Proxy. - - - - - Indicates if this pipe is connected to a SOCKS gateway - - - - - Gets and sets the pooling key for this server pipe. - - - DIRECT->{http|https}/{serverhostname}:{serverport} - GW:{gatewayaddr:port}->* - GW:{gatewayaddr:port}->{http|https}/{serverhostname}:{serverport} - SOCKS:{gatewayaddr:port}->{http|https}/{serverhostname}:{serverport} - - - - - Returns the IPEndPoint to which this socket is connected - - - - - CodeDescription attributes are used to enable the FiddlerScript Editor to describe available methods, properties, fields, and events. - - - - - CodeDescription attributes should be constructed by annotating a property, method, or field. - - The descriptive string which should be displayed for this this property, method, or field - - - - The descriptive string which should be displayed for this this property, method, or field - - - - - Flags that can be passed into the Startup method - - - - - No options. - - - - - Register with WinINET as the System Proxy - - - - - Decrypt HTTPS Traffic - - - - - Accept requests from remote computers or devices - - - - - Set this flag to forward requests to any upstream gateway - - - - - Set this flag to set all WinINET connections to use Fiddler, otherwise only the Local LAN is pointed to Fiddler - - - - - Start FiddlerCore with the default set of options (RegisterAsSystemProxy | DecryptSSL | AllowRemoteClients | ChainToUpstreamGateway | MonitorAllConnections | CaptureLocalhostTraffic) - - - - - A simple event handling delegate for functions which accept no parameters. - - - - - An event handling delegate which is called during report calculation with the set of sessions being evaluated. - - The sessions in this report. - - - - An event handling delegate which is called as a part of the HTTP pipeline at various stages. - - The Web Session in the pipeline. - - - - This class acts as the central point for script/extensions to interact with Fiddler components. - - - - - TRUE if Fiddler is currently shutting down. Suspend all work that won't have side-effects. - - - - - The default certificate used for client authentication - - - - - Fiddler's "Janitor" clears up unneeded resources (e.g. server sockets, DNS entries) - - - - - Underlying Preferences container whose IFiddlerPreferences interface is exposed by the Prefs property - - - - - Gets Fiddler* version info - - A string indicating the build/flavor of the Fiddler* assembly - - - - Returns Help/About information. - - Display string describing the current Fiddler instance. - - - - Fiddler's core proxy object. - - - - - Fiddler Import/Export Transcoders - - - - - List of "leaked" temporary files to be deleted as Fiddler exits. - - - - - Checks if FiddlerCore is running. - - TRUE if FiddlerCore is started/listening; FALSE otherwise. - - - - Checks if FiddlerCore is running and registered as the System Proxy. - - TRUE if FiddlerCore IsStarted AND registered as the system proxy; FALSE otherwise. - - - - Recommended way to Start FiddlerCore listening on the specified port - - The port - The FiddlerCoreStartupFlags option you want to set; FiddlerCoreStartupFlags.Default is recommended - - - - Start the FiddlerCore engine; this overload is NOT RECOMMENDED - - - - - - - - Start the FiddlerCore engine; this overload is NOT RECOMMENDED - - Port to Listen on. - Boolean indicating if FiddlerCore should register as the system proxy. - Boolean indicating if FiddlerCore should decrypt secure traffic. If true, requires MakeCert.exe in the Application folder. - Boolean indicating if FiddlerCore should accept connections from remote computers. Note: You must ensure Firewall is configured to allow such connections to your program. - - - - Start a new proxy endpoint instance, listening on the specified port - - The port to listen on - TRUE if remote clients should be permitted to connect to this endpoint - A Hostname (e.g. EXAMPLE.com) if this endpoint should be treated as a HTTPS Server - A Proxy object, or null if unsuccessful - - - - Start a new proxy endpoint instance, listening on the specified port - - The port to listen on - TRUE if remote clients should be permitted to connect to this endpoint - A certificate to return when clients connect, or null - A Proxy object, or null if unsuccessful - - - - Shuts down the FiddlerCore proxy and disposes it. Note: If there's any traffic in progress while you're calling this method, - your background threads are likely to blow up with ObjectDisposedExceptions or NullReferenceExceptions. In many cases, you're - better off simply calling oProxy.Detach() and letting the garbage collector clean up when your program exits. - - - - - Notify a listener that a block of a response was read. - - The session for which the response is being read - byte buffer (not completely full) - bytes set. - FALSE if AbortReading was set - - - - Notify a listener that a block of a request was read. - - The session for which the response is being read - byte buffer (not completely full) - bytes set. - FALSE if AbortReading was set - - - - Export Sessions in the specified format - - Shortname of desired format - Sessions to export - Options to pass to the ISessionExport interface - Your callback event handler, or NULL to allow Fiddler to handle - TRUE if successful, FALSE if desired format doesn't exist or other error occurs - - - - Calls a Fiddler Session Importer and returns the list of loaded Sessions. - - String naming the Import format, e.g. HTTPArchive - Should sessions be added to WebSessions list? (Not meaningful for FiddlerCore) - Dictionary of Options to pass to the Transcoder - Your callback event handler, or NULL to allow Fiddler to handle - Loaded Session[], or null on Failure - - - - Reset the SessionID counter to 0. This method can lead to confusing UI, so call sparingly. - - - - - Report an exception to the user. - - The Exception - The Title of the dialog - - - - Report an exception to the user. - - The Exception - The Title of the dialog - The intro text to show. If null or empty, the default "Fiddler has encountered an unexpected... " message is shown. - - - - Show the user a message when an HTTP Error was encountered - - Session with error - Set to true to prevent pooling/reuse of client connection - The SessionFlag which should be set to log this violation - Set to true to prevent pooling/reuse of server connection - Information about the problem - - - - We really don't want this method to get inlined, because that would cause the Xceed DLLs to get loaded in the Main() function instead - of when _SetXceedLicenseKeys is called; that, in turn, would delay the SplashScreen. - - - - - Used to track errors with addons. - - - - - - - Record that a temporary file was created and handed to an external tool. We'll do our best to delete this file on exit. - - The filename of the file to be deleted - - - - Clean up any Temporary files that were created - - - - - Fiddler's logging system - - - - - Fiddler's Preferences collection. Learn more at http://fiddler.wikidot.com/prefs - - - - - This event fires each time FiddlerCore reads data from network for the server's response. Note that this data - is not formatted in any way, and must be parsed by the recipient. - - - - - This event fires each time FiddlerCore reads data from network for the client's request. Note that this data - is not formatted in any way, and must be parsed by the recipient. - - - - - This event fires when a client request is received by Fiddler - - - - - This event fires when a server response is received by Fiddler - - - - - This event fires when Request Headers are available - - - - - This event fires when Response Headers are available - - - - - This event fires when an error response is generated by Fiddler - - - - - This event fires when a session has been completed - - - - - Sync this event to be notified when FiddlerCore has attached as the system proxy.")] - - - - - Sync this event to be notified when FiddlerCore has detached as the system proxy. - - - - - Fired each time Fiddler successfully establishes a TCP/IP connection - - - - - Fired each time Fiddler successfully accepts a TCP/IP connection - - - - - The Socket which was just Connected or Accepted - - - - - The Session which owns the this new connection - - - - - EventArgs class for the OnNotification handler - - - - - The string message of the notification - - - - - Enumeration of possible responses specified by the ValidateServerCertificateEventArgs as modified by FiddlerApplication's OnValidateServerCertificate event - - - - - The certificate will be considered valid if CertificatePolicyErrors == SslPolicyErrors.None, otherwise the certificate will be invalid unless the user manually allows the certificate. - - - - - The certificate will be confirmed with the user even if CertificatePolicyErrors == SslPolicyErrors.None. - Note: FiddlerCore does not support user-prompting and will always treat this status as ForceInvalid. - - - - - Force the certificate to be considered Valid, regardless of the value of CertificatePolicyErrors. - - - - - Force the certificate to be considered Invalid, regardless of the value of CertificatePolicyErrors. - - - - - These EventArgs are passed to the FiddlerApplication.OnValidateServerCertificate event handler when a server-provided HTTPS certificate is evaluated - - - - - EventArgs for the ValidateServerCertificateEvent that allows host to override default certificate handling policy - - The session - The CN expected for this session - The certificate provided by the server - The certificate chain of that certificate - Errors from default validation - - - - The port to which this request was targeted - - - - - The SubjectCN (e.g. Hostname) that should be expected on this HTTPS connection, based on the request's Host property. - - - - - The Session for which a HTTPS certificate was received. - - - - - The server's certificate chain. - - - - - The SslPolicyErrors found during default certificate evaluation. - - - - - Set this property to override the certificate validity - - - - - The X509Certificate provided by the server to vouch for its authenticity - - - - - These EventArgs are constructed when FiddlerApplication.OnClearCache is called. - - - - - Constructs the Event Args - - Should Cache Files be cleared? - Should Cookies be cleared? - - - - True if the user wants cache files to be cleared - - - - - True if the user wants cookies to be cleared - - - - - When the FiddlerApplication.OnReadResponseBuffer event fires, the raw bytes are available via this object. - - - - - Set to TRUE to request that upload or download process be aborted as soon as convenient - - - - - Session for which this responseRead is occurring - - - - - Byte buffer returned from read. Note: Always of fixed size, check iCountOfBytes to see which bytes were set - - - - - Count of latest read from Socket. If less than 1, response was ended. - - - - - Cache of Hostname->Address mappings - - - - - Number of milliseconds that a DNS cache entry may be reused without validation. - - - - - Maximum number of A/AAAA records to cache for DNS entries. - Beware: Changing this number changes how many IP-failovers Fiddler will perform if fiddler.network.dns.fallback is set, - and increasing the number will consume more memory in the cache. - - - - - Clear the DNS Cache. Called by the NetworkChange event handler in the oProxy object - - - - - Remove all expired DNSCache entries; called by the Janitor - - - - - Show the contents of the DNS Resolver cache - - - - - - Gets first available IP Address from DNS. Throws if address not found! - - String containing the host - True to use Fiddler's DNS cache. - IPAddress of target, if found. - - - - Gets IP Addresses for host from DNS. Throws if address not found! - - String containing the host - True to use Fiddler's DNS cache. - The Timers object to which the DNS lookup time should be stored, or null - List of IPAddresses of target, if any found. - - - - Trim an address list, removing the duplicate entries, any IPv6-entries if IPv6 is disabled, - and entries beyond the COUNT_MAX_A_RECORDS limit. - - The list to filter - A filtered address list - - - - A DNSCacheEntry holds a cached resolution from the DNS - - - - - TickCount of this record's creation - - - - - IPAddresses for this hostname - - - - - Construct a new cache entry - - The address information to add to the cache - - - - This class is used to find and create certificates for use in HTTPS interception. - The default implementation (DefaultCertProvider object) uses the Windows Certificate store, - but if a plugin ICertificateProvider is provided, it is used instead. - - - - - Enables specification of a delegate certificate provider that generates certificates for HTTPS interception. - - - - - Ensures that the Certificate Generator is ready. - - - - - Load a delegate Certificate Provider - - The provider, or null - - - - Removes Fiddler-generated certificates from the Windows certificate store - - - - - Removes Fiddler-generated certificates from the Windows certificate store - - Indicates whether Root certificates should also be cleaned up - - - - Returns the Root certificate that Fiddler uses to generate per-site certificates used for HTTPS interception. - - Returns the root certificate, if present, or null if the root certificate does not exist. - - - - Find a certificate from the certificate store. - - A string of the form: "www.hostname.com" - A certificate or /null/ - - - - Store an override Certificate in the Certificate Maker to return later. - - The hostname for which this certificate should be returned. - The X509Certificate2 with attached Private Key - TRUE if the Certificate Provider succeeded. FALSE if Provider doesn't support overrides. THROWS if Certificate lacked Private Key. - - - - Store an override Certificate in the Certificate Maker to return later. - - The hostname for which this certificate should be returned. - The filename of the PFX file containing the certificate and private key - The password for the PFX file - - - - Determine if the self-signed root certificate exists - - True if the Root certificate returned from GetRootCertificate is non-null, False otherwise. - - - - Is Fiddler's root certificate in the Root store? - - TRUE if so - - - - Is Fiddler's root certificate in the Machine Root store? - - TRUE if so - - - - Create a self-signed certificate to use for HTTPS interception - - TRUE if successful - - - - Finds the Fiddler root certificate and prompts the user to add it to the TRUSTED store - - True if successful - - - - Dispose of the Certificate Provider, if any. - - - - - This class allows fast-lookup of a ProcessName from a ProcessID. - - - - - Static constructor which registers for cleanup - - - - - Prune the cache of expiring PIDs - - - - - Map a Process ID (PID) to a Process Name - - The PID - A Process Name (e.g. IEXPLORE.EXE) or String.Empty - - - - Structure mapping a Process ID (PID) to a ProcessName - - - - - The TickCount when this entry was created - - - - - The ProcessName (e.g. IEXPLORE.EXE) - - - - - Create a PID->ProcessName mapping - - The ProcessName (e.g. IEXPLORE.EXE) - - - - The WinHTTPAutoProxy class is used to handle upstream gateways when the client was configured to use WPAD or an Proxy AutoConfig (PAC) script. - - - - - Indication as to whether AutoProxy information is valid. 0=Unknown/Enabled; 1=Valid/Enabled; -1=Invalid/Disabled - - - - - Returns a string containing the currently selected autoproxy options - - - - - - Get WPAD-discovered URL for display purposes (e.g. Help> About); note that we don't actually use this when determining the gateway, - instead relying on the WinHTTPGetProxyForUrl function to do this work for us. - - A WPAD url, if found, or String.Empty - - - - Return gateway endpoint for requested Url. TODO: Add caching layer! TODO: Support multiple results? - - The URL for which the gateway should be determined - The Endpoint of the Gateway, or null - TRUE if WinHttpGetProxyForUrl succeeded - - - - Close the WinHTTP Session handle - - - - - Note: Be sure to use the same hSession to prevent redownload of the proxy script - - - - - Set to true to send Negotiate creds when challenged to download the script - - - - - The DisplayName for this Connection - - - - - Is this Connectoid expected to be pointed at Fiddler? - - - - - The proxy settings collected from this connection before Fiddler was attached. - - - - - The WinINET Connectoids class contains the RAS/WinINET "connectoids" seen inside IE's Tools > Internet Options > Connections. - This class exposes methods to retrieve and update the proxy information for each connectoid in the list. - - - TODO: The methods of the class are not thread-safe and probably should be. - TODO: Need to refactor visibility here. Right now, _oConnectoids is (internal) instead of (private) because the - Options dialog iterates the list. And about:connectoids wants access too. Eventually ought to wrap as a ReadOnlyCollection getter - - - - - Dictionary of all Connectoids, indexed by the Connectoid's Name - - - - - Expensive Call. Enumerates all Connectoids using the RAS APIs, then determines the proxy information - for each connectoid. - - - - - Return the configured default connectoid's proxy information. - - Either proxy information from "DefaultLAN" or the user-specified connectoid - - - - Called when direct Registry groveling determines that the Default LAN connection's proxy was changed but InternetQueryOption - hasn't yet noticed. - - - - - Enumerates all of the connectoids and determines if the bIsHooked field is incorrect. If so, correct the value - and return TRUE to indicate that work was done. - - The Proxy:Port string to look for (e.g. Config.FiddlerListenHostPort) - TRUE if any of the connectoids' Hook state was inaccurate. - - - - Updates all (or CONFIG.sHookConnectionNamed-specified) connectoids to point at the argument-provided proxy information. - - The proxy info to set into the Connectoid - TRUE if updating at least one connectoid was successful - - - - Restore original proxy settings for any connectoid we changed. - - FALSE if any connectoids failed to unhook - - - - Map a local port number to the originating process ID - - The local port number - The originating process ID - - - - Calls the GetExtendedTcpTable function to map a port to a process ID. - This function is (over) optimized for performance. - - Client port - AF_INET or AF_INET6 - PID, if found, or 0 - - - - Given a local port number, uses GetExtendedTcpTable to find the originating process ID. - First checks the IPv4 connections, then looks at IPv6 connections. - - Client applications' port - ProcessID, or 0 if not found - - - - Enumeration of possible queries that can be issued using GetExtendedTcpTable - http://msdn2.microsoft.com/en-us/library/aa366386.aspx - - - - - The ServerChatter object is responsible for transmitting the Request to the destination server and retrieving its Response. - - - - - Size of buffer passed to pipe.Receive when reading from the server - - - - - The pipeServer represents Fiddler's connection to the server. - - - - - The session to which this ServerChatter belongs - - - - - The inbound headers on this response - - - - - Indicates whether this request was sent to the Gateway. - Session should have SessionFlags.SentToGateway set. - - - - - Buffer holds this response's data as it is read from the pipe. - - - - - The total count of bytes read for this response. Typically equals m_responseData.Length unless log-drop-response-body flag is set and - Streaming mode is enabled, in which case it will be larger since the m_responseData is cleared after every read. - - Note: This value is reset to 0 when clearing streamed data. It probably shouldn't be... - - - - - Pointer to first byte of Entity body (or to the start of the next set of headers in the case where there's a HTTP/1xx intermediate header) - Note: This gets reset to 0 if we're streaming and dropping the response body. - - - - - Optimization: tracks how far we've looked into the Request when determining iEntityBodyOffset - - - - - True if HTTP Response headers have been returned to the client. - - - - - Indicates how much of _responseData buffer has already been streamed to the client - - - - - Position in responseData of the start of the latest parsed chunk size information - - - - - Peek at the current response body and return it as an array - - The response body as an array, or byte[0] - - - - Create a new ServerChatter object. - - - - - - Create a ServerChatter object and initialize its headers from the specified string - - - - - - - Clear the current object and start over - - If TRUE, allocates a buffer (m_responseData) to read from a pipe. If FALSE, nulls m_responseData. - - - - Scans responseData stream for the \r\n\r\n (or variants) sequence - which indicates that the header block is complete. - - SIDE EFFECTS: - iBodySeekProgress is updated and maintained across calls to this function - iEntityBodyOffset is updated if the end of headers is found - - True, if responseData contains a full set of headers - - - - Parse the HTTP Response into Headers and Body. - - - - - - Attempts to get Headers from the stream. If a HTTP/100 Continue block is present, it is removed and ignored. - - - - - Deletes a single header block (at this point, always a HTTP/1xx header block) from the Response stream - and adjusts all header-reading state to start over from the top of the stream. If the fiddler.network.leakhttp1xx preference is TRUE, - then the 1xx message will have been leaked before calling this method. - - - - - Adjusts PipeServer's ReusePolicy if response headers require closure. Then calls _detachServerPipe() - - - - - Queues or End()s the ServerPipe, depending on its ReusePolicy - - - - - Determines whether a given PIPE is suitable for this session based on this session's target, PID, etc. - - The Client Process ID, if any - - - TRUE if the connection should be used, FALSE otherwise - - - - Connect to the Server or Gateway - Note that HTTPS Tunnels use a different code path. - - Note that this function is crazy complicated due to the intricacies of socket reuse. We want to avoid - redundant DNS lookups etc, and we need to be sensitive to the fact that the Gateway can change from request to request. - - TODO: Move this into the Pipe code and into the new PipePool. probably should be a static that returns a pipe? - - TRUE, if pipeServer was assigned a connection to the target server - - - - Performs a SOCKSv4A handshake on the socket - - - - - - - - - TODO: This entire function needs to go away. What we really want to do is generate a new Session that is a CONNECT tunnel and - pass it through the normal request processing pipeline. That allows us to automatically authenticate using the user's Windows - credentials. - - Sends a CONNECT to the specified socket acting as a gateway proxy and waits for a 200 OK response. This method is used when Fiddler needs - a HTTPS Connection through a proxy but the client didn't establish one (e.g. the Request Composer). Note: May THROW - - The Socket - The host to which the gateway should connect - The port to which the gateway should connect - The HTTPRequestHeaders from the original request - TRUE if a 200 OK was received, FALSE if something else was received, THROWS EXCEPTION on network errors - - - - Given an address list and port, attempts to create a socket to the first responding host in the list (retrying via DNS Failover if needed). - - IPEndpoints to attempt to reach - Session object to annotate with timings and errors - Connected Socket. Throws Exceptions on errors. - - - - Sends the HTTP Request to the upstream server or proxy. If the request is a CONNECT and there's no - gateway, this method ~only~ establishes the connection to the target, but does NOT send a request. - - True if connection and send succeeded, False otherwise - - - - Replaces body with an error message - - Error to send if client was remote - Error to send if cilent was local - - - - Loads a HTTP response from a file - - The name of the file from which a response should be loaded - False if the file wasn't found. Throws on other errors. - - - - Reads the response from the Server Pipe. - - - - - - Leak the current bytes of the response to client. We wait for the full header - set before starting to stream for a variety of impossible-to-change reasons. - - Returns TRUE if response bytes were leaked, false otherwise (e.g. write error) - - - - Get the MIME type (sans Character set or other attributes) from the HTTP Content-Type response header, or String.Empty if missing. - - - - - Peek at number of bytes downloaded thus far. - - - - - DEPRECATED: You should use the Timers object on the Session object instead. - The number of milliseconds between the start of sending the request to the server to the first byte of the server's response - - - - - DEPRECATED: You should use the Timers object on the Session object instead. - The number of milliseconds between the start of sending the request to the server to the last byte of the server's response. - - - - - Was this request forwarded to a gateway? - - - - - Was this request serviced from a reused server connection? - - - - - The HTTP headers of the server's response - - - - - Simple indexer into the Response Headers object - - - - - HTTP Response headers object - - - - - Base class for RequestHeaders and ResponseHeaders - - - - - Text encoding to be used when converting this header object to/from a byte array - - - - - HTTP version (e.g. HTTP/1.1) - - - - - Storage for individual HTTPHeaderItems in this header collection - - - - - Get byte count of this HTTP header instance. - - Byte Count - - - - Number of HTTP headers - - Number of HTTP headers - - - - Returns all instances of the named header - - Header name - List of instances of the named header - - - - Returns the count of instances of the named header - - Header name - Count of instances of the named header - - - - Enumerator for HTTPHeader storage collection - - Enumerator - - - - Adds a new header containing the specified name and value. - - Name of the header to add. - Value of the header. - Returns the newly-created HTTPHeaderItem. - - - - Determines if the Headers collection contains a header of the specified name, with any value. - - The name of the header to check. (case insensitive) - True, if the header exists. - - - - Returns the Value from a token in the header. Correctly handles double-quoted strings. Requires semicolon for delimiting tokens - - Name of the header - Name of the token - Value of the token if present; otherwise, null - - - - Determines if the Headers collection contains one or more headers of the specified name, and sHeaderValue is part of one of those Headers' value. - - The name of the header to check. (case insensitive) - The partial header value. (case insensitive) - True if the header is found and the value case-insensitively contains the parameter - - - - Determines if the Headers collection contains a header of the specified name, and sHeaderValue=Header's value. Similar to a case-insensitive version of: headers[sHeaderName]==sHeaderValue, although it checks all instances of the named header. - - The name of the header to check. (case insensitive) - The full header value. (case insensitive) - True if the header is found and the value case-insensitively matches the parameter - - - - Removes all headers from the header collection which have the specified name. - - The name of the header to remove. (case insensitive) - - - - Removes all headers from the header collection which have the specified names. - - Array of names of headers to remove. (case insensitive) - - - - Removes a HTTPHeader item from the collection - - The HTTPHeader item to be removed - - - - Removes all HTTPHeader items from the collection - - - - - Renames all headers in the header collection which have the specified name. - - The name of the header to rename. (case insensitive) - The new name for the header. - True if one or more replacements were made. - - - - Gets or sets the value of a header. In the case of Gets, the value of the first header of that name is returned. - If the header does not exist, returns null. - In the case of Sets, the value of the first header of that name is updated. - If the header does not exist, it is added. - - - - - Indexer property. Returns HTTPHeaderItem by index. Throws Exception if index out of bounds - - - - - Clone this HTTPResponseHeaders object and return the result cast to an Object - - The new response headers object, cast to an object - - - - Status code from HTTP Response. If setting, also set HTTPResponseStatus too! - - - - - Status text from HTTP Response (e.g. '200 OK'). - - - - - Update the response status code and text - - HTTP Status code (e.g. 401) - HTTP Status text (e.g. "Access Denied") - - - - Constructor for HTTP Response headers object - - - - - Constructor for HTTP Response headers object - - Text encoding to be used for this set of Headers when converting to a byte array - - - - Returns a byte array representing the HTTP headers. - - TRUE if the response status line should be included - TRUE if there should be a trailing \r\n byte sequence included - Byte[] containing the headers - - - - Returns a string containing http headers - - TRUE if the response status line should be included - TRUE if there should be a trailing CRLF included - String containing http headers - - - - Returns a string containing the http headers - - - Returns a string containing http headers with a status line but no trailing CRLF - - - - - Parses a string and assigns the headers parsed to this object - - The header string - TRUE if the operation succeeded, false otherwise - - - - HTTP Request headers object - - - - - Clones the HTTP request headers - - The new HTTPRequestHeaders object, cast to an object - - - - The HTTP Method (e.g. GET, POST, etc) - - - - - Constructor for HTTP Request headers object - - - - - Constructor for HTTP Request headers object - - Text encoding to be used for this set of Headers when converting to a byte array - - - - Parses a string and assigns the headers parsed to this object - - The header string - TRUE if the operation succeeded, false otherwise - - - - Returns a byte array representing the HTTP headers. - - TRUE if the HTTP REQUEST line (method+path+httpversion) should be included - TRUE if there should be a trailing \r\n byte sequence included - TRUE if the SCHEME and HOST should be included in the HTTP REQUEST LINE - The HTTP headers as a byte[] - - - - Returns a byte array representing the HTTP headers. - - TRUE if the HTTP REQUEST line (method+path+httpversion) should be included - TRUE if there should be a trailing \r\n byte sequence included - TRUE if the SCHEME and HOST should be included in the HTTP REQUEST LINE - Only meaningful if prependVerbLine is TRUE, the host to use in the HTTP REQUEST LINE - The HTTP headers as a byte[] - - - - Returns a string representing the HTTP headers. - - TRUE if the HTTP REQUEST line (method+path+httpversion) should be included - TRUE if there should be a trailing CRLF sequence included - TRUE if the SCHEME and HOST should be included in the HTTP REQUEST LINE (Automatically set to FALSE for CONNECT requests) - The HTTP headers as a string. - - - - Returns a string representing the HTTP headers, without the SCHEME+HOST in the HTTP REQUEST line - - TRUE if the HTTP REQUEST line (method+path+httpversion) should be included - TRUE if there should be a trailing CRLF sequence included - The header string - - - - Returns a string representing the HTTP headers, without the SCHEME+HOST in the HTTP request line, and no trailing CRLF - - The header string - - - - The (lowercased) URI scheme for this request (https, http, or ftp) - - - - - Username:Password info for FTP URLs. (either null or "user:pass@") - - - - - Get or set the request path as a string - - - - - Get or set the request path as a byte array - - - - - Represents a single HTTP header - - - - - Clones a single HTTP header and returns the clone cast to an object - - HTTPHeader Name: Value pair, cast to an object - - - - The name of the HTTP header - - - - - The value of the HTTP header - - - - - Creates a new HTTP Header item - - Header name - Header value - - - - Return a string of the form "NAME: VALUE" - - "NAME: VALUE" Header string - - - - A SessionTimers object holds timing information about a single Session. - - - - - The time at which the client's HTTP connection to Fiddler was established - - - - - The time at which the request's first Send() to Fiddler completes - - - - - The time at which the request headers were received - - - - - The time at which the request to Fiddler completes (aka RequestLastWrite) - - - - - The time at which the server connection has been established - - - - - The time at which Fiddler begins sending the HTTP request to the server (FiddlerRequestFirstSend) - - - - - The time at which Fiddler has completed sending the HTTP request to the server (FiddlerRequestLastSend). - BUG: Should be named "FiddlerEndRequest". - NOTE: Value here is often misleading due to buffering inside WinSock's send() call. - - - - - The time at which Fiddler receives the first byte of the server's response (ServerResponseFirstRead) - - - - - The time at which Fiddler received the server's headers - - - - - The time at which Fiddler has completed receipt of the server's response (ServerResponseLastRead) - - - - - The time at which Fiddler has begun sending the Response to the client (ClientResponseFirstSend) - - - - - The time at which Fiddler has completed sending the Response to the client (ClientResponseLastSend) - - - - - The number of milliseconds spent determining which gateway should be used to handle this request - (Should be mutually exclusive to DNSTime!=0) - - - - - The number of milliseconds spent waiting for DNS - - - - - The number of milliseconds spent waiting for the server TCP/IP connection establishment - - - - - The number of milliseconds elapsed while performing the HTTPS handshake with the server - - - - - Override of ToString shows timer info in a fancy format - - Timing information as a string - - - - Override of ToString shows timer info in a fancy format - - TRUE if the result can contain linebreaks; false if comma-delimited format preferred - Timing information as a string - - - - Enables High-Resolution timers, which are bad for battery-life but good for the accuracy of timestamps. - See http://technet.microsoft.com/en-us/sysinternals/bb897568 for the ClockRes utility that shows current clock resolution. - NB: Exiting Fiddler reverts this to the default value. - - - - - Watch a registry key for changes to its values. - - The Registry Hive in which the key lives - The key, e.g. \Software\Microsoft\Fiddler2\ - The Event Handler to invoke when a change occurs. - A new RegistryWatcher object. - - - - Start monitoring. - - - - - Stops the monitoring thread. - - - - - Fires when the specified registry key has changed. - - - - - The GenericTunnel class represents a "blind tunnel" to shuffle bytes between a client and the server. - - - - - Is streaming started in the downstream direction? - - - - - Number of bytes received from the client - - - - - Number of bytes received from the server - - - - - This "Factory" method creates a new HTTPS Tunnel and executes it on a background (non-pooled) thread. - - The Session containing the HTTP CONNECT request - - - - Creates a tunnel. External callers instead use the CreateTunnel static method. - - The session for which this tunnel was initially created. - Client Pipe - Server Pipe - - - - This function keeps the thread alive until it is signaled that the traffic is complete - - - - - Executes the HTTPS tunnel inside an All-it-can-eat exception handler. - Call from a background thread. - - - - - Executes the WebSocket tunnel on a background thread - - - - - Instructs the tunnel to take over the server pipe and begin streaming responses to the client - - - - - Close the HTTPS tunnel and signal the event to let the service thread die. - WARNING: This MUST not be allowed to throw any exceptions, because it will do so on threads that don't catch them, and this will kill the application. - - - - - Called when we have received data from the local client. - Incoming data will immediately be forwarded to the remote host. - - The result of the asynchronous operation. - - - Called when we have sent data to the local client.
When all the data has been sent, we will start receiving again from the remote host.
- The result of the asynchronous operation. -
- - Called when we have sent data to the remote host.
When all the data has been sent, we will start receiving again from the local client.
- The result of the asynchronous operation. -
- - Called when we have received data from the remote host.
Incoming data will immediately be forwarded to the local client.
- The result of the asynchronous operation. -
- - - Returns number of bytes sent from the Server to the Client - - - - - Returns number of bytes sent from the Client to the Server - - - - - Attribute used to specify the minimum version of Fiddler compatible with this extension assembly. - - - - - Attribute used to specify the minimum version of Fiddler compatible with this extension assembly. - - The minimal version string (e.g. "2.2.8.8") - - - - Getter for the required version string - - - - - Attribute allowing developer to specify that a class supports the specified Import/Export Format - - - - - Attribute allowing developer to specify that a class supports the specified Import/Export Format - - Shortname of the Format (e.g. WebText XML) - Description of the format - - - - Returns the Shortname for this format - - - - - Returns the Description of this format - - - - - This tuple maps a display string to a Import/Export type - - - - - Textual description of the Format - - - - - Class implementing the format - - - - - Create a new Transcoder Tuple - - Format description - Type implementing this format - - - - ISessionImport allows loading of Session data - - - - - Import Sessions from a data source - - Shortname of the format - Dictionary of options that the Importer class may use - Callback event on which progress is reported or the host may cancel - Array of Session objects imported from source - - - - ISessionExport allows saving of Session data - - - - - Export Sessions to a data store - - Shortname of the format - Array of Sessions being exported - Dictionary of options that the Exporter class may use - Callback event on which progress is reported or the host may cancel - TRUE if the export was successful - - - - EventArgs class for the ISessionImporter and ISessionExporter interface callbacks - - - - - Progress Callback - - Float indicating completion ratio, 0.0 to 1.0. Set to 0 if unknown. - Short string describing current operation, progress, etc - - - - Set to TRUE to request that Import/Export process be aborted as soon as convenient - - - - - The string message of the notification - - - - - The percentage completed - - - - - The core proxy object which accepts connections from clients and creates session objects from those connections - - - - - The RegistryWatcher is used to monitor changes in the WinINET Proxy registry keys - to detect premature detaches. - - - - - Hostname if this Proxy Endpoint is terminating HTTPS connections - - - - - Certificate if this Proxy Endpoint is terminating HTTPS connections - - - - - Per-connectoid information about each WinINET connectoid - - - - - The default WinINET proxy as determined upon Fiddler startup. - - - - - The WinHTTP AutoProxy object, created if we're using WPAD or a PAC Script as a gateway - - - - - Allow binding to a specific egress adapter: "fiddler.network.egress.ip" - - - - - Watcher for Notification of Preference changes - - - - - Server connections may be pooled for performance reasons. - - - - - The Socket Endpoint on which this proxy receives requests - - - - - Flag indicating that Fiddler is in the process of detaching... - - - - - List of hosts which should bypass the upstream gateway - - - - - Returns a string of information about this instance and the ServerPipe reuse pool - - A multiline string - - - - Change the outbound IP address used to send traffic - - - - - - Watch for relevent changes on the Preferences object - - - - - - - Called whenever Windows reports that the system's NetworkAddress has changed - - - - - - - Called by Windows whenever network availability goes up or down. - - - - - - - Directly inject a session into the Fiddler pipeline, returning a reference to it. - NOTE: This method will THROW any exceptions to its caller. - - String representing the HTTP request. If headers only, be sure to end with CRLFCRLF - StringDictionary of Session Flags (or null) - The new session - - - - [DEPRECATED] Directly inject a session into the Fiddler pipeline. - NOTE: This method will THROW any exceptions to its caller. - - - HTTP Request Headers - HTTP Request body (or null) - StringDictionary of Session Flags (or null) - - - - [DEPRECATED] Directly inject a session into the Fiddler pipeline. - NOTE: This method will THROW any exceptions to its caller. - - - String representing the HTTP request. If headers only, be sure to end with CRLFCRLF - StringDictionary of Session Flags (or null) - - - - [DEPRECATED]: This version does no validation of the request data, and doesn't set SessionFlags.RequestGeneratedByFiddler - Send a custom HTTP request to Fiddler's listening endpoint (127.0.0.1:8888 by default). - NOTE: This method will THROW any exceptions to its caller and blocks the current thread. - - - String representing the HTTP request. If headers only, be sure to end with CRLFCRLF - - - - This function, when given a scheme host[:port], returns the gateway information of the proxy to forward requests to. - - URIScheme: use http, https, or ftp - Host for which to return gateway information - IPEndPoint of gateway to use, or NULL - - - - Accept the connection and pass it off to a handler thread - - - - - - Register as the system proxy for WinINET and set the Dynamic registry key for other FiddlerHook - - True if the proxy registration was successful - - - - If we get a notice that the proxy registry key has changed, wait 50ms and then check to see - if the key is pointed at us. If not, raise the alarm. - - - - - - - If we are suppsoed to be "attached", we re-verify the registry keys, and if they are corrupt, notify - our host of the discrepency. - - - - - This method sets up the connectoid list and updates gateway information. Called by the Attach() method, or - called on startup if Fiddler isn't configured to attach automatically. - - - - - Given an address list, walks the list until it's able to successfully make a connection. - Used for finding an available Gateway when we have a list to choose from - - A string, e.g. PROXY1:80 - The IP:Port of the first alive endpoint for the specified host/port - - - - Set internal fields pointing at upstream proxies. - - - - - Sets a registry key which indicates that Fiddler is in "Connected" mode. Used by the FiddlerHook Add-on - - TRUE if fiddler is Connected - - - - Detach the proxy by setting the registry keys and sending a Windows Message - - True if the proxy settings were successfully detached - - - - Detach the proxy by setting the registry keys and sending a Windows Message - - True if the proxy settings were successfully detached - - - - Write a .PAC file that user can point FireFox or some other non-WinINET browser to. This is a crutch - that simplifies using Fiddler with non-WinINET clients. - - - - - - Stop the proxy by closing the socket. - - - - - Start the proxy by binding to the local port and accepting connections - - Port to listen on - TRUE to allow remote connections - - - - - Dispose Fiddler's listening socket - - - - - Clear the pool of Server Pipes. May be called by extensions. - - - - - Assign HTTPS Certificate for this endpoint - - Certificate to return to clients who connect - - - - Sets the upstream gateway to match the specified ProxyInfo - - - - - - Generate or find a certificate for this endpoint - - Subject FQDN - TRUE if the certificate could be found/generated, false otherwise - - - - Return a simple string indicating what upstream proxy/gateway is in use. - - - - - - Show a message box indicating what upstream gateway/proxy is in use - - - - - The port on which this instance is listening - - - - - Returns true if Fiddler believes it is currently registered as the Local System proxy - - - - - This event handler fires when Fiddler detects that it is (unexpectedly) no longer the system's registered proxy - - - - - Somewhat similar to the Framework's "BackgroundWorker" class, the periodic worker performs a similar function on a periodic schedule. - - The PeriodicWorker class is used by Fiddler to perform "cleanup" style tasks on a timer. Put work in the queue, - and it will see that it's done at least as often as the schedule specified until Fiddler begins to close at which - point all work stops. - - Note that the callback occurs on a background thread. - - The underlying timer's interval is 1 second. - - - - I think a significant part of the reason that this class exists is that I thought the System.Threading.Timer consumed one thread for each - timer. In reality, per "CLR via C# 4e" all of the instances share one underlying thread and thus my concern was misplaced. Ah well. - - - - - Assigns a "job" to the Periodic worker, on the schedule specified by iMS. - - The function to run on the timer specified. - Warning: the function is NOT called on the UI thread, so use .Invoke() if needed. - The # of milliseconds to wait between runs - A taskItem which can be used to revokeWork later - - - - Revokes a previously-assigned task from this worker. - - - - - - The ScheduledTasks class allows addition of jobs by name. It ensures that ONE instance of the named - job will occur at *some* point in the future, between 0 and a specified max delay. If you queue multiple - instances of the same-named Task, it's only done once. - - - - - Under the lock, we enumerate the schedule to find work to do and remove that work from the schedule. - After we release the lock, we then do the queued work. - - - - - - A jobItem represents a Function+Time tuple. The function will run after the given time. - - - - - TickCount at which this job must run. - - - - - Method to invoke to complete the job - - -
-
+ + + + FiddlerCore4 + + + + + The frmPrompt class is used to get information from the client. It's primarily used by calling one of the static functions. + + + + + Required designer variable. + + + + + Get a string value from the user. + + The title of the dialog + The prompt text + The default string value + The value entered by the user (or default, if unmodified) + + + + GetUserString prompts the user for a string. + + Title of the dialog + The prompt text in the dialog + The default response + If true, will return null if user hits cancel. Else returns sDefault. + The user's result, or null if user cancelled and bReturnNullIfCancelled set. + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Type of Upstream Gateway + + + + + Traffic should be sent directly to the server + + + + + Traffic should be sent to a manually-specified proxy + + + + + Traffic should be sent to the System-configured proxy + + + + + Proxy should be automatically detected + + + + + A simple Process Type enumeration used by various filtering features + + + + + Include all Processes + + + + + Processes which appear to be Web Browsers + + + + + Processes which appear to NOT be Web Browsers + + + + + Include only traffic where Process ID isn't known (e.g. remote clients) + + + + + When may requests be resent on a new connection? + + + + + The request may always be retried. + + + + + The request may never be retried + + + + + The request may only be resent if the HTTP Method is idempotent. + This SHOULD be the default per HTTP spec, but this appears to break tons of servers. + + + + + Dictionary of all Connectoids, indexed by the Connectoid's Name + + + + + Return the configured default connectoid's proxy information. + + Either proxy information from "DefaultLAN" or the user-specified connectoid + + + + Called when direct Registry groveling determines that the Default LAN connection's proxy was changed but InternetQueryOption + hasn't yet noticed. + + + + + Enumerates all of the connectoids and determines if the bIsHooked field is incorrect. If so, correct the value + and return TRUE to indicate that work was done. + + The Proxy:Port string to look for (e.g. Config.FiddlerListenHostPort) + TRUE if any of the connectoids' Hook state was inaccurate. + + + + Updates all (or CONFIG.sHookConnectionNamed-specified) connectoids to point at the argument-provided proxy information. + + The proxy info to set into the Connectoid + TRUE if updating at least one connectoid was successful + + + + Restore original proxy settings for any connectoid we changed. + + FALSE if any connectoids failed to unhook + + + + Attempt WPAD autoproxy detection + + + + + Hostnames of sites to bypass proxy. <local> is common. + + + + + Allow direct connection to host + + + + + Use user-supplied URL to get FindProxyForURL script + + + + + WPAD script url that may be used if _bUseScript true + + + + + String representing the endpoint of the proxy for HTTP-traffic, if configured + + + + + String representing the endpoint of the proxy for HTTPS-traffic, if configured + + + + + String representing the endpoint of the proxy for FTP-traffic, if configured + + + + + String representing the endpoint of the proxy for SOCKS-traffic, if configured + + + + + TRUE if all pairs proxies for protocols are valid and they are enabled or proxies for protocols are empty and they are disabled + + + + + TRUE if a direct HTTP connection may be made if AutoProxy/PAC is unreachable or corrupt + + + + + Returns a string pointing to the ProxyAutoConfig script, or null if there is no such URL or it is not enabled + + + + + Bool indicating whether this connection is set to autodetect the proxy + + + + + Semi-colon delimited list of hostnames that should bypass the fixed proxy + + + + + Calculate a string suitable for passing into WinINET APIs. + + Returns a string containing proxy information, or NULL. NB: I've seen WinINET blow up when passed String.Empty rather than null. + + + + + Given a proxy string, we crack out the proxy gateways for each protocol + + e.g. HTTP=itgproxy:80;FTP=ftpprox:21; + false on error + + + + Get a string describing the proxy settings + + Returns a multi-line string representing the proxy settings + + + + Enumeration of possible queries that can be issued using GetExtendedTcpTable + http://msdn2.microsoft.com/en-us/library/aa366386.aspx + + + + + Processes listening on Ports + + + + + Processes with active TCP/IP connections + + + + + Map a local port number to the originating process ID + + The local port number + The originating process ID + + + + Calls the GetExtendedTcpTable function to map a port to a process ID. + This function is (over) optimized for performance. + + Client port + AF_INET or AF_INET6 + PID, if found, or 0 + + + + Given a local port number, uses GetExtendedTcpTable to find the originating process ID. + First checks the IPv4 connections, then looks at IPv6 connections. + + Client applications' port + ProcessID, or 0 if not found + + + + Returns a string containing the process listening on a given port + + + + + This class is used to find and create certificates for use in HTTPS interception. + The default implementation (DefaultCertProvider object) uses the Windows Certificate store, + but if a plugin ICertificateProvider is provided, it is used instead. + + + + + Enables specification of a delegate certificate provider that generates certificates for HTTPS interception. + + + + + Lock on this object when TestExistenceOf/Create oCertProvider + + + + + Ensures that the Certificate Generator is ready; thread-safe + + + + + Load a delegate Certificate Provider + + The provider, or null + + + + Removes Fiddler-generated certificates from the Windows certificate store + + + + + Removes Fiddler-generated certificates from the Windows certificate store + + Indicates whether Root certificates should also be cleaned up + + + + Returns the Root certificate that Fiddler uses to generate per-site certificates used for HTTPS interception. + + Returns the root certificate, if present, or null if the root certificate does not exist. + + + + Return the raw byte[]s of the root certificate, or null + + + + + + Request a certificate with the specified SubjectCN + + A string of the form: "www.hostname.com" + A certificate or /null/ if the certificate could not be found or created + + + + Pre-cache a Certificate in the Certificate Maker that should be returned in subsequent calls to FindCert + + The hostname for which this certificate should be returned. + The X509Certificate2 with attached Private Key + TRUE if the Certificate Provider succeeded in pre-caching the certificate. FALSE if Provider doesn't support pre-caching. THROWS if supplied Certificate lacks Private Key. + + + + Pre-cache a Certificate in the Certificate Maker that should be returned in subsequent calls to FindCert + + The hostname for which this certificate should be returned. + The filename of the PFX file containing the certificate and private key + The password for the PFX file + Throws if the Certificate Provider failed to pre-cache the certificate + + + + Determine if the self-signed root certificate exists + + True if the Root certificate returned from GetRootCertificate is non-null, False otherwise. + + + + Is Fiddler's root certificate in the Root store? + + TRUE if so + + + + Is Fiddler's root certificate in the Machine Root store? + + TRUE if so + + + + Create a self-signed root certificate to use as the trust anchor for HTTPS interception certificate chains + + TRUE if successful + + + + Finds the Fiddler root certificate and prompts the user to add it to the TRUSTED store. + Note: The system certificate store is used by most applications (IE, Chrome, etc) but not + all; for instance, Firefox uses its own certificate store. + + True if successful + + + + Dispose of the Certificate Provider, if any. + + + + + The ClientChatter object, exposed as the oRequest object on the Session object, represents a single web request. + + + + + Size of buffer passed to pipe.Receive when reading from the client. + + + + + Discardable State of Read Operation + + While it is reading a request from the client, the ClientChatter class uses a RequestReaderState object to track + the state of the read. This state is discarded when the request has been completely read. + + + + + The Host pulled from the URI + + + + + Buffer holds this request's data as it is read from the pipe. + + + + + Offset to first byte of body in m_requestData + + + + + Optimization: Offset of most recent transfer-encoded chunk + + + + + Optimization: tracks how far we've previously looked when determining iEntityBodyOffset + + + + + Did the request specify Transfer-Encoding: chunked + + + + + The integer value of the Content-Length header, if any + + + + + Count of body bytes read from the client. If no body bytes have yet been read, returns count of header bytes. + + + + + + Scans requestData stream for the \r\n\r\n (or variants) sequence + which indicates that the header block is complete. + + SIDE EFFECTS: + iBodySeekProgress is updated and maintained across calls to this function + iEntityBodyOffset is updated if the end of headers is found + + True, if requestData contains a full set of headers + + + + Tracks the progress of reading the request from the client. Because of the multi-threaded nature + of some users of this field, most will make a local copy before accessing its members. + + + + + The ClientPipe object which is connected to the client, or null. + + + + + Parsed Headers + + + + + The Session object which owns this ClientChatter + + + + + Count of body bytes read from the client. If no body bytes have yet been read, returns count of header bytes. + + + + + HTTP Headers sent in the client request, or null. + + + + + Was this request received from a reused client connection? Looks at SessionFlags.ClientPipeReused flag on owning Session. + + + + + Note: This returns the request's HOST header, which may include a trailing port #. + If the Host is an IPv6 literal, it will be enclosed in brackets '[' and ']' + + + + + Controls whether the request body is streamed to the server as it is read from the client. + + + + + Create a ClientChatter object initialized with a set of HTTP headers + Called primarily when loading session data from a file. + + The Session object which will own this request + The string containing the request data + + + + Loads a HTTP request body from a file rather than a memory stream. + + The file to load + TRUE if the file existed. THROWS on most errors other than File-Not-Found + + + + Based on this session's data, determine the expected Transfer-Size of the request body. See RFC2616 Section 4.4 Message Length. + Note, there's currently no support for "multipart/byteranges" requests anywhere in Fiddler. + + Expected Transfer-Size of the body, in bytes. + + + + Free Request data. Called by TakeEntity or by ReadRequest method on request failure + + + + + Extract byte array representing the entity, put any excess bytes back in the pipe, free the RequestReadState, and + return the entity. + + Byte array containing the entity body + + + + Simple indexer into the Request Headers object + + + + + Send a HTTP/XXX Error Message to the Client, calling FiddlerApplication.BeforeReturningError and DoReturningError in FiddlerScript. + Note: This method does not poison the Server pipe, so if poisoning is desired, it's the caller's responsibility to do that. + Note: Because this method uses Connection: close on the returned response, it has the effect of poisoning the client pipe + + Response code + Response status text + Body of the HTTP Response + + + + Return a HTTP response and signal that the client should close the connection + + A Delegate that fires to give one final chance to modify the Session before + calling the DoBeforeReturningError and returning the response + + + + Parse the headers from the requestData buffer. + Precondition: Call AFTER having set the correct iEntityBodyOffset. + + Note: This code used to be a lot simpler before, when it used strings instead of byte[]s. Sadly, + we've gotta use byte[]s to ensure nothing in the URI gets lost. + + TRUE if successful. + + + + This function decides if the request string represents a complete HTTP request + + + + + + Read a (usually complete) request from pipeClient. If RequestStreamed flag is set, only the headers have been read. + + TRUE, if a request could be read. FALSE, otherwise. + + + + Verifies that the Hostname specified in the request line is compatible with the HOST header + + + + + The CONFIG object is Fiddler's legacy settings object, introduced before the advent of the Preferences system. + + + + + Underlying Preferences container whose IFiddlerPreferences interface is + exposed by the FiddlerApplication.Prefs property. + + + + + Generally, callers should use FiddlerApplication.Prefs, but RawPrefs allows use of the PreferenceBag members that + are not a part of IFiddlerPreferences + + + + + Response files larger than this (2^28 = ~262mb) will NOT be loaded into memory when using LoadResponseFromFile + + + + + Backing field for the QuietMode property. Controls whether notifications are displayed in a MessageBox. + NB: KEEP THIS FIELD DECLARED AT THE TOP OF THE CLASS. We initialize some fields using methods that can check this field. + + + + + Cached layout info for columns. + + + + + Control which processes have HTTPS traffic decryption enabled + + + + + True if this is a "Viewer" instance of Fiddler that will not persist its settings. Exposed as FiddlerApplication.IsViewerMode + + + TODO: ARCH: This setting shouldn't exist in FiddlerCore, but it's used in a dozen places + + + + TODO: Why is this defaulted to FALSE? Has been since 2009, probably due to some bug. Should keep better records. (Sigh). + + + + + Boolean controls whether Fiddler should map inbound connections to their original process using IPHLPAPI + + + + + Boolean controls whether Fiddler should attempt to decrypt HTTPS Traffic + + + + + Boolean controls whether Fiddler will attempt to use the Server Name Indicator TLS extension to generate the SubjectCN for certificates + + + + + Should Audio/Video types automatically stream by default? + + + + + Returns 127.0.0.1:{ListenPort} or fiddler.network.proxy.RegistrationHostName:{ListenPort} + + + + + Use 128bit AES Encryption when password-protecting .SAZ files. Note that, while this + encryption is much stronger than the default encryption algorithm, it is significantly + slower to save and load these files, and the Windows Explorer ZIP utility cannot open them. + + + + + SSL/TLS Protocols we allow the client to choose from (when we call AuthenticateAsServer) + We allow all protocols by default (Ssl2,Ssl3,Tls1) and also 'Bitwise OR' in the constants for TLS1.1 and TLS1.2 in case we happen to be running on .NET4.5. + + + + + SSL/TLS Protocols we request the server use (when we call AuthenticateAsClient). By default, SSL3 and TLS1 are accepted; we exclude SSL2 so that TLS Extensions may be sent. + We do NOT enable TLS1.1 or TLS1.2 by default because many servers will fail if you offer them and unlike browsers, .NET has no fallback code. + + + + + When True, Fiddler will offer the latest TLS protocol version offered by the client in its request + + + + + Version information for the Fiddler/FiddlerCore assembly + + + + + Will send traffic to an upstream proxy? + OBSOLETE -- DO NOT USE. see instead. + + + + + What mechanism, if any, should Fiddler use to find the upstream proxy/gateway? + + + + + The encoding with which HTTP Headers should be parsed. Defaults to UTF8, but may be overridden by specifying a REG_SZ containing the encoding name in the registry key \Fiddler2\HeaderEncoding + + + + + Controls whether Fiddler will reuse server connections for multiple sessions + + + + + Controls whether Fiddler will reuse client connections for multiple sessions + + + + + Controls whether Fiddler should register as the HTTPS proxy + + + + + Controls whether Fiddler should register as the FTP proxy + + + + + Controls whether Fiddler will try to write exceptions to the System Event log. Note: Usually fails due to ACLs on the Event Log. + + + + + Controls whether Fiddler will attempt to log on to the upstream proxy server to download the proxy configuration script + + + + + Controls whether Fiddler will attempt to connect to IPv6 addresses + + + + + Name of connection to which Fiddler should autoattach if MonitorAllConnections is not set + + + + + The username to send to the upstream gateway if the Version Checking webservice request requires authentication + + + + + The password to send to the upstream gateway if the Version Checking webservice request requires authentication + + + + + Set this flag if m_ListenPort is a "temporary" port (E.g. specified on command-line) and it shouldn't be overridden in the registry + + + + + Controls whether Certificate-Generation output will be spewed to the Fiddler Log + + + + + Port to which Fiddler should forward inbound requests when configured to run as a Reverse Proxy + + + + + Alternative hostname which Fiddler should recognize as an alias for the local machine. The + default value of ? will never be usable, as it's the QueryString delimiter + + + + + (Lowercase) Machine Name + + + + + (Lowercase) Machine Domain Name + + + + + On attach, will configure WinINET to bypass Fiddler for these hosts. + + + + + List of hostnames for which HTTPS decryption (if enabled) should be skipped + + + + + True if Fiddler should be maximized on restart + + + + + Boolean indicating whether Fiddler will open the listening port exclusively + + + + + Controls whether server certificate errors are ignored when decrypting HTTPS traffic. + + + + + Controls whether notification dialogs and prompts should be shown. + + + + + The port upon which Fiddler is configured to listen. + + + + + Return a Special URL. + + String constant describing the URL to return. CASE-SENSITIVE! + Returns target URL + + + + Get a registry path for a named constant + + The path to retrieve [Root, UI, Dynamic, Prefs] + The registry path + + + + Return an app path (ending in Path.DirectorySeparatorChar) or a filename + + CASE-SENSITIVE + The specified filesystem path + + + + Returns the path and filename of the editor used to edit the Rules script file. + + + + + Returns true if Fiddler should permit remote connections. Requires restart. + + + + + Ensure that the per-user folders used by Fiddler are present. + + + + + Loads Preferences from the Registry and fills appropriate fields + + + + + Interface for the WebSocket and CONNECT Tunnel classes + + + + + The CONNECTTunnel class represents a "blind tunnel" through which a CONNECT request is serviced to shuffle bytes between a client and the server. + + + See pg 206 in HTTP: The Complete Reference for details on how Tunnels work. + When HTTPS Decryption is disabled, Fiddler accepts a CONNECT request from the client. Then, we open a connection to the remote server. + We shuttle bytes back and forth between the client and the server in this tunnel, keeping Fiddler itself out of the loop + (no tampering, etc). + + + + + Number of bytes received from the client + + + + + Number of bytes received from the server + + + + + TRUE if this is a Blind tunnel, FALSE if decrypting + + + + + Returns number of bytes sent from the Server to the Client + + + + + Returns number of bytes sent from the Client to the Server + + + + + This "Factory" method creates a new HTTPS Tunnel and executes it on a background (non-pooled) thread. + + The Session containing the HTTP CONNECT request + + + + Creates a HTTPS tunnel. External callers instead use the CreateTunnel static method. + + The session for which this tunnel was initially created. + Client Pipe + Server Pipe + + + + This function keeps the thread alive until it is signaled that the traffic is complete + + + + + Executes the HTTPS tunnel inside an All-it-can-eat exception handler. + Call from a background thread. + + + + + Close the HTTPS tunnel and signal the event to let the service thread die. + WARNING: This MUST not be allowed to throw any exceptions, because it will do so on threads that don't catch them, and this will kill the application. + + + + + Called when we have received data from the local client. + Incoming data will immediately be forwarded to the remote host. + + The result of the asynchronous operation. + + + Called when we have sent data to the local client.
When all the data has been sent, we will start receiving again from the remote host.
+ The result of the asynchronous operation. +
+ + Called when we have sent data to the remote host.
When all the data has been sent, we will start receiving again from the local client.
+ The result of the asynchronous operation. +
+ + Called when we have received data from the remote host.
Incoming data will immediately be forwarded to the local client.
+ The result of the asynchronous operation. +
+ + + CertEnroll is an ActiveX Control available on Windows Vista and later that allows programmatic generation of X509 certificates. + We can use it as an alternative to MakeCert.exe; it offers better behavior (e.g. setting AKID) and doesn't require redistributing makecert.exe + + + + + Factory method. Returns null if this engine cannot be created + + + + + Invoke CertEnroll + + Target CN + TRUE if the certificate is a root cert + TRUE if we should validate that we're running in a MTA thread and switch if not + A Cert + + + + Factory method. Returns null if this engine cannot be created + + + + + File path pointing to the location of MakeCert.exe + + + + + Hash to use when signing certificates. + Note: sha1 is required on XP (even w/SP3, using sha256 throws 0x80090008). + + + + + Constructor: Simply cache the path to MakeCert + + + + + The underlying Certificate Generator (MakeCert or CertEnroll) + + + + + Cache of previously-generated EE certificates. Thread safety managed by _oRWLock + + + + + Cache of previously-generated Root certificate + + + + + Should Fiddler automatically generate wildcard certificates? + + + + + Reader/Writer lock gates access to the certificate cache and generation functions. + + We must set the SupportsRecursion flag because there are cases where the thread holds the lock in Write mode and then enters Read mode in a nested call. + + + + Find certificates that have the specified full subject. + + The store to search + FindBySubject{Distinguished}Name requires a complete match of the SUBJECT, including CN, O, and OU + Matching certificates + + + + Find all certificates (in the CurrentUser Personal store) that have the specified issuer. + + The store to search + FindByIssuer{Distinguished}Name requires a complete match of the SUBJECT, including CN, O, and OU + Matching certificates + + + + Interface method: Clear the in-memory caches and Windows certificate stores + + TRUE to clear the Root Certificate from the cache and Windows stores + TRUE if successful + + + + Interface method: Clear the in-memory caches and Windows certificate stores + + + + + + Use MakeCert to generate a unique self-signed certificate + + TRUE if the Root certificate was generated successfully + + + + Get the root certificate from cache or storage, only IF IT ALREADY EXISTS. + + + + + + Returns an Interception certificate for the specified hostname + + Hostname for the target certificate + This method uses a Reader lock when checking the cache and a Writer lock when updating the cache. + An Interception Certificate, or NULL + + + + Find a certificate from the certificate store, creating a new certificate if it was not found. + + A SubjectCN hostname, of the form www.example.com + TRUE if the cert wasn't found in the Windows Certificate store and this function attempted to create it. + No locks are acquired by this method itself. + A certificate or /null/ + + + + Find (but do not create!) a certificate from the CurrentUser certificate store, if present. + + No locks are acquired by this method itself. + A certificate or /null/ + + + + Updates the Server Certificate cache under the Writer lock + + The target hostname + The certificate to cache + + + + + Creates a certificate for ServerAuth. If isRoot is set, designates that this is a self-signed root. + + Uses a reader lock when checking for the Root certificate. Uses a Writer lock when creating a certificate. + A string of the form: "www.hostname.com" + A boolean indicating if this is a request to create the root certificate + Newly-created certificate, or Null + + + + Cache of Hostname->Address mappings + + + + + Number of milliseconds that a DNS cache entry may be reused without validation. + + + + + Maximum number of A/AAAA records to cache for DNS entries. + Beware: Changing this number changes how many IP-failovers Fiddler will perform if fiddler.network.dns.fallback is set, + and increasing the number will consume more memory in the cache. + + + + + Clear the DNS Cache. Called by the NetworkChange event handler in the oProxy object + + + + + Remove all expired DNSCache entries; called by the Janitor + + + + + Show the contents of the DNS Resolver cache + + + + + + Gets first available IP Address from DNS. Throws if address not found! + + String containing the host + True to use Fiddler's DNS cache. + IPAddress of target, if found. + + + + Gets IP Addresses for host from DNS. Throws if address not found! + + String containing the host + True to use Fiddler's DNS cache. + The Timers object to which the DNS lookup time should be stored, or null + List of IPAddresses of target, if any found. + + + + Trim an address list, removing the duplicate entries, any IPv6-entries if IPv6 is disabled, + and entries beyond the COUNT_MAX_A_RECORDS limit. + + The list to filter + A filtered address list + + + + A DNSCacheEntry holds a cached resolution from the DNS + + + + + TickCount of this record's creation + + + + + IPAddresses for this hostname + + + + + Construct a new cache entry + + The address information to add to the cache + + + + Attribute used to specify the minimum version of Fiddler compatible with this extension assembly. + + + + + Attribute used to specify the minimum version of Fiddler compatible with this extension assembly. + + The minimal version string (e.g. "2.2.8.8") + + + + Getter for the required version string + + + + + Attribute allowing developer to specify that a class supports the specified Import/Export Format + + + + + Attribute allowing developer to specify that a class supports the specified Import/Export Format + + Shortname of the Format (e.g. WebText XML) + Description of the format + + + + Attribute allowing developer to specify that a class supports the specified Import/Export Format + + Shortname of the Format (e.g. WebText XML) + Description of the format + Semi-colon delimited file extensions (e.g. ".har;.harx") + + + + Returns the Shortname for this format + + + + + Returns the Description of this format + + + + + This tuple maps a display descriptive string to a Import/Export type. + (The parent dictionary contains the shortname string) + + + + + Textual description of the Format + + + + + Class implementing the format + + + + + All metadata about the provider + + + + + Create a new Transcoder Tuple + + Format description + Type implementing this format + + + + ISessionImport allows loading of Session data + + + + + Import Sessions from a data source + + Shortname of the format + Dictionary of options that the Importer class may use + Callback event on which progress is reported or the host may cancel + Array of Session objects imported from source + + + + ISessionExport allows saving of Session data + + + + + Export Sessions to a data store + + Shortname of the format + Array of Sessions being exported + Dictionary of options that the Exporter class may use + Callback event on which progress is reported or the host may cancel + TRUE if the export was successful + + + + EventArgs class for the ISessionImporter and ISessionExporter interface callbacks + + + + + Set to TRUE to request that Import/Export process be aborted as soon as convenient + + + + + Progress Callback + + Float indicating completion ratio, 0.0 to 1.0. Set to 0 if unknown. + Short string describing current operation, progress, etc + + + + The string message of the notification + + + + + The percentage completed + + + + + Implement ICertificateProvider2 instead + + + + + Return a certificate to secure this traffic. Generally, it's expected that this method WILL create a new certificate if needed. + + Hostname (e.g. "www.example.com") + An X509Certificate, or null on error + + + + Return the root certificate to which Host Certificates are chained. Generally, it's expected that this method will NOT create a root certificate. + + An X509Certificate, or null on error + + + + When this method is called, your extension should create a Root certificate. + + TRUE if the operation was successful + + + + When this method is called, your extension should copy the your Root certificate into + the user's (or machines's) Root certificate store. + + TRUE if the operation was successful + + + + When this method is called, your extension should discard all certificates and + clear any certificates that have been added to the user's certificate store. + + TRUE, if all certificates were removed; FALSE if any certificates were preserved + + + + When this method is called, your extension should check to see if the User or Machine Root + certificate store contains your Root certificate. + + Set to TRUE if StoreLocation.CurrentUser StoreName.Root has the certificate + Set to TRUE if StoreLocation.LocalMachine StoreName.Root has the certificate + TRUE if either bUserTrusted or bMachineTrusted + + + + To override default certificate handling, your class should implement this interface in an assembly + referenced by the fiddler.certmaker.assembly preference; by default, "certmaker.dll" in the application + folder is loaded + + + + + When this method is called, your extension should discard all certificates and + clear any certificates that have been added to the user's certificate store + + TRUE if the root certificate should also be cleared + TRUE, if all certificates were removed; FALSE if any certificates were preserved + + + + Call this function to cache a certificate in the Certificate Provider + + The hostname to match + The certificate that the Provider should later provide when GetCertificateForHost is called + True if the request was successful + + + + Return a string describing the current configuration of the Certificate Provider. For instance, list + the configured key size, hash algorithms, etc. + + + + + Show a configuration dialog that allows user to control options related to your Certificate Provider, + for instance, the configured key size, hash algorithm, etc. + + Owning Window Handle + + + + Fiddler Transcoders allow import and export of Sessions from Fiddler + + + + + Create the FiddlerTranscoders object + + + + + True if one or more classes implementing ISessionImporter are available. + + + + + List all of the Transcoder objects that are loaded + + + + + + True if one or more classes implementing ISessionImporter are available. + + + + + Add Import/Export encoders to FiddlerApplication.oTranscoders + + Assembly to import exporters and importers + FALSE on obvious errors + + + + Add Import/Export encoders to FiddlerApplication.oTranscoders + + Assembly to scan for transcoders + FALSE on obvious errors + + + + Loads any assembly in the specified path that ends with .dll and does not start with "_", checks that a compatible version requirement was specified, + and adds the importer and exporters within to the collection. + + The path to scan for extensions + + + + Ensures that Import/Export Transcoders have been loaded + + + + + Returns a TranscoderTuple willing to handle the specified format + + The Format + TranscoderTuple, or null + + + + Returns a TranscoderTuple willing to handle the specified format + + The Format + TranscoderTuple, or null + + + + Gets the format list of the specified type and adds that type to the collection. + + + + TRUE if any formats were found; FALSE otherwise + + + + Clear Importer and Exporter collections + + + + + CodeDescription attributes are used to enable the FiddlerScript Editor to describe available methods, properties, fields, and events. + + + + + CodeDescription attributes should be constructed by annotating a property, method, or field. + + The descriptive string which should be displayed for this this property, method, or field + + + + The descriptive string which should be displayed for this this property, method, or field + + + + + Flags that can be passed into the Startup method + + + + + No options. + + + + + Register with WinINET as the System Proxy + + + + + Decrypt HTTPS Traffic + + + + + Accept requests from remote computers or devices. WARNING: Security Impact + + + Use caution when allowing Remote Clients to connect. If a hostile computer is able to proxy his traffic through your + FiddlerCore instance, he could circumvent IPSec traffic rules, circumvent intranet firewalls, consume memory on your PC, etc. + + + + + Set this flag to forward requests to any upstream gateway + + + + + Set this flag to set all WinINET connections to use Fiddler, otherwise only the Local LAN is pointed to Fiddler + + + + + Start FiddlerCore with the default set of options (RegisterAsSystemProxy | DecryptSSL | ChainToUpstreamGateway | MonitorAllConnections | CaptureLocalhostTraffic | OptimizeThreadPool) + + + + + A simple delegate for functions which accept no parameters. (MethodInvoker is the identical Framework version of this delegate) + + + + + An event handling delegate which is called during report calculation with the set of sessions being evaluated. + + The sessions in this report. + + + + An event handling delegate which is called as a part of the HTTP pipeline at various stages. + + The Web Session in the pipeline. + + + + This class acts as the central point for script/extensions to interact with Fiddler components. + + + + + TRUE if Fiddler is currently shutting down. Suspend all work that won't have side-effects. + + + + + The default certificate used for client authentication + + + + + Fiddler's logging system + + + + + Fiddler's "Janitor" clears up unneeded resources (e.g. server sockets, DNS entries) + + + + + Fiddler's Preferences collection. Learn more at http://fiddler.wikidot.com/prefs + + + + + Gets Fiddler* version info + + A string indicating the build/flavor of the Fiddler* assembly + + + + Set the DisplayName for the application + + 1 to 64 character name to be displayed in error messages, etc + + + + Fiddler's core proxy object. + + + + + Fiddler Import/Export Transcoders + + + + + This event fires each time FiddlerCore reads data from network for the server's response. Note that this data + is not formatted in any way, and must be parsed by the recipient. + + + + + This event fires each time FiddlerCore reads data from network for the client's request. Note that this data + is not formatted in any way, and must be parsed by the recipient. + + + + + This event fires when a client request is received by Fiddler + + + + + This event fires when a server response is received by Fiddler + + + + + This event fires when Request Headers are available + + + + + This event fires when Response Headers are available + + + + + This event fires when an error response is generated by Fiddler + + + + + This event fires when Fiddler captures a WebSocket message + + + + + This event fires when a session has been completed + + + + + Sync this event to be notified when FiddlerCore has attached as the system proxy.")] + + + + + Sync this event to be notified when FiddlerCore has detached as the system proxy. + + + + + List of "leaked" temporary files to be deleted as Fiddler exits. + + + + + Checks if FiddlerCore is running. + + TRUE if FiddlerCore is started/listening; FALSE otherwise. + + + + Checks if FiddlerCore is running and registered as the System Proxy. + + TRUE if FiddlerCore IsStarted AND registered as the system proxy; FALSE otherwise. + + + + Recommended way to Start FiddlerCore listening on the specified port + + The port + The FiddlerCoreStartupFlags option you want to set; FiddlerCoreStartupFlags.Default is recommended + + + + Start the FiddlerCore engine; this overload is NOT RECOMMENDED + + + + + + + + Start the FiddlerCore engine; this overload is NOT RECOMMENDED + + Port to Listen on. + Boolean indicating if FiddlerCore should register as the system proxy. + Boolean indicating if FiddlerCore should decrypt secure traffic. If true, requires MakeCert.exe in the Application folder. + Boolean indicating if FiddlerCore should accept connections from remote computers. Note: You must ensure Firewall is configured to allow such connections to your program. + + + + Start a new proxy endpoint instance, listening on the specified port + + The port to listen on + TRUE if remote clients should be permitted to connect to this endpoint + A Hostname (e.g. EXAMPLE.com) if this endpoint should be treated as a HTTPS Server + A Proxy object, or null if unsuccessful + + + + Start a new proxy endpoint instance, listening on the specified port + + The port to listen on + TRUE if remote clients should be permitted to connect to this endpoint + A certificate to return when clients connect, or null + A Proxy object, or null if unsuccessful + + + + Shuts down the FiddlerCore proxy and disposes it. Note: If there's any traffic in progress while you're calling this method, + your background threads are likely to blow up with ObjectDisposedExceptions or NullReferenceExceptions. In many cases, you're + better off simply calling oProxy.Detach() and letting the garbage collector clean up when your program exits. + + + + + Notify a listener that a block of a response was read. + + The session for which the response is being read + byte buffer (not completely full) + bytes set. + FALSE if AbortReading was set + + + + Notify a listener that a block of a request was read. Note that this event may fire with overlapping blocks of data but + different sessions if the client uses HTTP Pipelining. + + The session for which the response is being read + byte buffer (not completely full) + bytes set. + FALSE if AbortReading was set + + + + Export Sessions in the specified format + + Shortname of desired format + Sessions to export + Options to pass to the ISessionExport interface + Your callback event handler, or NULL to allow Fiddler to handle + TRUE if successful, FALSE if desired format doesn't exist or other error occurs + + + + Calls a Fiddler Session Importer and returns the list of loaded Sessions. + + String naming the Import format, e.g. HTTPArchive + Should sessions be added to WebSessions list? (Not meaningful for FiddlerCore) + Dictionary of Options to pass to the Transcoder + Your callback event handler, or NULL to allow Fiddler to handle + Loaded Session[], or null on Failure + + + + Reset the SessionID counter to 0. This method can lead to confusing UI, so call sparingly. + + + + + Log a notification to the OnNotification handler and, if not in quiet mode, show a MessageBox + + Window to which this notification should be parented, or null + Text in the Window + Title of the Window + Icon for the window + + + + Report an exception to the user. + + The Exception + The Title of the dialog + + + + Report an exception to the user. + + The Exception + The Title of the dialog + The intro text to show. If null or empty, the default "Fiddler has encountered an unexpected... " message is shown. + + + + Show the user a message when an HTTP Error was encountered + + Session with error + Set to true to prevent pooling/reuse of client connection + The SessionFlag which should be set to log this violation + Set to true to prevent pooling/reuse of server connection + Information about the problem + + + + Process ID of this Fiddler instance + + + + + processname:PID of Fiddler + + + + + We really don't want this method to get inlined, because that would cause the Xceed DLLs to get loaded in the Main() function instead + of when _SetXceedLicenseKeys is called; that, in turn, would delay the SplashScreen. + + + + + Used to track errors with addons. + + + + + + + Record that a temporary file was created and handed to an external tool. We'll do our best to delete this file on exit. + + The filename of the file to be deleted + + + + Clean up any Temporary files that were created + + + + + Fired each time Fiddler successfully establishes a TCP/IP connection + + + + + Fired each time Fiddler successfully accepts a TCP/IP connection + + + + + Does this Fiddler instance support the specified feature? + + Feature name (e.g. "bzip2") + TRUE if the specified feature is supported; false otherwise + + + + The Socket which was just Connected or Accepted + + + + + The Session which owns the this new connection + + + + + EventArgs class for the OnNotification handler + + + + + The string message of the notification + + + + + Enumeration of possible responses specified by the ValidateServerCertificateEventArgs as modified by FiddlerApplication's OnValidateServerCertificate event + + + + + The certificate will be considered valid if CertificatePolicyErrors == SslPolicyErrors.None, otherwise the certificate will be invalid unless the user manually allows the certificate. + + + + + The certificate will be confirmed with the user even if CertificatePolicyErrors == SslPolicyErrors.None. + Note: FiddlerCore does not support user-prompting and will always treat this status as ForceInvalid. + + + + + Force the certificate to be considered Invalid, regardless of the value of CertificatePolicyErrors. + + + + + Force the certificate to be considered Valid, regardless of the value of CertificatePolicyErrors. + + + + + These EventArgs are passed to the FiddlerApplication.OnValidateServerCertificate event handler when a server-provided HTTPS certificate is evaluated + + + + + EventArgs for the ValidateServerCertificateEvent that allows host to override default certificate handling policy + + The session + The CN expected for this session + The certificate provided by the server + The certificate chain of that certificate + Errors from default validation + + + + The port to which this request was targeted + + + + + The SubjectCN (e.g. Hostname) that should be expected on this HTTPS connection, based on the request's Host property. + + + + + The Session for which a HTTPS certificate was received. + + + + + The server's certificate chain. + + + + + The SslPolicyErrors found during default certificate evaluation. + + + + + Set this property to override the certificate validity + + + + + The X509Certificate provided by the server to vouch for its authenticity + + + + + These EventArgs are constructed when FiddlerApplication.OnClearCache is called. + + + + + True if the user wants cache files to be cleared + + + + + True if the user wants cookies to be cleared + + + + + Constructs the Event Args + + Should Cache Files be cleared? + Should Cookies be cleared? + + + + When the FiddlerApplication.OnReadResponseBuffer event fires, the raw bytes are available via this object. + + + + + Set to TRUE to request that upload or download process be aborted as soon as convenient + + + + + Session for which this responseRead is occurring + + + + + Byte buffer returned from read. Note: Always of fixed size, check iCountOfBytes to see which bytes were set + + + + + Count of latest read from Socket. If less than 1, response was ended. + + + + + This FTP Gateway class is used if Fiddler is configured as the FTP proxy and there's no upstream gateway configured. + Fiddler must act as a HTTP->FTP protocol converter, which it does by using the .NET FTP classes. + + + + + Make a FTP request using the .NET FTPWebRequest class. + WARNING: This method will throw. + + Session bearing an FTP request + Returns Response body stream + Returns generated Response headers + + + + The GenericTunnel class represents a "blind tunnel" to shuffle bytes between a client and the server. + + + + + Is streaming started in the downstream direction? + + + + + Number of bytes received from the client + + + + + Number of bytes received from the server + + + + + Returns number of bytes sent from the Server to the Client + + + + + Returns number of bytes sent from the Client to the Server + + + + + This "Factory" method creates a new HTTPS Tunnel and executes it on a background (non-pooled) thread. + + The Session containing the HTTP CONNECT request + + + + Creates a tunnel. External callers instead use the CreateTunnel static method. + + The session for which this tunnel was initially created. + Client Pipe + Server Pipe + + + + This function keeps the thread alive until it is signaled that the traffic is complete + + + + + Executes the HTTPS tunnel inside an All-it-can-eat exception handler. + Call from a background thread. + + + + + Executes the WebSocket tunnel on a background thread + + + + + Instructs the tunnel to take over the server pipe and begin streaming responses to the client + + + + + Close the HTTPS tunnel and signal the event to let the service thread die. + WARNING: This MUST not be allowed to throw any exceptions, because it will do so on threads that don't catch them, and this will kill the application. + + + + + Called when we have received data from the local client. + Incoming data will immediately be forwarded to the remote host. + + The result of the asynchronous operation. + + + Called when we have sent data to the local client.
When all the data has been sent, we will start receiving again from the remote host.
+ The result of the asynchronous operation. +
+ + Called when we have sent data to the remote host.
When all the data has been sent, we will start receiving again from the local client.
+ The result of the asynchronous operation. +
+ + Called when we have received data from the remote host.
Incoming data will immediately be forwarded to the local client.
+ The result of the asynchronous operation. +
+ + + The HostList allows fast determination of whether a given host is in the list. It supports leading wildcards (e.g. *.foo.com), and the special tokens <local> <nonlocal> and <loopback>. + Note: List is *not* threadsafe; instead of updating it, construct a new one. + + + + + This private tuple allows us to associate a Hostname and a Port + + + + + Port specified in the rule + + + + + Hostname specified in the rule + + + + + Create a new HostPortTuple + + + + + Generate an empty HostList + + + + + Create a hostlist and assign it an initial set of sites + + List of hostnames, including leading wildcards, and optional port specifier. Special tokens are *, <local>, <nonlocal>, and <loopback>. + + + + Clear the HostList + + + + + Clear the List and assign the new string as the contents of the list. + + List of hostnames, including leading wildcards, and optional port specifier. Special tokens are *, <local>, <nonlocal>, and <loopback>. + TRUE if the list was constructed without errors + + + + Clear the list and assign the new string as the contents of the list. + + List of hostnames, including leading wildcards, and optional port specifier. Special tokens are *, <local>, <nonlocal>, and <loopback>. + Outparam string containing list of parsing errors + TRUE if the list was constructed without errors + + + + Return the current list of rules as a string + + String containing current rules, using "; " as a delimiter between entries + + + + Determine if a given Host is in the list + + A Host string, potentially including a port + TRUE if the Host's hostname matches a rule in the list + + + + Determine if a given Hostname is in the list + + A hostname, NOT including a port + TRUE if the hostname matches a rule in the list + + + + Determine if a given Host:Port pair matches an entry in the list + + A hostname, NOT including the port + The port + TRUE if the hostname matches a rule in the list + + + + HTTP Response headers object + + + + + Protect your enumeration using GetReaderLock + + + + + Protect your enumeration using GetReaderLock + + + + + Clone this HTTPResponseHeaders object and return the result cast to an Object + + The new response headers object, cast to an object + + + + Status code from HTTP Response. If setting, also set HTTPResponseStatus too! + + + + + Code AND Description of Response Status (e.g. '200 OK'). + + + + + Gets or sets the text associated with the response code (e.g. "OK", "Not Found", etc) + + + + + Update the response status code and text + + HTTP Status code (e.g. 401) + HTTP Status text (e.g. "Access Denied") + + + + Constructor for HTTP Response headers object + + + + + Constructor for HTTP Response headers object + + Text encoding to be used for this set of Headers when converting to a byte array + + + + Returns a byte array representing the HTTP headers. + + TRUE if the response status line should be included + TRUE if there should be a trailing \r\n byte sequence included + Byte[] containing the headers + + + + Returns a string containing http headers + + TRUE if the response status line should be included + TRUE if there should be a trailing CRLF included + String containing http headers + + + + Returns a string containing the http headers + + + Returns a string containing http headers with a status line but no trailing CRLF + + + + + Parses a string and assigns the headers parsed to this object + + The header string + TRUE if the operation succeeded, false otherwise + + + + HTTP Request headers object + + + + + Warning: You should protect your enumeration using the GetReaderLock + + + + + Warning: You should protect your enumeration using the GetReaderLock + + + + + Clones the HTTP request headers + + The new HTTPRequestHeaders object, cast to an object + + + + The HTTP Method (e.g. GET, POST, etc) + + + + + Constructor for HTTP Request headers object + + + + + Constructor for HTTP Request headers object + + Text encoding to be used for this set of Headers when converting to a byte array + + + + The (lowercased) URI scheme for this request (https, http, or ftp) + + + + + Username:Password info for FTP URLs. (either null or "user:pass@") + (Note: It's silly that this contains a trailing @, but whatever...) + + + + + Get or set the request path as a string + + + + + Get or set the request path as a byte array + + + + + Parses a string and assigns the headers parsed to this object + + The header string + TRUE if the operation succeeded, false otherwise + + + + Returns a byte array representing the HTTP headers. + + TRUE if the HTTP REQUEST line (method+path+httpversion) should be included + TRUE if there should be a trailing \r\n byte sequence included + TRUE if the SCHEME and HOST should be included in the HTTP REQUEST LINE + The HTTP headers as a byte[] + + + + Returns a byte array representing the HTTP headers. + + TRUE if the HTTP REQUEST line (method+path+httpversion) should be included + TRUE if there should be a trailing \r\n byte sequence included + TRUE if the SCHEME and HOST should be included in the HTTP REQUEST LINE + Only meaningful if prependVerbLine is TRUE, the host to use in the HTTP REQUEST LINE + The HTTP headers as a byte[] + + + + Returns a string representing the HTTP headers. + + TRUE if the HTTP REQUEST line (method+path+httpversion) should be included + TRUE if there should be a trailing CRLF sequence included + TRUE if the SCHEME and HOST should be included in the HTTP REQUEST LINE (Automatically set to FALSE for CONNECT requests) + The HTTP headers as a string. + + + + Returns a string representing the HTTP headers, without the SCHEME+HOST in the HTTP REQUEST line + + TRUE if the HTTP REQUEST line (method+path+httpversion) should be included + TRUE if there should be a trailing CRLF sequence included + The header string + + + + Returns a string representing the HTTP headers, without the SCHEME+HOST in the HTTP request line, and no trailing CRLF + + The header string + + + + Base class for RequestHeaders and ResponseHeaders + + + + + Get the Reader Lock if you plan to enumerate the Storage collection. + + + + + Get the Writer Lock if you plan to change the Storage collection. + NB: You only need this lock if you plan to change the collection itself; you can party on the items in the collection if you like without locking. + + + + + If you get the Writer lock, Free it ASAP or you're going to hang or deadlock the Session + + + + + Text encoding to be used when converting this header object to/from a byte array + + + + + HTTP version (e.g. HTTP/1.1) + + + + + Storage for individual HTTPHeaderItems in this header collection + NB: Using a list is important, as order can matter + + + + + Get byte count of this HTTP header instance. + NOTE: This method should've been abstract. + + Byte Count + + + + Number of HTTP headers + + Number of HTTP headers + + + + Returns all instances of the named header + + Header name + List of instances of the named header + + + + Copies the Headers to a new array. + Prefer this method over the enumerator to avoid cross-thread problems. + + An array containing HTTPHeaderItems + + + + Returns all values of the named header in a single string, delimited by commas + + Header + Each, Header's, Value + + + + Returns the count of instances of the named header + + Header name + Count of instances of the named header + + + + Enumerator for HTTPHeader storage collection + + Enumerator + + + + Gets or sets the value of a header. In the case of Gets, the value of the first header of that name is returned. + If the header does not exist, returns null. + In the case of Sets, the value of the first header of that name is updated. + If the header does not exist, it is added. + + + + + Indexer property. Returns HTTPHeaderItem by index. Throws Exception if index out of bounds + + + + + Adds a new header containing the specified name and value. + + Name of the header to add. + Value of the header. + Returns the newly-created HTTPHeaderItem. + + + + Adds one or more headers + + + + + Returns the Value from a token in the header. Correctly handles double-quoted strings. Requires semicolon for delimiting tokens + Limitation: FAILS if semicolon is in token's value, even if quoted. + FAILS in the case of crazy headers, e.g. Header: Blah="SoughtToken=Blah" SoughtToken=MissedMe + + We really need a "proper" header parser + + Name of the header + Name of the token + Value of the token if present; otherwise, null + + + + Determines if the Headers collection contains a header of the specified name, with any value. + + The name of the header to check. (case insensitive) + True, if the header exists. + + + + Determines if the Headers collection contains any header from the specified list, with any value. + + list of headers + True, if any named header exists. + + + + Determines if the Headers collection contains one or more headers of the specified name, and + sHeaderValue is part of one of those Headers' value. + + The name of the header to check. (case insensitive) + The partial header value. (case insensitive) + True if the header is found and the value case-insensitively contains the parameter + + + + Determines if the Headers collection contains a header of the specified name, and sHeaderValue=Header's value. Similar + to a case-insensitive version of: headers[sHeaderName]==sHeaderValue, although it checks all instances of the named header. + + The name of the header to check. (case insensitive) + The full header value. (case insensitive) + True if the header is found and the value case-insensitively matches the parameter + + + + Removes all headers from the header collection which have the specified name. + + The name of the header to remove. (case insensitive) + + + + Removes all headers from the header collection which have the specified names. + + Array of names of headers to remove. (case insensitive) + + + + Removes a HTTPHeader item from the collection + + The HTTPHeader item to be removed + + + + Removes all HTTPHeader items from the collection + + + + + Renames all headers in the header collection which have the specified name. + + The name of the header to rename. (case insensitive) + The new name for the header. + True if one or more replacements were made. + + + + Represents a single HTTP header + + + + + Clones a single HTTP header and returns the clone cast to an object + + HTTPHeader Name: Value pair, cast to an object + + + + The name of the HTTP header + + + + + The value of the HTTP header + + + + + Creates a new HTTP Header item. WARNING: Doesn't do any trimming or validation on the name. + + Header name + Header value + + + + Return a string of the form "NAME: VALUE" + + "NAME: VALUE" Header string + + + + Provides simple utility functions common to both ClientHello and ServerHello parsing + + + + + Gets a textual string from a TLS extension + + + + + Builds a string from an ALPN List of strings + + + + + List Sig/Hash pairs from RFC5246 + + + + + + + List defined ECC Curves from RFC4492 + + + + + + + List defined ECC Point Formats from RFC4492 + + + + + + + Converts a HTTPS version to a "Major.Minor (Friendly)" string + + + + + The HTTPSClientHello class is used to parse the bytes of a HTTPS ClientHello message. + + + + + Map cipher id numbers to names. See http://www.iana.org/assignments/tls-parameters/ + Format is PROTOCOL_KEYAGREEMENT_AUTHENTICATIONMECHANISM_CIPHER_MACPRIMITIVE + + + + + Parse a single extension using the list from http://tools.ietf.org/html/rfc6066 + http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xml + https://src.chromium.org/viewvc/chrome/trunk/src/net/third_party/nss/ssl/sslt.h + + + + + + + Did client use ALPN to go to SPDY? + http://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg-01#section-3.1 + + + + + Did this ServerHello Handshake specify an upgrade to SPDY? + + + + + Did this ServerHello Handshake specify an upgrade to SPDY? + + + + + Parse a single extension using the list from http://tools.ietf.org/html/rfc6066 + + + + + + + The Logger object is a simple event log message dispatcher + + + + + The Event to raise when a string is logged + + + + + Queue of Messages that are be logged (usually during application startup) until another object has loaded and registered for notification of such Messages + + + + + Creates a Logger object + + True if a queue should be created to store messages during Fiddler's startup + + + + Flushes previously-queued messages to the newly attached listener. + + + + + Log a string with specified string formatting + + The format string + The arguments to replace in the string + + + + Log a string + + The string to log + + + + EventArgs class for the LogEvent handler + + + + + The String which has been logged + + + + + The MockTunnel represents a CONNECT tunnel which was reloaded from a SAZ file. + + + + + Flags that indicate what problems, if any, were encountered in parsing HTTP headers + + + + + There were no problems parsing the HTTP headers + + + + + The HTTP headers ended incorrectly with \n\n + + + + + The HTTP headers ended incorrectly with \n\r\n + + + + + The HTTP headers were malformed. + + + + + The Parser class exposes static methods used to parse strings or byte arrays into HTTP messages. + + + + + Given a byte[] representing a request, determines the offsets of the components of the line. WARNING: Input MUST contain a LF or an exception will be thrown + + Byte array of the request + Returns the index of the byte of the URI in the Request line + Returns the length of the URI in the Request line + Returns the index of the first byte of the name/value header pairs + + + + + + + Index of final byte of headers, if found, or location that search should resume next time + + + + + + + Parse out HTTP Header lines. + + Header collection to *append* headers to + Array of Strings + Index into array at which parsing should start + String containing any errors encountered + TRUE if there were no errors, false otherwise + + + + Given a byte array, determines the Headers length + + Input array of data + Returns the calculated length of the headers. + Returns the calculated start of the response body. + Any HTTPHeaderParseWarnings discovered during parsing. + True, if the parsing was successful. + + + + Given a MemoryStream, attempts to parse a HTTP Request starting at the current position. + + TRUE if a request could be parsed, FALSE otherwise + + + + Given a MemoryStream, attempts to parse a HTTP Response starting at the current position + + TRUE if the response must not have a body (e.g. because Request method was HEAD) + TRUE if a response could be parsed, FALSE otherwise + + + + Parse the HTTP Request into a headers object. + + The HTTP Request string, including *at least the headers* with a trailing CRLFCRLF + HTTPRequestHeaders parsed from the string. + + + + Break headers off, then convert CRLFs into LFs + + + + + + + Parse the HTTP Response into a headers object. + + The HTTP response as a string, including at least the headers. + HTTPResponseHeaders parsed from the string. + + + + Class allows finding the end of a body sent using Transfer-Encoding: Chunked + + + + + Number of bytes in the body (sans chunk headers, CRLFs, and trailers) + + + + + + Read the first character of the hexadecimal size + + + + + Read the first character of the next Trailer header (if any) + + + + + We're in a trailer. Read up to the next \r + + + + + We've just read a trailer CR, now read its LF + + + + + We read a CR on an "empty" Trailer line, so now we just need the final LF + + + + + The chunked body was successfully read with no excess + + + + + Completed, but we read too many bytes. Call getOverage to return how many bytes to put back + + + + + The body was malformed + + + + + Somewhat similar to the Framework's "BackgroundWorker" class, the periodic worker performs a similar function on a periodic schedule. + NOTE: the callback occurs on a background thread. + + The PeriodicWorker class is used by Fiddler to perform "cleanup" style tasks on a timer. Put work in the queue, + and it will see that it's done at least as often as the schedule specified until Fiddler begins to close at which + point all work stops. + + + The underlying timer's interval is 1 second. + + + + I think a significant part of the reason that this class exists is that I thought the System.Threading.Timer consumed one thread for each + timer. In reality, per "CLR via C# 4e" all of the instances share one underlying thread and thus my concern was misplaced. Ah well. + + + + + Assigns a "job" to the Periodic worker, on the schedule specified by iMS. + + The function to run on the timer specified. + Warning: the function is NOT called on the UI thread, so use .Invoke() if needed. + The # of milliseconds to wait between runs + A taskItem which can be used to revokeWork later + + + + Revokes a previously-assigned task from this worker. + + + + + + The ScheduledTasks class allows addition of jobs by name. It ensures that ONE instance of the named + job will occur at *some* point in the future, between 0 and a specified max delay. If you queue multiple + instances of the same-named Task, it's only done once. + + + + + Under the lock, we enumerate the schedule to find work to do and remove that work from the schedule. + After we release the lock, we then do the queued work. + + + + + + A jobItem represents a Function+Time tuple. The function will run after the given time. + + + + + TickCount at which this job must run. + + + + + Method to invoke to complete the job + + + + + Abstract base class for the ClientPipe and ServerPipe classes. A Pipe represents a connection to either the client or the server, optionally encrypted using SSL/TLS. + + + + + The base socket wrapped in this pipe + + + + + The number of times that this Pipe has been used + + + + + The HTTPS stream wrapped around the base socket + + + + + The display name of this Pipe + + + + + Number of milliseconds to delay each 1024 bytes transmitted + + + + + Create a new pipe, an enhanced wrapper around a socket + + Socket which this pipe wraps + Identification string used for debugging purposes + + + + Return the Connected status of the base socket. + WARNING: This doesn't work as you might expect; you can see Connected == false when a READ timed out but a WRITE will succeed. + + + + + Poll the underlying socket for readable data (or closure/errors) + + TRUE if this Pipe requires attention + + + + Returns a bool indicating if the socket in this Pipe is CURRENTLY connected and wrapped in a SecureStream + + + + + Returns the SSL/TLS protocol securing this connection + + + + + Return the Remote Port to which this socket is attached. + + + + + Return the Local Port to which the base socket is attached. Note: May return a misleading port if the ISA Firewall Client is in use. + + + + + Returns the remote address to which this Pipe is connected, or 0.0.0.0 on error. + + + + + Gets or sets the transmission delay on this Pipe, used for performance simulation purposes. + + + + + Call this method when about to reuse a socket. Currently, increments the socket's UseCount and resets its transmit delay to 0. + + The session identifier of the new session, or zero + + + + Sends a byte array through this pipe + + The bytes + + + + Sends the data specified in oBytes (between iOffset and iOffset+iCount-1 inclusive) down the pipe. + + + + + + + + Receive bytes from the pipe into the DATA buffer. + + Throws IO exceptions from the socket/stream + Array of data read + Bytes read + + + + Return the raw socket this pipe wraps. Avoid calling this method if at all possible. + + The Socket object this Pipe wraps. + + + + Shutdown and close the socket inside this pipe. Eats exceptions. + + + + + Abruptly closes the socket by sending a RST packet + + + + + A ClientPipe wraps a socket connection to a client application. + + + + + By default, we now test for loopbackness before lookup of PID + https://github.com/telerik/fiddler/issues/83 + + + + + Timeout to wait for the *first* data from the client + + + + + Timeout to wait for the ongoing reads from the client (as headers and body are read) + + + + + Timeout before which an idle connection is closed (e.g. for HTTP Keep-Alive) + + + + + Client process name (e.g. "iexplore") + + + + + Client process ProcessID + + + + + Data which was previously "over-read" from the client. Populated when HTTP-pipelining is attempted + + + + + ID of the process that opened this socket, assuming that Port Mapping is enabled, and the connection is from the local machine + + + + + Does this Pipe have data (or closure/errors) to read? + + TRUE if this Pipe requires attention + + + + If you previously read more bytes than you needed from this client socket, you can put some back. + + Array of bytes to put back; now owned by this object + + + + Name of the Process referred to by LocalProcessID, or String.Empty if unknown + + + + + Sets the socket's timeout based on whether we're waiting for our first read or for an ongoing read-loop + + + + + Returns a semicolon-delimited string describing this ClientPipe + + A semicolon-delimited string + + + + Perform a HTTPS Server handshake to the client. Swallows exception and returns false on failure. + + + + + + + This function sends the client socket a CONNECT ESTABLISHED, and then performs a HTTPS authentication + handshake, with Fiddler acting as the server. + + Hostname Fiddler is pretending to be (NO PORT!) + The set of headers to be returned to the client in response to the client's CONNECT tunneling request + true if the handshake succeeds + + + + Timestamp of either 1> The underlying socket's creation from a .Accept() call, or 2> when this ClientPipe was created. + + + + + The PipePool maintains a collection of connected ServerPipes for reuse + + + + + Minimum idle time of pipes to be expired from the pool. + Note, we don't check the pipe's ulLastPooled value when extracting a pipe, + so its age could exceed the allowed lifetime by up to MSEC_POOL_CLEANUP_INTERVAL + WARNING: Don't change the timeout >2 minutes casually. Server bugs apparently exist: https://bugzilla.mozilla.org/show_bug.cgi?id=491541 + + + + + The Pool itself. + + + + + Time at which a "Clear before" operation was conducted. We store this + so that we don't accidentally put any pipes that were in use back into + the pool after a clear operation + + + + + Remove any pipes from Stacks if they exceed the age threshold + Remove any Stacks from pool if they are empty + + + + + Clear all pooled Pipes, calling .End() on each. + + + + + Return a string representing the Pipes in the Pool + + A string representing the pipes in the pool + + + + Get a Server connection for reuse, or null if a suitable connection is not in the pool. + + The key which identifies the connection to search for. + The ProcessID of the client requesting the Pipe + HACK to be removed; the SessionID# of the request for logging + A Pipe to reuse, or NULL + + + + Store a pipe for later use, if reuse is allowed by settings and state of the pipe. + + The Pipe to place in the pool + + + + This class holds a specialized memory stream with growth characteristics more suitable for reading from a HTTP Stream. + The default MemoryStream's Capacity will always grow to 256 bytes, then at least ~2x current capacity up to 1gb (2gb on .NET 4.6), then to the exact length after that. + That has three problems: + + The capacity may unnecessarily grow to >85kb, putting the object on the LargeObjectHeap even if we didn't really need 85kb. + On 32bit, we may hit a Address Space exhaustion ("Out of memory" exception) prematurely and unnecessarily due to size-doubling + After the capacity reaches 1gb in length, the capacity growth never exceeds the length, leading to huge reallocations and copies on every write (fixed in .NET 4.6) + + This class addresses those issues. http://textslashplain.com/2015/08/06/tuning-memorystream/ + + + + + A client may submit a "hint" of the expected size. We use that if present. + + + + + Used by the caller to supply a hint on the expected total size of reads from the pipe. + We cannot blindly trust this value because sometimes the client or server will lie and provide a + huge value that it will never use. This is common for RPC-over-HTTPS tunnels like that used by + Outlook, for instance. + + The Content-Length can also lie by underreporting the size. + + Suggested total buffer size in bytes + + + + The policy which describes how this pipe may be reused by a later request. Ordered by least restrictive to most. + + + + + The ServerPipe may be freely reused by any subsequent request + + + + + The ServerPipe may be reused only by a subsequent request from the same client process + + + + + The ServerPipe may be reused only by a subsequent request from the same client pipe + + + + + The ServerPipe may not be reused for a subsequent request + + + + + A ServerPipe wraps a socket connection to a server. + + + + + Policy for reuse of this pipe + + + + + DateTime of the completion of the TCP/IP Connection + + + + + TickCount when this Pipe was last placed in a PipePool + + + + + Returns TRUE if this ServerPipe is connected to a Gateway + + + + + Returns TRUE if this ServerPipe is connected to a SOCKS gateway + + + + + The Pooling key used for reusing a previously pooled ServerPipe. See sPoolKey property. + + + + + This field, if set, tracks the process ID to which this Pipe is permanently bound; set by MarkAsAuthenticated. + NOTE: This isn't actually checked by anyone; instead the PID is added to the POOL Key + + + + + Backing field for the isAuthenticated property + + + + + String containing representation of the server's certificate chain + + + + + Server's certificate + + + + + Wraps a socket in a Pipe + + The Socket + Pipe's human-readable name + True if the Pipe is attached to a gateway + The Pooling key used for socket reuse + + + + Returns TRUE if there is an underlying, mutually-authenticated HTTPS stream. + + WARNING: Results are a bit of a lie. System.NET IsMutuallyAuthenticated == true if a client certificate is AVAILABLE even + if that certificate was never SENT to the server. + + + + + Returns TRUE if this PIPE is marked as having been authenticated using a Connection-Oriented Auth protocol: + NTLM, Kerberos, or HTTPS Client Certificate. + + + + + Marks this Pipe as having been authenticated. Depending on the preference "fiddler.network.auth.reusemode" this may impact the reuse policy for this pipe + + The client's process ID, if known. + + + + Indicates if this pipe is connected to an upstream (non-SOCKS) Proxy. + + + + + Indicates if this pipe is connected to a SOCKS gateway + + + + + Sets the receiveTimeout based on whether this is a freshly opened server socket or a reused one. + + + + + Returns a semicolon-delimited string describing this ServerPipe + + A semicolon-delimited string + + + + Gets and sets the pooling key for this server pipe. + + + direct->{http|https}/{serverhostname}:{serverport} + gw:{gatewayaddr:port}->* + gw:{gatewayaddr:port}->{http|https}/{serverhostname}:{serverport} + socks:{gatewayaddr:port}->{http|https}/{serverhostname}:{serverport} + + + + + Returns the Server's certificate Subject CN (used by "x-UseCertCNFromServer") + + The *FIRST* CN field from the Subject of the certificate used to secure this HTTPS connection, or null if the connection is unsecure + + + + Return a string describing the HTTPS connection security, if this socket is secured + + A string describing the HTTPS connection's security. + + + + Returns a string describing how this connection is secured. + + + + + + Get the Transport Context for the underlying HTTPS connection so that Channel-Binding Tokens work correctly + + + + + + Returns the IPEndPoint to which this socket is connected, or null + + + + + Get the user's default client cert for authentication; caching if if possible and permitted. + + + + + + This method is called by the HTTPS Connection establishment to optionally attach a client certificate to the request. + Test Page: https://tower.dartmouth.edu/doip/OracleDatabases.jspx or ClientCertificate.ms in Test folder should request on initial connection + In contrast, this one: https://roaming.officeapps.live.com/rs/roamingsoapservice.svc appears to try twice (renego) + + + + + + + + + + + This function secures an existing connection and authenticates as client. This is primarily useful when + the socket is connected to a Gateway/Proxy and we had to send a CONNECT and get a HTTP/200 Connected back before + we actually secure the socket. + http://msdn.microsoft.com/en-us/library/system.net.security.sslstream.aspx + + The Session (a CONNECT) this tunnel wraps + The CN to use in the certificate + Path to client certificate file + The HTTPS protocol version of the Client Pipe; can influence which SslProtocols we offer the server + Reference-passed integer which returns the time spent securing the connection + TRUE if the connection can be secued + + + + Return a Certificate Collection containing certificate from the specified file. + + Path to the certificate. Relative Paths will be absolutified automatically + The Certificate collection, or null + + + + EventArgs for preference-change events. See http://msdn.microsoft.com/en-us/library/ms229011.aspx. + + + + + The name of the preference being added, changed, or removed + + + + + The string value of the preference, or null if the preference is being removed + + + + + Returns TRUE if ValueString=="true", case-insensitively + + + + + The IFiddlerPreferences Interface is exposed by the FiddlerApplication.Prefs object, and enables + callers to Add, Update, and Remove preferences, as well as observe changes to the preferences. + + + + + Store a boolean value for a preference + + The named preference + The boolean value to store + + + + Store an Int32 value for a preference + + The named preference + The int32 value to store + + + + Store a string value for a preference + + The named preference + The string value to store + + + + Get a preference's value as a boolean + + The Preference Name + The default value for missing or invalid preferences + A Boolean + + + + Gets a preference's value as a string + + The Preference Name + The default value for missing preferences + A string + + + + Gets a preference's value as a 32-bit integer + + The Preference Name + The default value for missing or invalid preferences + An integer + + + + Removes a named preference from storage + + The name of the preference to remove + + + + Add a Watcher that will be notified when a value has changed within the specified prefix. + + The prefix of preferences for which changes are interesting + The Event handler to notify + Returns the Watcher object added to the notification list + + + + Removes a previously-created preference Watcher from the notification queue + + The Watcher to remove + + + + Indexer. Returns the value of the preference as a string + + The Preference Name + The Preference value as a string, or null + + + + The PreferenceBag is used to maintain a threadsafe Key/Value list of preferences, persisted in the registry, and with appropriate eventing when a value changes. + + + + + Returns a string naming the current profile + + + + + Load the existing preferences from the Registry into the Preferences bag. + Note: Does not fire any events. + + + + + Serialize the existing preferences to the Registry (unless in Viewer mode). + + + + + Indexer into the Preference collection. + + The name of the Preference to update/create or return. + The string value of the preference, or null. + + + + Get a string array of the preference names + + string[] of preference names + + + + Gets a preference's value as a string + + The Preference Name + The default value if the preference is missing + A string + + + + Return a bool preference. + + The Preference name + The default value to return if the specified preference does not exist + The boolean value of the Preference, or the default value + + + + Return an Int32 Preference. + + The Preference name + The default value to return if the specified preference does not exist + The Int32 value of the Preference, or the default value + + + + Update or create a string preference. + + The name of the Preference + The value to assign to the Preference + + + + Update or create a Int32 Preference + + The name of the Preference + The value to assign to the Preference + + + + Update or create a Boolean preference. + + The name of the Preference + The value to assign to the Preference + + + + Delete a Preference from the collection. + + The name of the Preference to be removed. + + + + Remove all Watchers + + + + + Remove all watchers and write the registry. + + + + + Return a description of the contents of the preference bag + + Multi-line string + + + + Return a string-based serialization of the Preferences settings. + + TRUE for a multi-line format with all preferences + String + + + + Returns a CRLF-delimited string containing all Preferences whose Name case-insensitively contains the specified filter string. + + Partial string to match + A string + + + + A simple struct which contains a Branch identifier and EventHandler + + + + + Add a watcher for changes to the specified preference or preference branch. + + Preference branch to monitor, or String.Empty to watch all + The EventHandler accepting PrefChangeEventArgs to notify + Returns the PrefWatcher object which has been added, store to pass to RemoveWatcher later. + + + + Remove a previously attached Watcher + + The previously-specified Watcher + + + + This function executes on a single background thread and notifies any registered + Watchers of changes in preferences they care about. + + A string containing the name of the Branch that changed + + + + Spawn a background thread to notify any interested Watchers of changes to the Target preference branch. + + The arguments to pass to the interested Watchers + + + + This class allows fast-lookup of a ProcessName from a ProcessID. + + + + + Static constructor which registers for cleanup + + + + + Prune the cache of expiring PIDs + + + + + Map a Process ID (PID) to a Process Name + + The PID + A Process Name (e.g. IEXPLORE.EXE) or String.Empty + + + + Structure mapping a Process ID (PID) to a ProcessName + + + + + The TickCount when this entry was created + + + + + The ProcessName (e.g. IEXPLORE.EXE) + + + + + Create a PID->ProcessName mapping + + The ProcessName (e.g. IEXPLORE.EXE) + + + + The core proxy object which accepts connections from clients and creates session objects from those connections + + + + + The RegistryWatcher is used to monitor changes in the WinINET Proxy registry keys + to detect premature detaches. + + + + + Hostname if this Proxy Endpoint is terminating HTTPS connections + + + + + Certificate if this Proxy Endpoint is terminating HTTPS connections + + + + + Per-connectoid information about each WinINET connectoid + + + + + The default WinINET proxy as determined upon Fiddler startup. + + + + + The WinHTTP AutoProxy object, created if we're using WPAD or a PAC Script as a gateway + + + + + Allow binding to a specific egress adapter: "fiddler.network.egress.ip" + + + + + Watcher for Notification of Preference changes + + + + + Server connections may be pooled for performance reasons. + + + + + The Socket Endpoint on which this proxy receives requests + + + + + Flag indicating that Fiddler is in the process of detaching... + + + + + List of hosts which should bypass the upstream gateway + + + + + Returns a string of information about this instance and the ServerPipe reuse pool + + A multiline string + + + + The port on which this instance is listening + + + + + Returns true if Fiddler believes it is currently registered as the Local System proxy + + + + + This event handler fires when Fiddler detects that it is (unexpectedly) no longer the system's registered proxy + + + + + Change the outbound IP address used to send traffic + + + + + + Watch for relevent changes on the Preferences object + + + + + + + Called whenever Windows reports that the system's NetworkAddress has changed + + + + + + + Called by Windows whenever network availability goes up or down. + + + + + + + Directly inject a session into the Fiddler pipeline, returning a reference to it. + NOTE: This method will THROW any exceptions to its caller. + + String representing the HTTP request. If headers only, be sure to end with CRLFCRLF + StringDictionary of Session Flags (or null) + The new session + + + + [DEPRECATED] Directly inject a session into the Fiddler pipeline. + NOTE: This method will THROW any exceptions to its caller. + + + HTTP Request Headers + HTTP Request body (or null) + StringDictionary of Session Flags (or null) + + + + [DEPRECATED] Directly inject a session into the Fiddler pipeline. + NOTE: This method will THROW any exceptions to its caller. + + + String representing the HTTP request. If headers only, be sure to end with CRLFCRLF + StringDictionary of Session Flags (or null) + + + + [DEPRECATED]: This version does no validation of the request data, and doesn't set SessionFlags.RequestGeneratedByFiddler + Send a custom HTTP request to Fiddler's listening endpoint (127.0.0.1:8888 by default). + NOTE: This method will THROW any exceptions to its caller and blocks the current thread. + + + String representing the HTTP request. If headers only, be sure to end with CRLFCRLF + + + + This function, when given a scheme host[:port], returns the gateway information of the proxy to forward requests to. + + URIScheme: use http, https, or ftp + Host for which to return gateway information + IPEndPoint of gateway to use, or NULL + + + + Accept the connection and pass it off to a handler thread + + + + + + Register as the system proxy for WinINET and set the Dynamic registry key for other FiddlerHook + + True if the proxy registration was successful + + + + If we get a notice that the proxy registry key has changed, wait 50ms and then check to see + if the key is pointed at us. If not, raise the alarm. + + + + + + + If we are supposed to be "attached", we re-verify the registry keys, and if they are corrupt, notify + our host of the discrepency. + + + + + This method sets up the connectoid list and updates gateway information. Called by the Attach() method, or + called on startup if Fiddler isn't configured to attach automatically. + + + + + Given an address list, walks the list until it's able to successfully make a connection. + Used for finding an available Gateway when we have a list to choose from + + A string, e.g. PROXY1:80 + The IP:Port of the first alive endpoint for the specified host/port + + + + Set internal fields pointing at upstream proxies. + + + + + Sets a registry key which indicates that Fiddler is in "Connected" mode. Used by the FiddlerHook Add-on + + TRUE if fiddler is Connected + + + + Detach the proxy by setting the registry keys and sending a Windows Message + + True if the proxy settings were successfully detached + + + + Detach the proxy by setting the registry keys and sending a Windows Message + + True if the proxy settings were successfully detached + + + + Stop the proxy by closing the socket. + + + + + Start the proxy by binding to the local port and accepting connections + + Port to listen on + TRUE to allow remote connections + + + + + Dispose Fiddler's listening socket + + + + + Clear the pool of Server Pipes. May be called by extensions. + + + + + Assign HTTPS Certificate for this endpoint + + Certificate to return to clients who connect + + + + Sets the upstream gateway to match the specified ProxyInfo + + + + + + Generate or find a certificate for this endpoint + + Subject FQDN + TRUE if the certificate could be found/generated, false otherwise + + + + Return a simple string indicating what upstream proxy/gateway is in use. + + + + + + Show a message box indicating what upstream gateway/proxy is in use + + + + + This class maintains the Proxy Bypass List for the upstream gateway. + In the constructor, pass the desired proxy bypass string, as retrieved from WinINET for the Fiddler Options screen. + Then, call the IsBypass(sTarget) method to determine if the Gateway should be bypassed + + + + + List of regular expressions for matching against request Scheme://HostPort. + NB: This list is either null or contains at least one item. + + + + + Boolean flag indicating whether the bypass list contained a <local> token. + + + + + Pass the desired proxy bypass string retrieved from WinINET. + + + + + + Does the bypassList contain any rules at all? + + + + + Given the rules for this bypasslist, should this target bypass the proxy? + + The URI Scheme + The Host and PORT + True if this request should not be sent to the gateway proxy + + + + Convert the string representing the bypass list into an array of rules escaped and ready to be turned into regular expressions + + + + + + The DisplayName for this Connection + + + + + Is this Connectoid expected to be pointed at Fiddler? + + + + + The proxy settings collected from this connection before Fiddler was attached. + + + + + The WinINET Connectoids class contains the RAS/WinINET "connectoids" seen inside IE's Tools > Internet Options > Connections. + This class exposes methods to retrieve and update the proxy information for each connectoid in the list. + + + TODO: The methods of the class are not thread-safe and probably should be. + TODO: Need to refactor visibility here. Right now, _oConnectoids is (internal) instead of (private) because the + Options dialog iterates the list. And about:connectoids wants access too. Eventually ought to wrap as a ReadOnlyCollection getter + + + + + Expensive Call. Enumerates all Connectoids using the RAS APIs, then determines the proxy information + for each connectoid. + + + + + Fires when the specified registry key has changed. + + + + + Watch a registry key for changes to its values. + + The Registry Hive in which the key lives + The key, e.g. \Software\Microsoft\Fiddler2\ + The Event Handler to invoke when a change occurs. + A new RegistryWatcher object. + + + + Start monitoring. + + + + + Stops the monitoring thread. + + + + + The ServerChatter object is responsible for transmitting the Request to the destination server and retrieving its Response. + + + This class maintains its own PipeReadBuffer that it fills from the created or reused ServerPipe. After it determines that + a complete response is present, it allows the caller to grab that array using the TakeEntity method. If + unsatisfied with the result (e.g. a network error), the caller can call Initialize() and SendRequest() again. + + + + + Size of buffer passed to pipe.Receive when reading from the server + + + PERF: Currently, I use [32768]; but I'd assume bigger buffers are faster. Does ReceiveBufferSize/SO_RCVBUF figure in here? + Anecdotal data suggests that current reads rarely fill the full 32k buffer. + + + + + Interval, in milliseconds, after which Fiddler will check to see whether a response should continue to be read. Otherwise, + a never-ending network stream can accumulate ever larger amounts of data that will never be seen by the garbage collector. + + + + + The pipeServer represents Fiddler's connection to the server. + + + + + The session to which this ServerChatter belongs + + + + + The inbound headers on this response + + + + + Indicates whether this request was sent to a (non-SOCKS) Gateway, which influences whether the protocol and host are + mentioned in the Request line + When True, the session should have SessionFlags.SentToGateway set. + + + + + Buffer holds this response's data as it is read from the pipe. + + + + + + Pointer to first byte of Entity body (or to the start of the next set of headers in the case where there's a HTTP/1xx intermediate header) + Note: This gets reset to 0 if we're streaming and dropping the response body. + + + + + Optimization: tracks how far we've looked into the Request when determining iEntityBodyOffset + + + + + True if final (non-1xx) HTTP Response headers have been returned to the client. + + + + + Indicates how much of _responseData buffer has already been streamed to the client + + + + + Position in responseData of the start of the latest parsed chunk size information + + + + + Locals used by the Connect-to-Host state machine + + + + + The ExecutionState object holds information that is used by the Connect-to-Host state machine + + + + + Peek at number of bytes downloaded thus far. + + + + + Get the MIME type (sans Character set or other attributes) from the HTTP Content-Type response header, or String.Empty if missing. + + + + + DEPRECATED: You should use the Timers object on the Session object instead. + The number of milliseconds between the start of sending the request to the server to the first byte of the server's response + + + + + DEPRECATED: You should use the Timers object on the Session object instead. + The number of milliseconds between the start of sending the request to the server to the last byte of the server's response. + + + + + Was this request forwarded to a gateway? + + + + + Was this request serviced from a reused server connection? + + + + + The HTTP headers of the server's response + + + + + Simple indexer into the Response Headers object + + + + + Create a ServerChatter object and initialize its headers from the specified string + + + + + + + Reset the response-reading fields on the object. Also used on a retry. + + If TRUE, allocates a buffer (m_responseData) to read from a pipe. If FALSE, nulls m_responseData. + + + + Peek at the current response body and return it as an array + + The response body as an array, or byte[0] + + + + Get the response body byte array from the PipeReadBuffer, then dispose of it. + + WARNING: This eats all of the bytes in the Pipe, even if that includes bytes of a + future, as-yet-unrequested response. Fiddler does not pipeline requests, so that works okay for now. + For now, the caller should validate that the returned entity is of the expected size (e.g. based on Content-Length) + + + + + Scans responseData stream for the \r\n\r\n (or variants) sequence + which indicates that the header block is complete. + + SIDE EFFECTS: + iBodySeekProgress is updated and maintained across calls to this function + iEntityBodyOffset is updated if the end of headers is found + + True, if responseData contains a full set of headers + + + + Parse the HTTP Response into Headers and Body. + + + + + + Attempt to pull the final (non-1xx) Headers from the stream. If HTTP/100 messages are found, the method + will recurse into itself to find the next set of headers. + + + + + Deletes a single HTTP/1xx header block from the Response stream + and adjusts all header-reading state to start over from the top of the stream. + Note: If 'fiddler.network.leakhttp1xx' is TRUE, then the 1xx message will have been leaked before calling this method. + + + + + Adjusts PipeServer's ReusePolicy if response headers require closure. Then calls _detachServerPipe() + + + + + Queues or End()s the ServerPipe, depending on its ReusePolicy + + + + + Determines whether a given PIPE is suitable for a given Session, based on that Session's SID + + The Client Process ID, if any + The base (no PID) PoolKey expected by the session + The pipe's pool key + TRUE if the connection should be used, FALSE otherwise + + + + If a Connection cannot be established, we need to report the failure to our caller + + + + + + Given an address list and port, attempts to create a socket to the first responding host in the list (retrying via DNS Failover if needed). + + IPEndpoints to attempt to reach + Session object to annotate with timings and errors + Connected Socket. Throws Exceptions on errors. + + + + If the Session was configured to stream the request body, we need to read from the client + and send it to the server here. + + + FALSE on transfer error, TRUE otherwise. + + + + + Sends (or resends) the Request to the server or upstream proxy. If the request is a CONNECT and there's no + gateway, this method ~only~ establishes the connection to the target, but does NOT send a request. + + Note: THROWS on failures + + + + + May request be resent on a different connection because the .Send() of the request did not complete? + + TRUE if the request may be resent + + + + Performs a SOCKSv4A handshake on the socket + + + + + Build the SOCKS4 outbound connection handshake as a byte array. + http://en.wikipedia.org/wiki/SOCKS#SOCKS4a + + + + + Replaces body with an error message + + Error to send if client was remote + Error to send if cilent was local + + + + The Session object will call this method if it wishes to stream a file from disk instead + of loading it into memory. This method sets default headers. + + + + + + Loads a HTTP response from a file + + The name of the file from which a response should be loaded + False if the file wasn't found. Throws on other errors. + + + + Reads the response from the ServerPipe. + + TRUE if a response was read + + + + When the headers first arrive, update bBufferResponse based on their contents. + + + + + Detects whether this is an direct FTP request and if so executes it and returns true. + + FALSE if the request wasn't FTP or wasn't direct. + + + + Remove from memory the response data that we have already returned to the client. + + + + + Remove from memory the response data that we have already returned to the client, up to the last chunk + size indicator, which we need to keep around for chunk-integrity purposes. + + + + + Leak the current bytes of the response to client. We wait for the full header + set before starting to stream for a variety of impossible-to-change reasons. + + Returns TRUE if response bytes were leaked, false otherwise (e.g. write error). THROWS if "fiddler.network.streaming.abortifclientaborts" is TRUE + + + + Mark this connection as non-reusable + + + + + The Session object manages the complete HTTP session including the UI listitem, the ServerChatter, and the ClientChatter. + + + + + Should we try to use the SPNToken type? + Cached for performance reasons. + ISSUE: It's technically possible to use FiddlerCorev2/v3 on .NET/4.5 but we won't set this field if you do that. + + + + + Sorta hacky, we may use a .NET WebRequest object to generate a valid NTLM/Kerberos response if the server + demands authentication and the Session is configured to automatically respond. + + + + + Used if the Session is bound to a WebSocket or CONNECTTunnel + + + + + File to stream if responseBodyBytes is null + + + + + Bitflags of commonly-queried session attributes + + + + + DO NOT USE. TEMPORARY WHILE REFACTORING VISIBILITY OF MEMBERS + + + + + + + Sets or unsets the specified SessionFlag(s) + + SessionFlags + Desired set value + + + + Test the session's BitFlags + + One or more (OR'd) SessionFlags + TRUE if ALL specified flag(s) are set + + + + Test the session's BitFlags + + One or more (OR'd) SessionFlags + TRUE if ANY of specified flag(s) are set + + + + When a client socket is reused, this field holds the next Session until its execution begins + + + + + Should response be buffered for tampering. + + ARCH: This should have been a property instead of a field, so we could throw an InvalidStateException if code tries to manipulate this value after the response has begun + + + + Timers stored as this Session progresses + + + + + Field is set to False if socket is poisoned due to HTTP errors. + + + + + Returns True if this is a HTTP CONNECT tunnel. + + + + + Object representing the HTTP Response. + + + + + Object representing the HTTP Request. + + + + + Fiddler-internal flags set on the Session. + + TODO: ARCH: This shouldn't be exposed directly; it should be wrapped by a ReaderWriterLockSlim to prevent + exceptions while enumerating the flags for storage, etc + + + + A common use for the Tag property is to store data that is closely associated with the Session. + It is NOT marshalled during drag/drop and is NOT serialized to a SAZ file. + + + + + Contains the bytes of the request body. + + + + + Contains the bytes of the response body. + + + + + IP Address of the client for this session. + + + + + Client port attached to Fiddler. + + + + + IP Address of the server for this session. + + + + + Event object used for pausing and resuming the thread servicing this session + + + + + This event fires at any time the session's State changes. Use with caution due to the potential for performance impact. + + + + + This event fires if this Session automatically yields a new one, for instance, if Fiddler is configured to automatically + follow redirects or perform multi-leg authentication (X-AutoAuth). + + + + + If this session is a Tunnel, and the tunnel's IsOpen property is TRUE, returns TRUE. Otherwise returns FALSE. + + + + + If this session is a Tunnel, returns number of bytes sent from the Server to the Client + + + + + If this session is a Tunnel, returns number of bytes sent from the Client to the Server + + + + + Gets or Sets the HTTP Request body bytes. + Setter adjusts Content-Length header, and removes Transfer-Encoding and Content-Encoding headers. + Setter DOES NOT CLONE the passed array. + Setter will throw if the Request object does not exist for some reason. + Use utilSetRequestBody(sStr) to ensure proper character encoding if you need to use a string. + + + + + Gets or Sets the HTTP Response body bytes. + Setter adjusts Content-Length header, and removes Transfer-Encoding and Content-Encoding headers. + Setter DOES NOT CLONE the passed array. + Setter will throw if the Response object has not yet been created. (See utilCreateResponseAndBypassServer) + Use utilSetResponseBody(sStr) to ensure proper character encoding if you need to use a string. + + + + + When true, this session was conducted using the HTTPS protocol. + + + + + When true, this session was conducted using the FTP protocol. + + + + + Returns TRUE if the Session's HTTP Method is available and matches the target method. + + The target HTTP Method being compared. + true, if the method is specified and matches sTestFor (case-insensitive); otherwise false. + + + + Returns TRUE if the Session's target hostname (no port) matches sTestHost (case-insensitively). + + The host to which this session's host should be compared. + True if this session is targeted to the specified host. + + + + Get the process ID of the application which made this request, or 0 if it cannot be determined. + + + + + Get the Process Info of the application which made this request, or String.Empty if it is not known + + + + + Replaces any characters in a filename that are unsafe with safe equivalents, and trim to 160 characters. + + + + + + + Gets a path-less filename suitable for saving the Response entity. Uses Content-Disposition if available. + + + + + Examines the MIME type, and if ambiguous, returns sniffs the body. + + + + + + Set to true in OnBeforeRequest if this request should bypass the gateway + + + + + Returns the port used by the client to communicate to Fiddler. + + + + + State of session. Note Side-Effects: If setting to .Aborted, calls FinishUISession. If setting to/from a Tamper state, calls RefreshMyInspectors + + + + + Notify extensions if this Session naturally led to another (e.g. due to redirect chasing or Automatic Authentication) + + The original session + The new session created + + + + Returns the path and query part of the URL. (For a CONNECT request, returns the host:port to be connected.) + + + + + Retrieves the complete URI, including protocol/scheme, in the form http://www.host.com/filepath?query. + Or sets the complete URI, adjusting the UriScheme and/or Host. + + + + + Gets or sets the URL (without protocol) being requested from the server, in the form www.host.com/filepath?query. + + + + + DNS Name of the host server targeted by this request. May include IPv6 literal brackets. NB: a port# may be included. + + + + + DNS Name of the host server (no port) targeted by this request. Will include IPv6-literal brackets for IPv6-literal addresses + + + + + Returns the server port to which this request is targeted. + + + + + Returns the sequential number of this session. Note, by default numbering is restarted at zero when the session list is cleared. + + + + + Returns the Address used by the client to communicate to Fiddler. + + + + + Gets or Sets the HTTP Status code of the server's response + + + + + Returns HTML representing the Session. Call Utilities.StringToCF_HTML on the result of this function before placing it on the clipboard. + + TRUE if only the headers should be copied. + A HTML-formatted fragment representing the current session. + + + + Store this session's request and response to a string. + + If true, return only the request and response headers + String representing this session + + + + Store this session's request and response to a string. + + A string containing the content of the request and response. + + + + This method resumes the Session's thread in response to "Continue" commands from the UI + + + + + Set the SessionFlags.Ignore bit for this Session, also configuring it to stream, drop read data, and bypass event handlers. + For a CONNECT Tunnel, traffic will be blindly shuffled back and forth. Session will be hidden. + + + + + Called by an AcceptConnection-spawned background thread, create a new session object from a client socket + and execute the session + + Parameter object defining client socket and endpoint's HTTPS certificate, if present + + + + Call this method to AuthenticateAsServer on the client pipe (e.g. Fiddler itself is acting as a HTTPS server). + If configured, the pipe will first sniff the request's TLS ClientHello ServerNameIndicator extension. + + The default certificate to use + TRUE if a HTTPS handshake was achieved; FALSE for any exceptions or other errors. + + + + Call this function while in the "reading response" state to update the responseBodyBytes array with + the partially read response. + + TRUE if the peek succeeded; FALSE if not in the ReadingResponse state + + + + Prevents the server pipe from this session from being pooled for reuse + + + + + Ensures that, after the response is complete, the client socket is closed and not reused. + Does NOT (and must not) close the pipe. + + + + + Immediately close client and server sockets. Call in the event of errors-- doesn't queue server pipes for future reuse. + + + + + + Closes both client and server pipes and moves state to Aborted; unpauses thread if paused. + + + + + Checks whether this is a WebSocket, and if so, whether it has logged any parsed messages. + + + + + Returns TRUE if this session's State > ReadingResponse, and oResponse, oResponse.headers, and responseBodyBytes are all non-null. Note that + bHasResponse returns FALSE if the session is currently reading, even if a body was copied using the COMETPeek feature + + + + + Save HTTP response body to Fiddler Captures folder. You likely want to call utilDecodeResponse first. + + True if the response body was successfully saved + + + + Save HTTP response body to specified location. You likely want to call utilDecodeResponse first. + + The name of the file to which the response body should be saved. + True if the file was successfully written. + + + + Save the request body to a file. You likely want to call utilDecodeRequest first. + + The name of the file to which the request body should be saved. + True if the file was successfully written. + + + + Save the request and response to a single file. + + The filename to which the session should be saved. + TRUE if only the headers should be written. + + + + Save the request to a file. + The headers' Request Line will not contain the scheme or host, which is probably not what you want. + + The name of the file to which the request should be saved. + TRUE to save only the headers + + + + Save the request to a file. Throws if file cannot be written. + + The name of the file to which the request should be saved. + TRUE to save only the headers. + TRUE to include the Scheme and Host in the Request Line. + + + + Read metadata about this session from a stream. NB: Closes the Stream when done. + + The stream of XML text from which session metadata will be loaded. + True if the Metadata was successfully loaded; False if any exceptions were trapped. + + + + Writes this session's metadata to a file. + + The name of the file to which the metadata should be saved in XML format. + True if the file was successfully written. + + + + Saves the response (headers and body) to a file + + The File to write + TRUE if only heaers should be written + + + + Write the metadata about this Session to a stream. The Stream is left open! + + The Stream to write to + + + + Write the session's Request to the specified stream + + TRUE if only the headers should be be written + TRUE if the Scheme and Host should be written in the Request Line + The Stream to which the request should be written + True if the request was written to the stream. False if the request headers do not exist. Throws on other stream errors. + + + + Write the session's Request to the specified stream + + TRUE if only the headers should be be written + TRUE if the Scheme and Host should be written in the Request Line + TRUE if binary bodies should be encoded in base64 for text-safe transport (e.g. used by Composer drag/drop) + The Stream to which the request should be written + True if the request was written to the stream. False if the request headers do not exist. Throws on other stream errors. + + + + Write the session's Response to the specified stream + + The stream to which the response should be written + TRUE if only the headers should be written + TRUE if the response was written to the stream. False if the response headers do not exist. Throws on other stream errors. + + + + Write the session to the specified stream + + The stream to which the session should be written + TRUE if only the request and response headers should be written + False on any exceptions; True otherwise + + + + Replace HTTP request body using the specified file. + + The file containing the request + True if the file was successfully loaded as the request body + + + + Replace HTTP response headers and body using the specified stream. + + The stream containing the response. + True if the Stream was successfully loaded. + + + + Replace HTTP response headers and body using the specified file. + + The file containing the response. + True if the file was successfully loaded. + + + + Return a string generated from the request body, decoding it and converting from a codepage if needed. Throws on errors. + + A string containing the request body. + + + + Return a string generated from the response body, decoding it and converting from a codepage if needed. Throws on errors. + + A string containing the response body. + + + + Find the text encoding of the request + WARNING: Will not decompress body to scan for indications of the character set + + Returns the Encoding of the requestBodyBytes + + + + Find the text encoding of the response + WARNING: Will not decompress body to scan for indications of the character set + + The Encoding of the responseBodyBytes + + + + Returns true if the absolute request URI contains the specified string. Case-insensitive. + + Case-insensitive string to find + TRUE if the URI contains the string + + + + Removes chunking and HTTP Compression from the Response. Adds or updates Content-Length header. + + Returns TRUE if the response was decoded; returns FALSE on failure, or if response didn't have headers that showed encoding. + + + + Removes chunking and HTTP Compression from the Response. Adds or updates Content-Length header. + + TRUE if error messages should be suppressed. False otherwise. + TRUE if the decoding was successsful. + + + + Removes chunking and HTTP Compression from the Request. Adds or updates Content-Length header. + + Returns TRUE if the request was decoded; returns FALSE on failure, or if request didn't have headers that showed encoding. + + + + Use GZIP to compress the request body. Throws exceptions to caller. + + TRUE if compression succeeded + + + + Use GZIP to compress the response body. Throws exceptions to caller. + + TRUE if compression succeeded + + + + Use DEFLATE to compress the response body. Throws exceptions to caller. + + TRUE if compression succeeded + + + + Use BZIP2 to compress the response body. Throws exceptions to caller. + + TRUE if compression succeeded + + + + Introduces HTTP Chunked encoding on the response body + + The number of chunks to try to create + TRUE if the chunking could be performed. + + + + Perform a string replacement on the request body. Adjusts the Content-Length header if needed. + + The case-sensitive string to search for. + The text to replace. + TRUE if one or more replacements occurred. + + + + Call inside OnBeforeRequest to create a response object and bypass the server. + + + + + Perform a regex-based string replacement on the response body. Adjusts the Content-Length header if needed. + + The regular expression used to search the body. Specify RegEx Options via leading Inline Flags, e.g. (?im) for case-Insensitive Multi-line. + The text or expression used to replace + TRUE if replacements occured + + + + Perform a string replacement on the response body (potentially multiple times). Adjust the Content-Length header if needed. + + String to find (case-sensitive) + String to use to replace + TRUE if replacements occurred + + + + Perform a one-time string replacement on the response body. Adjust the Content-Length header if needed. + + String to find (case-sensitive) + String to use to replace + TRUE for Case-Sensitive + TRUE if a replacement occurred + + + + Replaces the request body with sString. Sets Content-Length header and removes Transfer-Encoding/Content-Encoding. + + The desired request Body as a string + + + + Replaces the response body with sString. Sets Content-Length header and removes Transfer-Encoding/Content-Encoding + + The desired response Body as a string + + + + Add a string to the top of the response body, updating Content-Length. (Call utilDecodeResponse first!) + + The string to prepend + + + + Find a string in the request body. Return its index, or -1. + + Term to search for + Require case-sensitive match? + Location of sSearchFor,or -1 + + + + Find a string in the response body. Return its index, or -1. + + Term to search for + Require case-sensitive match? + Location of sSearchFor,or -1 + + + + Reset the SessionID counter to 0. This method can lead to confusing UI, so use sparingly. + + + + + Create a Session object from two byte[] representing request and response. + + The client data bytes + The server data bytes + + + + Create a Session object from a (serializable) SessionData object + + + + + + Create a Session object from two byte[] representing request and response. This is used when loading a Session Archive Zip. + + The client data bytes + The server data bytes + SessionFlags for this session + + + + Creates a new session and attaches it to the pipes passed as arguments + + The client pipe from which the request is read and to which the response is written. + The server pipe to which the request is sent and from which the response is read. May be null. + + + + Initialize a new session from a given request headers and body request builder data. Note: No Session ID is assigned here. + + NB: If you're copying an existing request, use oRequestHeaders.Clone() + The bytes of the request's body + + + + Copy Constructor. + + Session to clone into a new Session instance + + + + Factory constructor + + + + + + + + + + + + Indexer property into SESSION flags, REQUEST headers, and RESPONSE headers. e.g. oSession["Request", "Host"] returns string value for the Request host header. If null, returns String.Empty + + SESSION, REQUEST or RESPONSE + The name of the flag or header + String value or String.Empty + + + + Simple indexer into the Session's oFlags object; returns null if flag is not present. + + + Returns the string value if the specified flag is present, or null if it is not. + + + + + Called when the Session is ready to begin processing. Eats exceptions to prevent unhandled exceptions on background threads from killing the application. + + Unused parameter (required by ThreadPool) + + + + Current step in the SessionProcessing State Machine + + + + + InnerExecute() implements Fiddler's HTTP Pipeline + + + + + Initiate bi-directional streaming on the RPC connection + + + + + Ensure that the Session's state is >= ss, updating state if necessary + + TargetState + + + + May this Session be resent on a different connection because reading of the response did not succeed? + + TRUE if the entire session may be resent on a new connection + + + + If the response demands credentials and the Session is configured to have Fiddler provide those + credentials, try to do so now. + + TRUE if Fiddler has generated a response to an Auth challenge; FALSE otherwise. + + + + This method will perform obtain authentication credentials from System.NET using a reflection trick to grab the internal value. + It's needed to cope with Channel-Binding-Tokens (CBT). + + This MUST live within its own non-inlined method such that when it's run on an outdated version of the .NET Framework, the outdated + version of the target object triggers a TypeLoadException in such a way that the caller can catch it and warn the user without + killing Fiddler.exe. + + TRUE if we didn't hit any exceptions + + + + Copies process-owner information from a source session to a destination session. Used during handling of AutoRedirects + and auto-Authentications + + + + + + Returns a Kerberos-usable SPN for the target + http://dev.chromium.org/developers/design-documents/http-authentication + "HttpAuthHandlerNegotiate::CreateSPN" + http://blog.michelbarneveld.nl/michel/archive/2009/11/14/the-reason-why-kb911149-and-kb908209-are-not-the-soluton.aspx + + + + + + + Returns the fully-qualified URL to which this Session's response points, or null. + This method is needed because many servers (illegally) return a relative url in HTTP/3xx Location response headers. + + null, or Target URL. Note, you may want to call Utilities.TrimAfter(sTarget, '#'); on the response + + + + Gets a redirect-target from a base URI and a Location header + + + + null, or Target URL. Note, you may want to call Utilities.TrimAfter(sTarget, '#'); + + + + Fiddler can only auto-follow redirects to HTTP/HTTPS/FTP. + + The BASE URL to which a relative redirection should be applied + Response "Location" header + TRUE if the auto-redirect target is allowed + + + + Handles a Response's Redirect if the Session is configured to do so. + + TRUE if a redirect was handled, FALSE otherwise + + + + Check for common mistakes in HTTP Responses and notify the user if they are found. Called only if Linting is enabled. + + + + + Assign a Session ID. Called by ClientChatter when headers are available + + + + + Called only by InnerExecute, this method reads a request from the client and performs tampering/manipulation on it. + + TRUE if there's a Request object and we should continue processing. FALSE if reading the request failed + *OR* if script or an extension changed the session's State to DONE or ABORTED. + + + + + If the executeObtainRequest called failed, we perform cleanup + + + + + Returns TRUE if response is a NTLM or NEGO challenge + + True for HTTP/401,407 with NEGO or NTLM demand + + + + Returns TRUE if response is a Digest, NTLM, or Nego challenge + + True for HTTP/401,407 with Digest, NEGO, NTLM demand + + + + Replace the "ipv*.fiddler "fake" hostnames with the IP-literal equvalents. + + + + + Determines if request host is pointing directly at Fiddler. + + + + + + Echo the client's request back as a HTTP Response, encoding to prevent XSS. + + + + + Send a Proxy Configuration script back to the client. + + + + + Send a Proxy Configuration script back to WinHTTP, so that Fiddler can use an upstream proxy specified + by a script on a fileshare. (WinHTTP only allows HTTP/HTTPS-hosted script files) + + + + + Send the Fiddler Root certificate back to the client + + + + + This method indicates to the client that a secure tunnel was created, + without actually talking to an upstream server. + + If Fiddler's AutoResponder is enabled, and that autoresponder denies passthrough, + then Fiddler itself will always indicate "200 Connection Established" and wait for + another request from the client. That subsequent request can then potentially be + handled by the AutoResponder engine. + + BUG BUG: This occurs even if Fiddler isn't configured for HTTPS Decryption + + + The hostname to use in the Certificate returned to the client + + + + This method adds a Proxy-Support: Session-Based-Authentication header and indicates whether the response is Nego:Type2. + + Returns TRUE if server returned a credible Type2 NTLM Message + + + + This helper evaluates the conditions for client socket reuse. + + + + + + Sends the Response that Fiddler received from the server back to the client socket. + + Should the client and server pipes be tightly-bound together? + True, if the response was successfully sent to the client + + + + Sets up the next Session on these pipes, binding this Session's pipes to that new Session, as appropriate. When this method is called, + the nextSession variable is populated with the new Session, and that object is executed at the appropriate time. + + TRUE if both the client and server pipes should be bound regardless of the serverPipe's ReusePolicy + + + + This object holds Session information as a set of four easily-marshalled byte arrays. + It is serializable, which enables cross-process transfer of this data (as in a drag/drop operation). + (Internally, data is serialized as if it were being stored in a SAZ file) + + + + + Create a SessionData object. + Note: Method must run as cheaply as possible, since it runs on all Drag/Dropped sessions within Fiddler itself. + + + + + + Parameters passed into the AcceptConnection method. + + + + + The Socket which represents the newly-accepted Connection + + + + + The Certificate to pass to SecureClientPipeDirect immediately after accepting the connection. + Normally null, this will be set if the proxy endpoint is configured as a "Secure" endpoint + by AssignEndpointCertificate / ActAsHTTPSEndpointForHostname. + + + + + The DateTime of Creation of this connection + + + + + Unknown + + + + + The new Session is needed to respond to an Authentication Challenge + + + + + The new Session is needed to follow a Redirection + + + + + The new Session is needed to generate a CONNECT tunnel + + + + + Event arguments constructed for the OnStateChanged event raised when a Session's state property changed + + + + + The prior state of this session + + + + + The new state of this session + + + + + Constructor for the change in state + + The old state + The new state + + + + States for the (future) Session-processing State Machine. + + Fun Idea: We can omit irrelevant states from FiddlerCore and thus not have to litter + our state machine itself with a bunch of #if FIDDLERCORE checks... + ... except no, that doesn't work because compiler still cares. Rats. + + + + + + State of the current session + + + + + Object created but nothing's happening yet + + + + + Thread is reading the HTTP Request + + + + + AutoTamperRequest pass 1 (IAutoTamper, OnBeforeRequest script method) + + + + + User can tamper using Fiddler Inspectors + + + + + AutoTamperRequest pass 2 (Only used by IAutoTamper) + + + + + Thread is sending the Request to the server + + + + + Thread is reading the HTTP Response + + + + + AutoTamperResponse pass 1 (Only used by IAutoTamper) + + + + + User can tamper using Fiddler Inspectors + + + + + AutoTamperResponse pass 2 (Only used by IAutoTamper) + + + + + Sending response to client application + + + + + Session complete + + + + + Session was aborted (client didn't want response, fatal error, etc) + + + + + This enumeration provides the values for the Session object's BitFlags field + + + + + No flags are set + + + + + The request originally arrived with a URL specifying the HTTPS protocol. + + + + + The request originally arrived with a URL specifying the FTP protocol. + + + + + Ignore this traffic; do not buffer, store, or call event handlers + + + + + The client pipe was reused + + + + + The server pipe was reused + + + + + The request was transmitted to the server when its headers were complete + + + + + The response was streamed + + + + + The request was generated by Fiddler itself (e.g. the Composer tab) + + + + + The response was generated by Fiddler itself (e.g. AutoResponder or utilCreateResponseAndBypassServer) + + + + + This session was loaded from a .SAZ File + + + + + This session was loaded from some other tool + + + + + This request was sent to an upstream (CERN) gateway proxy + + + + + This is a "blind" CONNECT tunnel for HTTPS traffic + + + + + This is a CONNECT tunnel which decrypts HTTPS traffic as it flows through + + + + + This response was served from a client cache, bypassing Fiddler. Fiddler only "sees" this session because other software reported it to Fiddler + + + + + There was a HTTP Protocol violation in the client's request + + + + + There was a HTTP Protocol violation in the server's response + + + + + Response body was dropped, e.g due to fiddler.network.streaming.ForgetStreamedData or log-drop-response-body flag + + + + + This is a CONNECT tunnel for WebSocket traffic + + + + + This request was sent using the SOCKS protocol + + + + + Request body was dropped, e.g due to log-drop-request-body flag + + + + + The request was to create a RPC tunnel (e.g. on an RPC_OUT_DATA request) + + + + + A SessionTimers object holds timing information about a single Session. + + + + + Log a Read's size and timestamp + + Number of milliseconds since first calling .Read() + Number of bytes returned in this read + + + + Return the ReadTimings as an array. Only one read is counted per millisecond + + + + + + Create a new List and append to it + + + + + + + The time at which the client's HTTP connection to Fiddler was established + + + + + The time at which the request's first Send() to Fiddler completes + + + + + The time at which the request headers were received + + + + + The time at which the request to Fiddler completes (aka RequestLastWrite) + + + + + The time at which the server connection has been established + + + + + The time at which Fiddler begins sending the HTTP request to the server (FiddlerRequestFirstSend) + + + + + The time at which Fiddler has completed sending the HTTP request to the server (FiddlerRequestLastSend). + BUG: Should be named "FiddlerEndRequest". + NOTE: Value here is often misleading due to buffering inside WinSock's send() call. + + + + + The time at which Fiddler receives the first byte of the server's response (ServerResponseFirstRead) + + + + + The time at which Fiddler received the server's headers + + + + + The time at which Fiddler has completed receipt of the server's response (ServerResponseLastRead) + + + + + The time at which Fiddler has begun sending the Response to the client (ClientResponseFirstSend) + + + + + The time at which Fiddler has completed sending the Response to the client (ClientResponseLastSend) + + + + + The number of milliseconds spent determining which gateway should be used to handle this request + (Should be mutually exclusive to DNSTime!=0) + + + + + The number of milliseconds spent waiting for DNS + + + + + The number of milliseconds spent waiting for the server TCP/IP connection establishment + + + + + The number of milliseconds elapsed while performing the HTTPS handshake with the server + + + + + Override of ToString shows timer info in a fancy format + + Timing information as a string + + + + Override of ToString shows timer info in a fancy format + + TRUE if the result can contain linebreaks; false if comma-delimited format preferred + Timing information as a string + + + + Enables High-Resolution timers, which are bad for battery-life but good for the accuracy of timestamps. + See http://technet.microsoft.com/en-us/sysinternals/bb897568 for the ClockRes utility that shows current clock resolution. + NB: Exiting Fiddler reverts this to the default value. + + + + + URLMon Interop Class + + + + + Set the user-agent string for the current process + + New UA string + + + + Query WinINET for the current process' proxy settings. Oddly, there's no way to UrlMkGetSessionOption for the current proxy. + + String of hex suitable for display + + + + Configures the current process to use the system proxy for URLMon/WinINET traffic. + + + + + Configures the current process to use no Proxy for URLMon/WinINET traffic. + + + + + Sets the proxy for the current process to the specified list. See http://msdn.microsoft.com/en-us/library/aa383996(VS.85).aspx + + e.g. "127.0.0.1:8888" or "http=insecProxy:80;https=secProxy:444" + Semi-colon delimted list of hosts to bypass proxy; use <local> to bypass for Intranet + + + + Holds a variety of useful functions used in Fiddler and its addons. + + + + + Create a Session Archive Zip file containing the specified sessions + + The filename of the SAZ file to store + Array of sessions to store + Password to encrypt the file with, or null + TRUE if verbose error dialogs should be shown. + + + + + This is a refactored helper function which writes a single session to an open SAZ file. + + The session to write to the file + The ZIP File + The number of this file + The format string (e.g. "D3") to use when formatting the file number + The HTML String builder to write index information + TRUE to show verbose error dialog information + + + + Reads a Session Archive Zip file into an array of Session objects + + Filename to load + + Loaded array of sessions or null, in case of failure + + + + Reads a Session Archive Zip file into an array of Session objects + + Filename to load + + Loaded array of sessions or null, in case of failure + + + + Ensures a value is within a specified range. + + Type of the value + Current value + Min value + Max value + Returns the provided value, unless it is outside of the specified range, in which case the nearest "fencepost" is returned. + + + + A static byte array containing 0 elements. Use to avoid having many copies of an empty byte[] floating around. + + + + + Queries the user for a filename + + Dialog title + String representing file dialog filter + Filename or null + + + + Queries the user for a filename + + Dialog title + String representing file dialog filter + Initial directory or null + Filename or null + + + + Adds a place to a FileDialog's "Places" collection. + Includes error handling for internal .NET Framework bug. + + Note: CustomPlaces requires SP2 of .NET Framework v2. Attempting to call this method will throw System.MissingMethodException + if the required service pack is not installed. + + + + + + + Queries the user for an OPEN filename + + Dialog title + String representing file dialog filter (e.g. "All files (*.*)|*.*") + Filename or null + + + + Queries the user for an OPEN filename + + Dialog title + String representing file dialog filter + Initial directory or null + Filename or null + + + + Check to see that the target assembly defines a RequiredVersionAttribute and that the current Fiddler instance meets that requirement + + The assembly to test + The "type" of extension for display in error message + TRUE if the assembly includes a requirement and Fiddler meets it. + + + + Typically, a version number is displayed as "major number.minor number.build number.private part number". + + Version required + Version of the binary being tested + Returns 0 if exact match, else greater than 0 if Required version greater than verTest + + + + Shrinks a path string to fit within a certain number of characters, replacing segments with ellipses if needed. + + The Path to compact + Number of characters to shrink to + The compacted string, or the original string if compaction wasn't needed or failed + + + + Convert a full path into one that uses environment variables + + e.g. C:\windows\system32\foo.dll + %WINDIR%\System32\foo.dll + + + + Address the problem where the target "PATH" calls for a directoryname is already a filename + + + + + + + Ensure that the target file does not yet exist. If it does, generates a new filename with an embedded identifier, e.g. out[1].txt instead. + Attempts to ensure filename is creatable; e.g. if a path component needs to be a directory but is a file already, injects [#] into that + path component. + + Candidate filename + New filename which does not yet exist + + + + Ensure that the target path exists and if a file exists there, it is not readonly or hidden. + WARNING: Can throw if target "Filename" calls for a parent directoryname that is already used as a filename by a non-directory. + E.g. EnsureOverwriteable(C:\io.sys\filename.txt); would throw. + + The candidate filename + + + + Writes arrBytes to a file, creating the target directory and overwriting if the file exists. + + Path to File to write. + Bytes to write. + + + + Fills an array completely using the provided stream. Unlike a normal .Read(), this one will always fully fill the array unless the Stream throws. + + The stream from which to read. + The byte array into which the data should be stored. + The count of bytes read. + + + + Create a new byte[] containing the contents of two other byte arrays. + + + + + + + + Returns the Value from a (case-insensitive) token in the header string. Correctly handles double-quoted strings. + Allows comma and semicolon as delimiter. Trailing whitespace may be present. + + Name of the header + Name of the token + Value of the token if present; otherwise, null + + + + Ensures that the target string is iMaxLength or fewer characters + + The string to trim from + The maximum number of characters to return + Up to iMaxLength characters from the "Head" of the string. + + + + Ensures that the target string is iMaxLength or fewer characters, appending ... if truncation occurred + + The string to trim from + The maximum number of characters to return + The string, or up to iMaxLength-1 characters from the "Head" of the string, with \u2026 appeneded. + + + + Returns the "Head" of a string, before and not including a specified search string. + + The string to trim from + The delimiting string at which the trim should end. + Part of a string up to (but not including) sDelim, or the full string if sDelim was not found. + + + + Returns the "Head" of a string, before and not including the first instance of specified delimiter. + + The string to trim from. + The delimiting character at which the trim should end. + Part of a string up to (but not including) chDelim, or the full string if chDelim was not found. + + + + [Deprecated] Ensures that the target string is iMaxLength or fewer characters + + The string to trim from + The maximum number of characters to return + Identical to the method. + Up to iMaxLength characters from the "Head" of the string. + + + + Returns the "Tail" of a string, after (but NOT including) the First instance of specified delimiter. + See also + + The string to trim from. + The delimiting character after which the text should be returned. + Part of a string after (but not including) chDelim, or the full string if chDelim was not found. + + + + Returns the "Tail" of a string, after (but NOT including) the First instance of specified search string. + + + The string to trim from. + The delimiting string after which the text should be returned. + Part of a string after (but not including) sDelim, or the full string if sDelim was not found. + + + + Returns the "Tail" of a string, after (and including) the first instance of specified search string. + + The string to trim from. + The delimiting string at which the text should be returned. + Part of the string starting with sDelim, or the entire string if sDelim not found. + + + + Returns the "Tail" of a string, after (but not including) the Last instance of specified delimiter. + + + The string to trim from. + The delimiting character after which text should be returned. + Part of a string after (but not including) the final chDelim, or the full string if chDelim was not found. + + + + Returns the "Tail" of a string, after (but not including) the Last instance of specified substring. + + + The string to trim from. + The delimiting string after which text should be returned. + Part of a string after (but not including) the final sDelim, or the full string if sDelim was not found. + + + + Strip any IPv6-Literal brackets, needed when creating a Certificate + + + + + + + Determines true if a request with the specified HTTP Method/Verb MUST contain a entity body + + The Method/Verb + TRUE if the HTTP Method MUST contain a request body. + + + + http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-26#section-4.2.2 + + HTTPMethod + TRUE if the method is deemed idempotent + + + + Returns true if a request with the specified HTTP Method/Verb may contain a entity body + + The Method/Verb + TRUE if the HTTP Method MAY contain a request body. + + + + Detects whether string ends in a file extension generally recognized as an image file extension. + Pass lowercase into this function. + + *Lowercase* string + TRUE if string ends with common image file extension + + + + Determines if the specified MIME type is "binary" in nature. + + The MIME type + TRUE if the MIME type is likely binary in nature + + + + Gets a string from a byte-array, stripping a Byte Order Marker preamble if present. + + + This function really shouldn't need to exist. Why doesn't calling .GetString on a string with a preamble remove the preamble??? + + The byte array + The encoding to convert from *if* there's no Byte-order-marker + The string + + + + WARNING: May throw. + Gets an encoding, with proper respect for "utf8" as an alias for "utf-8"; Microsoft products don't support + this prior to 2015-era, but it turns out to be common. We do have a linter elsewhere that reports a warning + if it sees the dashless form. + https://github.com/telerik/fiddler/issues/38 + + Textual name of the encoding + + + + WARNING: Potentially slow. + WARNING: Does not decode the HTTP Response body; if compressed, embedded META or _charset_ will not be checked + Gets (via Headers or Sniff) the provided body's text Encoding. If not found, returns CONFIG.oHeaderEncoding (usually UTF-8). + + HTTP Headers, ideally containing a Content-Type header with a charset attribute. + byte[] containing the entity body. + A character encoding, if one could be determined + + + + Gets (via Headers or Sniff) the Response Text Encoding. Returns CONFIG.oHeaderEncoding (usually UTF-8) if unknown. + Perf: May be quite slow; cache the response + + The session + The encoding of the response body + + + + Set of encodings for which we'll attempt to sniff. (List order matters, I think) + + + + + HtmlEncode a string. + In Fiddler itself, this is a simple wrapper for the System.Web.HtmlEncode function. + The .NET3.5/4.0 Client Profile doesn't include System.Web, so we must provide our + own implementation of HtmlEncode for FiddlerCore's use. + + String to encode + String encoded according to the rules of HTML Encoding, or null. + + + + This function accepts a string and an offset into the string. It reads one or more %XX sequences from the + string converting them into a UTF-8 string based on the input text + + + + + + + + Convert the %-encoded string into a string, interpreting %-escape sequences as UTF-8 characters + + %-encoded string + Unencoded string + + + + Replaces System.Web.HttpUtility.UrlPathEncode(str). + + String to encode as a URL Path + Encoded string + + + + Tokenize a string into tokens. Delimits on unquoted whitespace ; quote marks are dropped unless preceded by \ characters. + Some special hackery to allow trailing slash not escape the final character of the entire input, so that: + prefs set fiddler.config.path.vsplugins "F:\users\ericlaw\VSWebTest\" + ...doesn't end up with a trailing quote. + + The string to tokenize + Are single-quotes allowed to as escapes? + An array of strings + + + + Pretty-print a Hex view of a byte array. Slow. + + The byte array + Number of bytes per line + String containing a pretty-printed array + + + + Pretty-print a Hex view of a byte array. Slow. + + The byte array + Number of bytes per line + The maximum number of bytes to pretty-print + String containing a pretty-printed array + + + + Pretty-print a Hex view of a byte array. Slow. + + The byte array + Number of bytes per line + The maximum number of bytes to pretty-print + Show ASCII text at the end of each line + String containing a pretty-printed array + + + + Print an byte array to a hex string. + Slow. + + Byte array + String of hex bytes, or "null"/"empty" if no bytes provided + + + + Create a string in CF_HTML format + + The HTML string + The HTML string wrapped with a CF_HTML prelude + + + + Returns an integer from the registry, or a default. + + The Registry key in which to find the value. + The registry value name. + Default to return if the registry key is missing or cannot be used as an integer + The retrieved integer, or the default. + + + + Save a string to the registry. Correctly handles null Value, saving as String.Empty + + The registry key into which the value will be written. + The name of the value. + The value to write. + + + + Returns an Float from the registry, or a default. + + Registry key in which to find the value. + The value name. + The default float value if the registry key is missing or cannot be used as a float. + Float representing the value, or the default. + + + + Get a bool from the registry + + The RegistryKey + The Value name + The default value + Returns an bool from the registry, or bDefault if the registry key is missing or cannot be used as an bool. + + + + Maps a MIMEType to a file extension. Note: May hit the registry, so consider the performance implications. + Pass only the TYPE (e.g. use oResponse.MIMEType), to ensure no charset info in the string. + + The MIME Type + A file extension for the type, or .TXT + + + + Return the content type of a target file, or application/octet-stream if unknown. + + A filename, including the extension + + + + + Use the system registry to find the proper MIME-Type for a given file extension. + WARNING: Calling Path.GetExtension may throw on bad input. Use to guard against that. + + Dot-prefixed file extension (e.g. ".js") + Content-Type, or null if one cannot be determined + + + + Determines if we have a complete chunked response body (RFC2616 Section 3.6.1) + + The session object, used for error reporting + The response data stream. Note: We do not touch the POSITION property. + The start of the HTTP body to scan for chunk size info + Returns the start of the final received/partial chunk + End of byte data in stream representing this chunked content, or -1 if error + True, if we've found the complete last chunk, false otherwise. + + + + Takes a byte array and applies HTTP Chunked Transfer Encoding to it + + The byte array to convert + The number of chunks to try to create + The byte array with Chunked Transfer Encoding applied + + + + Removes HTTP chunked encoding from the data in writeData and returns the resulting array. + + Some chunked data + Unchunked data. Throws InvalidDataException on data format errors. + + + + Removes HTTP chunked encoding from the data in writeData and returns the resulting array. + + Array to unchunk + Optional Session (for UI error messages) + TRUE to suppress error messages, FALSE to show alert boxes + Unchunked data. Throws InvalidDataException on data format errors. + + + + Returns TRUE if the Array contains nulls. TODO: Extend to check for other chars which are clearly non-Unicode + + + + + + + Implements a BlockList for "unknown" encodings that the utilDecode* functions cannot handle + + Transfer-Encoding + Content-Encoding + TRUE if any encoding is known to be unsupported + + + + Removes one or more encodings in the proper order to reconstruct the unencoded body. + If removing Transfer-Encoding and Content-Encoding, ALWAYS remove Transfer-Encoding first. + + The list of encodings in the order that they were applied + RFC2616: If multiple encodings have been applied to an entity, the content codings MUST be listed in the order in which they were applied. + Should unchunking be permitted (TRUE for Transfer-Encoding, FALSE for Content-Encoding) + The bytes of the body + + + + Content-Encodings + + + + + + + + + + Remove all encodings from arrBody, based on those specified in the supplied HTTP headers; DOES NOT MODIFY HEADERS. + Throws on errors. + + *Readonly* headers specifying what encodings are applied + In/Out array to be modified + + + + Remove all encodings from arrBody, based on those specified in the supplied HTTP headers; + DOES NOT MODIFY HEADERS. DOES NOT HANDLE UNSUPPORTED ENCODINGS WELL. + Throws on errors. + + *Readonly* headers specifying what encodings are applied + In/Out array to be modified + FALSE to show dialog boxes on errors, TRUE to remain silent + + + + Attempts to remove all Content-Encodings from a HTTP body. May throw if content is malformed. + MODIFIES HEADERS. + + Headers for the body; Content-Encoding and Content-Length will be modified + Reference to the body array + FALSE if error dialog boxes should be shown + TRUE if the body was decoded completely. + + + + Decompress an array compressed using an Zlib DEFLATE stream. Not a HTTP Encoding; it's used internally in the PNG format. + + The array to expand + byte[] of decompressed data + + + + GZIPs a byte-array + + Input byte array + byte[] containing a gzip-compressed copy of writeData[] + + + + Requires Win8+ + Decompress Xpress|Raw blocks used by WSUS, etc. + Introduction to the API is at http://msdn.microsoft.com/en-us/library/windows/desktop/hh920921(v=vs.85).aspx + + + + + + + GZIP-Expand function which shows no UI and will throw on error + + TRUE if you want to use Xceed to decompress; false if you want to use System.IO + byte[] to decompress + A decompressed byte array, or byte[0]. Throws on errors. + + + + Expands a GZIP-compressed byte array + + The array to decompress + byte[] containing an un-gzipped copy of compressedData[] + + + + Compress a byte array using RFC1951 DEFLATE + + Array to compress + byte[] containing a DEFLATE'd copy of writeData[] + + + + UnDeflate function which shows no UI and will throw on error + + TRUE if you want to use Xceed to decompress; false if you want to use System.IO + byte[] to decompress + A decompressed byte array, or byte[0]. Throws on errors. + + + + Decompress a byte array that was compressed using Microsoft's Xpress Raw format. + Available only on Windows 8+ + + Array to decompress + byte[] of decompressed data + + + + Decompress a byte array that was compressed using RFC1951 DEFLATE + + Array to decompress + byte[] of decompressed data + + + + Compress a byte[] using the bzip2 algorithm + + Array to compress + byte[] of data compressed using bzip2 + + + + Decompress an array compressed using bzip2 + + The array to expand + byte[] of decompressed data + + + + Decompress an array compressed using bzip2 + + The array to expand + byte[] of decompressed data + + + + Try parsing the string for a Hex-formatted int. If it fails, return false and 0 in iOutput. + + The hex number + The int value + TRUE if the parsing succeeded + + + + Returns TRUE if two ORIGIN (scheme+host+port) values are functionally equivalent. + + The first ORIGIN + The second ORIGIN + The default port, if a port is not specified + TRUE if the two origins are equivalent + + + + This function cracks a sHostPort string to determine if the address + refers to a "local" site + + The string to evaluate, potentially containing a port + True if the address is local + + + + This function cracks a sHostPort string to determine if the address + refers to the local computer + + The string to evaluate, potentially containing a port + True if the address is 127.0.0.1, 'localhost', or ::1 + + + + Determines if the specified Hostname is a either 'localhost' or an IPv4 or IPv6 loopback literal + + Hostname (no port) + TRUE if the hostname is equivalent to localhost + + + + This function cracks the Hostname/Port combo, removing IPV6 brackets if needed + + Hostname/port combo, like www.foo.com or www.example.com:8888 or [::1]:80 + The hostname, minus any IPv6 literal brackets, if present + Port #, 80 if not specified, -1 if corrupt + + + + Given a string/list in the form HOSTNAME:PORT#;HOSTNAME2:PORT2#, this function returns the FIRST IPEndPoint. Defaults to port 80 if not specified. + Warning: DNS resolution is slow, so use this function wisely. + + HOSTNAME:PORT#;OPTHOST2:PORT2# + An IPEndPoint or null + + + + Given a string/list in the form HOSTNAME:PORT#;HOSTNAME2:PORT2#, this function returns all IPEndPoints for ALL listed hosts. Defaults to port 80 if not specified. + Warning: DNS resolution is slow, so use this function wisely. + + HOSTNAME:PORT#;OPTHOST2:PORT2# + An array of IPEndPoints or null if no results were obtained + + + + This function attempts to be a ~fast~ way to return an IP from a hoststring that contains an IPv4/6-Literal. + + Hostname + IPAddress, or null, if the sHost wasn't an IP-Literal + + + + Launch the user's browser to a hyperlink. This function traps exceptions and notifies the user via UI dialog. + + The URL to ShellExecute. + TRUE if the ShellExecute call succeeded. + + + + Wrapper for Process.Start that shows error messages in the event of failure. + + Fully-qualified filename to execute. + Command line parameters to pass. + TRUE if the execution succeeded. FALSE if the execution failed. An error message will be shown for any error except the user declining UAC. + + + + Run an executable and wait for it to exit, notifying the user of any exceptions. + + Fully-qualified filename of file to execute. + Command-line parameters to pass. + TRUE if the execution succeeded. FALSE if the error message was shown. + + + + Run an executable, wait for it to exit, and return its output as a string. + NOTE: Uses CreateProcess, so you cannot launch applications which require Elevation. + + Fully-qualified filename of file to Execute + Command-line parameters to pass + Exit code returned by the executable + String containing the standard-output of the executable + + + + Copy a string to the clipboard, notifying the user of any exceptions + + The text to copy + TRUE if the copy succeeded + + + + Copy an object to the clipboard, notifying the user of any exceptions + + The object to copy + True if successful + + + + This method prepares a string to be converted into a regular expression by escaping special characters and CONVERTING WILDCARDS. + This method was originally meant for parsing WPAD proxy script strings. + + You typically should use the Static RegEx.Escape method for most purposes, as it doesn't convert "*" into ".*" + + + + + + + + + Determines whether the arrData array STARTS WITH with the supplied arrMagics bytes. Used for Content-Type sniffing. + + The data, or null + The MagicBytes to look for + TRUE if arrData begins with arrMagics + + + + Determines whether the arrData array begins with the supplied sMagics ASCII text. Used for Content-Type sniffing. + + The data, or null + The ASCII text to look for + TRUE if arrData begins with sMagics (encoded as ASCII octets) + + + + Is this HTTPMethod used for RPC-over-HTTPS? + + + + + Determine if a given byte array has the start of a HTTP/1.* 200 response. + Useful primarily to determine if a CONNECT request to a proxy returned success. + + + + + + + Determine if a given byte array has the start of a HTTP/1.* 407 response. + Useful primarily to determine if a CONNECT request to a proxy returned an auth challenge + + + + + + + For a given process name, returns a bool indicating whether this is a known browser process name. + + The Process name (e.g. "abrowser.exe") + Returns true if the process name starts with a common browser process name (e.g. ie, firefox, etc) + + + + Ensure that a given path is absolute, if not, applying the root path. + WARNING: This function only works as well as Path.IsPathRooted, which returns "True" for things like "/NoDriveSpecified/fuzzle.txt" + A better approach would be to look at the internal Path.IsRelative method + + + + + + + + If sFilename is absolute, returns it, otherwise, combines the leaf filename with local response folders hunting for a match. + Trims at the first ? character, if any + + Either a fully-qualified path, or a leaf filename + File path + + + + Format an Exception message, including InnerException message if present. + + + + + + + Get a TickCount (milliseconds since system start) as an unsigned 64bit value. On Vista+, uses the GetTickCount64 API that won't rollover, + but on XP, this unsigned wrapper moves the rollover point to 49 days of uptime. + + Number of ms since Windows started + + + + Returns TRUE if the user is running Elevated. Requires WinXP to Win8 + + TRUE if the user is an Admin and the process is Elevated + + + + Returns a succinct version of Environment.OSVersion.VersionString + + + + + + Returns TRUE on *Windows* (not Mono) when OS Version is Win8+ (NT6.2+) + + + + + + + Duplicate a byte array, replacing null with byte[0]. + Doing this instead of .Clone() because it better handles nulls and it may be faster. + + The array to copy + The new array. + + + + Warning: This will throw if FIPS mode is enabled + + + + + + + Returns TRUE if the array is null or contains 0 bytes + + byte[] to test + + + + + Returns TRUE if the string is non-empty and not of the pattern "[#123]" + Necessary because SAZ-saving logic autogenerates comments of that form + + + + + + + + + + True if ClientChatter is non-null and its headers are non-null + + + + True if ClientChatter is non-null and its headers are non-null + + + True if ClientChatter is non-null and its headers are non-null + + + + Return a multi-line string describing the NetworkInterfaces[] + + + + + + Checks a DLL's filename for signals that it doesn't contain extensions. + This hack is only needed because I wasn't smart enough to require that the assembly be named something like Fiddler.* in the original design. + + DLL filename + TRUE if we should skip this assembly during enumeration + + + + Garbage collect and, if possible, compact the Large Object heap + + + + + Common functions we'll want to use on Strings. Fiddler makes extensive use of strings which + should be interpreted in a case-insensitive manner. + + WARNING: Methods assume that the calling object is not null, which is lame for reliability but arguably good for performance. + + + + + The WebSocket class represents a "tunnel" through which WebSocket messages flow. + The class' messages may be deserialized from a SAZ file. + + + + + Should this WebSocket Tunnel parse the WS traffic within into individual messages? + + + + + Is this WebSocket open/connected? + + + + + Writes all of the messages stored in this WebSocket to a stream. + + + + + + + Approximate size of the data of the stored messages, used for memory tracking + + + + + + Read headers from the stream. + + The Stream from which WebSocketSerializationHeaders should be read + The Array of headers, or String[0] + + + + Boolean that determines whether the WebSocket tunnel tracks messages. + + + + + Number of bytes received from the client + + + + + Number of bytes received from the server + + + + + Returns number of bytes sent from the Server to the Client on this WebSocket + + + + + Returns number of bytes sent from the Client to the Server on this WebSocket + + + + + Creates a "detached" WebSocket which contains messages loaded from the specified stream + + Session to which the WebSocket messages belong + The Stream containing messages, which will be closed upon completion + + + + This factory method creates a new WebSocket Tunnel and executes it on a background (non-pooled) thread. + + The Session containing the HTTP CONNECT request + + + + Creates a WebSocket tunnel. External callers instead use the CreateTunnel static method. + + The session for which this tunnel was initially created. + The client pipe + The server pipe + + + + This function keeps the Tunnel/Thread alive until it is signaled that the traffic is complete + + + + + Performs cleanup of the WebSocket instance. Call this after the WebSocket closes normally or after abort/exceptions. + + + + + Executes the WebSocket tunnel on a background thread + + + + + Interface Method + Close the WebSocket and signal the event to let its service thread die. Also called by oSession.Abort() + WARNING: This should not be allowed to throw any exceptions, because it will do so on threads that don't + catch them, and this will kill the application. + + + + + When we get a buffer from the client, we push it into the memory stream + + + + + When we get a buffer from the server, we push it into the memory stream + + + + + This method parses the data in strmClientBytes to extact one or more WebSocket messages. It then sends each message + through the pipeline. + + + + This method parses the data in strmServerBytes to extact one or more WebSocket messages. It then sends each message + through the pipeline to the client. + + + + Called when we have received data from the local client. + + The result of the asynchronous operation. + + + Called when we have received data from the remote host. Incoming data will immediately be forwarded to the local client. + The result of the asynchronous operation. + + + + This enumeration provides the values for the WebSocketMessage object's BitFlags field + + + + + No flags are set + + + + + Message was eaten ("dropped") by Fiddler + + + + + Message was generated ("injected") by Fiddler itself + + + + + Fragmented Message was reassembled by Fiddler + + + + + Breakpointed + + + + + A WebSocketMessage stores a single frame of a single WebSocket message + http://tools.ietf.org/html/rfc6455 + + + + + 3 bits frame-rsv1,frame-rsv2,frame-rsv3 + + + + + Unmasks the first array into the third, using the second as a masking key. + + + + + + + + Masks the first array's data using the key in the second + + The data to be masked + A 4-byte obfuscation key, or null. + + + + Replaces the WebSocketMessage's payload with the specified string, masking if needed. + + + + + + Copies the provided byte array over the WebSocketMessage's payload, masking if needed. + + + + + + Masks the provided array (if necessary) and assigns it to the WebSocketMessage's payload. + + New array of data + + + + Return the WebSocketMessage's payload as a string. + + + + + + Copy the WebSocketMessage's payload into a new Byte Array. + + A new byte array containing the (unmasked) payload. + + + + Is this a Request message? + + + + + The WebSocketTimers collection tracks the timestamps for this message + + + + + The raw payload data, which may be masked. + + + + + The four-byte payload masking key, if any + + + + + The type of the WebSocket Message's frame + + + + + Serialize this message to a stream + + + + + + Add the content of the subequent continuation to me. + + + + + + Timers + + + + + When was this message read from the sender + + + + + When did transmission of this message to the recipient begin + + + + + When did transmission of this message to the recipient end + + + + + Return the timers formatted to be placed in pseudo-headers used in saving the WebSocketMessage to a stream (SAZ). + NOTE: TRAILING \r\n is critical. + + + + + + The WinHTTPAutoProxy class is used to handle upstream gateways when the client was configured to use WPAD or an Proxy AutoConfig (PAC) script. + + + + + Indication as to whether AutoProxy information is valid. 0=Unknown/Enabled; 1=Valid/Enabled; -1=Invalid/Disabled + + + + + Get the text of the file located at a specified file URI, or null if the URI is non-file or the file is not found. + + + + + Returns a string containing the currently selected autoproxy options + + + + + + Get WPAD-discovered URL for display purposes (e.g. Help> About); note that we don't actually use this when determining the gateway, + instead relying on the WinHTTPGetProxyForUrl function to do this work for us. + + A WPAD url, if found, or String.Empty + + + + Return gateway endpoint for requested Url. TODO: Add caching layer on our side? TODO: Support multiple results? + + The URL for which the gateway should be determined + The Endpoint of the Gateway, or null + TRUE if WinHttpGetProxyForUrl succeeded + + + + Close the WinHTTP Session handle + + + + + Set to true to send Negotiate creds when challenged to download the script + + + + + Note: Be sure to use the same hSession to prevent redownload of the proxy script + + + + + Wrapper for WinINET cache APIs. + + + + + Clear all HTTP Cookies from the WinINET Cache + + + + + Clear all files from the WinINET Cache + + + + + Delete all permanent WinINET cookies for sHost; won't clear memory-only session cookies. Supports hostnames with an optional leading wildcard, e.g. *example.com. NOTE: Will not work on VistaIE Protected Mode cookies. + + The hostname whose cookies should be cleared + + + + Clear the Cache items. Note: May be synchronous, may be asynchronous. + + TRUE if cache files should be cleared + TRUE if cookies should be cleared + + + + For PInvoke: Contains information about an entry in the Internet cache + + + + + Wrapper for WinINET proxy configuration APIs + + + + + Ignore WinINET "no autoproxy unticks box" optimization + + + + + True if the proxy should be bypassed for dotless hostnames. + NOTE: Simply looks at the bypassList string to see if it contains a LOCAL rule. + + + + + Gathers proxy information from a named connection. + + Pass DefaultLAN to look for the "null" connection + Proxy info, or null + + + + Fills this WinINETProxyInfo instance with settings from specified WinINET connection. + + Name of the connection. Pass NULL for LAN connection. + TRUE if the settings were successfully retrieved. + + + + Sets WinINET proxy settings for specified connection to those specified in this WinINETProxy instance. + + Name of the connection. Pass NULL for LAN connection. + + + + The RASInfo class is used to enumerate Network Connectoids so Fiddler can adjust proxy configuration for all connectoids, not just the DefaultLAN + + + + + Ask RAS for the list of network connectoids. We'll always add "DefaultLAN" to this list as well. + + + +
+
diff --git a/Libs/DotNet4/FiddlerCore4.dll b/Libs/DotNet4/FiddlerCore4.dll index 7cb1cb1c0dad8d313fa312662e3b498c94ca0f8a..192cbbf80c03ead464d9645511a59f4ef7706030 100644 GIT binary patch literal 578416 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 literal 354304 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𞈌p1&e1_9W94bPQk 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%0A5(sb!wI|sj!4KI}sSYh}5lzzyjX~)c5%W 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 diff --git a/ProcessProxifier/Core/ProcessesListManager.cs b/ProcessProxifier/Core/ProcessesListManager.cs index 1f84126..012230c 100644 --- a/ProcessProxifier/Core/ProcessesListManager.cs +++ b/ProcessProxifier/Core/ProcessesListManager.cs @@ -32,6 +32,11 @@ public static AsyncObservableCollection UpdateProcesses( foreach (var systemProcess in newSystemProcesses) { var path = systemProcess.GetPath(); + if(string.IsNullOrWhiteSpace(path)) // TODO: improve + { + continue; + } + var newProcess = new Process { Name = systemProcess.ProcessName, diff --git a/ProcessProxifier/Core/ProxyRouter.cs b/ProcessProxifier/Core/ProxyRouter.cs index 69e28a7..29a5f40 100644 --- a/ProcessProxifier/Core/ProxyRouter.cs +++ b/ProcessProxifier/Core/ProxyRouter.cs @@ -1,5 +1,7 @@ -using System.Linq; +using System; +using System.Linq; using System.Net.Security; +using System.Text; using System.Threading; using Fiddler; using ProcessProxifier.Models; @@ -19,7 +21,6 @@ public class ProxyRouter public AsyncObservableCollection RoutedConnectionsList { set; get; } - // Public Methods (2)  public void Shutdown() { @@ -44,22 +45,55 @@ public void Start() FiddlerCoreStartupFlags.MonitorAllConnections | FiddlerCoreStartupFlags.CaptureFTP); } - // Private Methods (3)  - void beforeRequest(Session oSession) + + private static void onValidateServerCertificate(object sender, ValidateServerCertificateEventArgs e) + { + if (SslPolicyErrors.None == e.CertificatePolicyErrors) + return; + + e.ValidityState = CertificateValidity.ForceValid; + } + + private static void setBasicAuthenticationHeaders(Session oSession, string userCredentials) + { + var base64UserCredentials = Convert.ToBase64String(Encoding.UTF8.GetBytes(userCredentials)); + oSession.RequestHeaders["Proxy-Authorization"] = $"Basic {base64UserCredentials}"; + } + + private void beforeRequest(Session oSession) { var process = ProcessesList.FirstOrDefault(p => p.Pid == oSession.LocalProcessID && p.IsEnabled); if (process == null) + { return; + } - var useDefaultServerInfo = string.IsNullOrWhiteSpace(process.ServerInfo.ServerIP); + var processServerInfo = process.ServerInfo; + var useDefaultServerInfo = string.IsNullOrWhiteSpace(processServerInfo.ServerIP); if (useDefaultServerInfo) { - oSession["X-OverrideGateway"] = (DefaultServerInfo.ServerType == ServerType.Socks ? "socks=" : "") + DefaultServerInfo.ServerIP + ":" + DefaultServerInfo.ServerPort; + var serverType = DefaultServerInfo.ServerType == ServerType.Socks ? "socks=" : ""; + oSession["X-OverrideGateway"] = $"{serverType}{DefaultServerInfo.ServerIP}:{DefaultServerInfo.ServerPort}"; + + if (!string.IsNullOrWhiteSpace(DefaultServerInfo.Username) && + !string.IsNullOrWhiteSpace(DefaultServerInfo.Password)) + { + var userCredentials = $"{DefaultServerInfo.Username}:{DefaultServerInfo.Password}"; + setBasicAuthenticationHeaders(oSession, userCredentials); + } } else { - oSession["X-OverrideGateway"] = (process.ServerInfo.ServerType == ServerType.Socks ? "socks=" : "") + process.ServerInfo.ServerIP + ":" + process.ServerInfo.ServerPort; + var serverType = processServerInfo.ServerType == ServerType.Socks ? "socks=" : ""; + oSession["X-OverrideGateway"] = $"{serverType}{processServerInfo.ServerIP}:{processServerInfo.ServerPort}"; + + if (!string.IsNullOrWhiteSpace(processServerInfo.Username) && + !string.IsNullOrWhiteSpace(processServerInfo.Password)) + { + var userCredentials = $"{processServerInfo.Username}:{processServerInfo.Password}"; + setBasicAuthenticationHeaders(oSession, userCredentials); + } } RoutedConnectionsList.Add(new RoutedConnection @@ -76,13 +110,5 @@ private string getProcessName(Session oSession) var process = ProcessesList.FirstOrDefault(x => x.Pid == oSession.LocalProcessID); return process == null ? oSession.LocalProcessID.ToString(CultureInfo.InvariantCulture) : process.Name; } - - static void onValidateServerCertificate(object sender, ValidateServerCertificateEventArgs e) - { - if (SslPolicyErrors.None == e.CertificatePolicyErrors) - return; - - e.ValidityState = CertificateValidity.ForceValid; - } } } \ No newline at end of file diff --git a/ProcessProxifier/MainWindow.xaml b/ProcessProxifier/MainWindow.xaml index a36b683..df77a99 100644 --- a/ProcessProxifier/MainWindow.xaml +++ b/ProcessProxifier/MainWindow.xaml @@ -5,7 +5,7 @@ xmlns:b="clr-namespace:ProcessProxifier.Behaviors" xmlns:c="clr-namespace:ProcessProxifier.Converters" xmlns:vm="clr-namespace:ProcessProxifier.ViewModels" - Title="ProcessProxifier V1.2" Height="615" Width="731"> + Title="ProcessProxifier V1.3" Height="715" Width="731"> @@ -21,8 +21,8 @@