Showing posts with label FiddlerCore. Show all posts
Showing posts with label FiddlerCore. Show all posts

Tuesday, March 31, 2015

FiddlerCore - ByPass Intranet Traffic

Found a nice trick to bypass intranet traffic while using fiddler core.

CONFIG.sHostsThatBypassFiddler = "<local>";

Wednesday, November 5, 2014

Using FiddlerCore on Remote devices

Some time back, I wrote a blog on FiddlerCore http://www.anujchaudhary.com/2013/05/automated-website-testing-with.html
I had created a windows application using FiddlerCore and was interested in using it on remote devices like WindowsPhone/iOS/Android/etc
After some investigations, I was able to achieve this goal by doing the following:

Create Fiddler Root certificate using CertMaker.dll and BCMakeCert.dll


CertMaker.dll uses the BouncyCastle C# library (BCMakeCert.dll) to generate new certificates which are compatible with iOS devices.
Make sure these dlls are in the folder where your executable and FiddlerCore.dll live.
The root certificate is created in the below method
public void MakeCert()
        {
            if (!CertMaker.rootCertExists())
            {
                if (!CertMaker.createRootCert())
                {
                    throw new Exception("Unable to create cert for FiddlerCore.");
                }
                else
                {
                    Logger.Log("Created Fiddler Root Cert for Https Inspection");
                }
            }
            X509Store certStore = new X509Store(StoreName.Root,StoreLocation.LocalMachine);
            certStore.Open(OpenFlags.ReadWrite);
            try
            {
                certStore.Add(CertMaker.GetRootCertificate());
            }
            finally
            {
                certStore.Close();
            }
        }

Start Fiddler Application on a well-known port


Start Fiddler Application on a well-known port which will allow inbound connections e.g. 9999
FiddlerApplication.Startup(9999, FiddlerCoreStartupFlags.Default);

Use FiddlerCoreStartupFlags.Default


Start FiddlerApplication with FiddlerCoreStartupFlags.Default. This will ensure that remote connections are allowed and https decryption is enabled
FiddlerApplication.Startup(9999, FiddlerCoreStartupFlags.Default);

Enable Echo Service

Echo service needs to be enabled so that the root certificate can be downloaded and installed on the remote devices for https inspection. This is done by setting the below preference
FiddlerApplication.Prefs.SetBoolPref("fiddler.echoservice.enabled", true); 

Configure proxy on Remote devices

1.       On the remote device, go to http://<local machine IP>:9999 and download and install the Fiddler Root certificate
2.       On the remote device, go to network settings and add/change the proxy to local machine IP and port 9999
3.       Now you will be able to dogfood new stuff on the remote device and view metrics/logs on the local windows machine.
 Once the above steps are done, everything else is similar to what’s described in http://www.anujchaudhary.com/2013/05/automated-website-testing-with.html

Enjoy!

Thursday, May 9, 2013

Automated Website Testing with FiddlerCore

There are various UI automation tools to automate your website and validate the UI. However, it’s also important to capture and validate the network traffic. This can be done using FiddlerCore. You can also perform various types of testing like low bandwidth testing, mobile device testing and localization testing using FiddlerCore.

You can download FiddlerCore from http://fiddler2.com/fiddlercore

To start FiddlerApplication, call FiddlerApplication.Startup(0, FiddlerCoreStartupFlags.Default);

Enable HTTPS Decryption

You can enable HTTPS Decryption while starting Fiddler Application

 FiddlerApplication.Startup(0, FiddlerCoreStartupFlags.DecryptSSL);

 You also need to create and import Root cert for Fiddler

 if (!CertMaker.rootCertExists())
{
            if (!CertMaker.createRootCert())
            {
                        throw new Exception("Unable to create cert for FiddlerCore.");
            }
}

X509Certificate2 oRootCert = CertMaker.GetRootCertificate();
X509Store certStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadWrite);

try
{
            certStore.Add(oRootCert);
}
finally
{
            certStore.Close();
}


Capture Network Traffic

You can capture the network traffic in a list and then perform various validations like checking for response time, response string, etc. for the captured sessions.
List<Session> _sessions = new List<Session>();

FiddlerApplication.BeforeRequest += delegate(Session oSession)

            {

                Monitor.Enter(_sessions);

                _sessions.Add(oSession);

                Monitor.Exit(_sessions);

            };


Simulate Modem Speeds


You can add a delay of specific milliseconds per KB uploaded as well as for per KB downloaded. This simulates a slow network and can be used to test scenarios where specific requests shouldn’t be made on a slow network. For example, Yahoo mail downloads an image on good network but doesn’t on a slow network.

High Bandwidth

 Low Bandwidth
 
FiddlerApplication.BeforeRequest += delegate(Session oSession)

            {

                if (!_applyrule) return;

                oSession["request-trickle-delay"] = sendDelayinMillisecPerKb;

                oSession["response-trickle-delay"] = receiveDelayinMillisecPerKb;

            };

Mobile Device Testing


Most websites rely on the User Agent string to determine if a request is coming from a mobile device. Hence to test the behavior of a website on a mobile device, corresponding User Agent is set using the Fiddler proxy. For example, when you send the user agent for WP 7.5 i.e. Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Microsoft; XDeviceEmulator) , Gmail looks different than that on IE 9

Internet Explorer 9

 
Windows Phone 7.5

 
FiddlerApplication.BeforeRequest += delegate(Session oSession)

            {

                if (_applyrule)

                {

                    oSession.oRequest["User-Agent"] = userAgent;

                }

            };

Localization Testing


Localization testing can be performed by requesting the content in a specific language. This is done by modifying the Accept-Language header using the Fiddler proxy. For example, Hotmail looks the opposite for English and Hebrew Language.

English (en-US)
 

Hebrew (he)

 
FiddlerApplication.BeforeRequest += delegate(Session oSession)

            {

                if (_applyrule)

                {

                    oSession.oRequest["Accept-Language"] = languageAbbreviation;

                }

            };