Debugger Tools: Fiddler Web Debugging Proxy

Er zijn zo "tools" dat je in het dagelijkse leven (als software ontwikkelaar / beheerder) altijd beschikbaar MOET hebben. Ze brengen zo vaak net dat cruciale stukje informatie naar boven om een vreemd probleem snel te kunnen oplossen.

Er zijn drie tools die - in mijn geval - uren of zelfs dagen tijd kunnen opleveren:

  • Fiddler
  • Process Monitor
  • ILSpy

Alle drie gewoon gratis te downloaden - maar tegelijk ongelooflijk waardevol.

Verbazend is het ook dat ik steeds weer mensen ontmoet met een probleem dat dankzij één of meerdere van deze drie binnen het half uur kan opgelost zijn. Daarom denk ik dat het essentieel is deze tools wat beter te leren kennen.

Fiddler

Fiddler is een tool die momenteel door Telerik wordt ontwikkeld. Origineel is het ontwikkeld door "Eric Lawrence" die op dat moment bij Microsoft werkte in het team dat Internet Explorer ontwikkelde.

Later is Fiddler, samen met Eric Lawrence, naar Telerik gegaan waar het nu nog steeds vrij te downloaden is, in versie 4 ondertussen.

Wat doet Fiddler?

Heel kort gezegd kan je met fiddler al het verkeer inspecteren dat vanaf jouw computer naar webservers gaat. Bijvoorbeeld, als je naar google zou surfen terwijl Fiddler op staat, dan zul je zien dat jouw browser een HTTP request stuurt naar www.google.com en welk antwoord de google webserver daarop geeft (normaal een 304 redirect naar de https versie van google).

Alle HTTP en HTTPS requests en responses worden bekeken en je kan ze uitgebreid analyseren en eventueel zelfs opnieuw sturen (waarschijnlijk met enkele kleine aanpassingen in de eigenlijke request.

Dit is handig als je het verkeer dat wordt gegenereerd wanneer je een website bezoekt wilt analyseren: bijvoorbeeld op je eigen website wil je kijken of er geen onnodige zaken worden gedownload. Maar dergelijke scenario's worden tegenwoordig eigenlijk beter behandeld met de interne "developer tools" die bij alle moderne browsers is ingebakken.

Waar Fiddler écht van pas komt is als je applicaties hebt die niet in de browser draaien, maar wel met een achterliggende webservice communiceren. Een mooi voorbeeld zijn applicaties op je smartphone, zij communiceren nagenoeg ALTIJD met hun "servers" via HTTP of (laat ons hopen) HTTPS.

Als je zelf applicaties ontwikkeld, of je moet er troubleshooten die op zo'n manier werken, dan kan fiddler dingen naar boven brengen die door de applicatie zelf volledig worden verborgen (bijvoorbeeld: de applicatie gaat naar de foute URL, de achterliggende server is niet bereikbaar, een proxy houdt dingen tegen, ...).

Het kan een heel obscuur probleem plots érg helder maken, omdat je op een eenvoudige manier een duidelijke beeld krijgt van wat de applicatie precies aan het doen is.

Hoe werkt Fiddler?

Eigenlijk is Fiddler een proxy server die je lokaal draait. Een proxy server gaat jouw HTTP request ontvangen en doorsturen naar de bestemmeling. Het is een soort doorgeefluik tussen jou en het internet. Thuis heb je meestal geen HTTP proxy (meer) nodig, maar veel bedrijven leggen bijvoorbeeld zo'n proxy op.

Fiddler werkt ook zo: als je Fiddler opstart gaat hij automatisch jouw browser configureren dat alle verkeer via hem moet gaan (hij gaat luisteren op localhost:8080 of dergelijks). Voor de rest merk je normaal (bij HTTP) niks van Fiddler maar je ziet wel meteen de requests wanneer ze worden uitgevoerd en of de server ze succesvol heeft kunnen behandelen.

Bij HTTPS is het iets moeilijker natuurlijk, want per definitie beschermt HTTPS je tegen applicaties die het verkeer tussen jou en een web-adres afsluisteren. Fiddler gaat hier eigenlijk een "man-in-the-middle" uitvoeren:

Jouw HTTPS request komt aan bij fiddler, fiddler biedt jou een eigen lokaal SSL certificaat aan en na die handshake krijgt Fiddler jouw request. Omdat Fiddler het certificaat heeft bezorgd kan Fiddler jouw request ook decoderen. Daarna logt hij de request en dan wordt die doorgestuurd door Fiddler naar de eigenlijke server (opnieuw gecodeerd maar nu met het certificaat van de échte server).

Dit heeft als gevolg dat je browser (of een applicatie) waarschuwingen zal geven omdat het certificaat van Fiddler uiteraard niet vertrouwd is. Als een applicatie op zo'n moment géén waarschuwingen geeft en je ziet al het verkeer in Fiddler dan wéét je dat die applicatie ofwel geen HTTPS gebruikt ofwel een loopje neemt met certificaat validatie.

Mobile Apps

Voor applicaties op je smartphone of tablet kan je Fiddler ook gebruiken. Je moet dan wel even zoeken naar de instellingen in het toestel om een proxy server in te stellen. Daar stel je dan het ip adres in van de computer waar Fiddler draait. Op die manier wordt al het HTTP(S) verkeer vanop je telefoon (als die op jouw WiFi zit natuurlijk) door Fiddler gedraaid.

Use Cases

De Use Cases voor Fiddler zijn vrij uitgebreid:

  • Debuggen van een applicatie dat van een webservice gebruikt maakt
  • Performantie testen van een website
  • Onderzoeken of je computer eventueel malware heeft dat stiekem HTTP verkeer genereert
  • Bekijken hoe een bepaalde applicatie de achterliggende webservice API gebruikt
    • Bijvoorbeeld bij mobiele applicaties
    • Dit kan ook handig zijn om te onderzoeken of die webservices enigzins veilig zijn.

Over die laatste zag ik onlangs een interessante presentatie online van Troy Hunt, een naam op het gebied van data beveiliging bij software ontwikkeling: Troy Hunt op Codemania: Hack Yourself First

Troy Hunt zijn blog is trouwens een must-read.

Voor eindgebruikers

Soms komt een probleem enkel voor bij je niet-technische eindgebruikers. Je kan niet zomaar op hun PC maar wilt wel wat details of het HTTP verkeer tijdens het gebruik van je website / applicatie.

Je kan die mensen Fiddler laten downloaden en draaien, maar dat is toch iets te omslachtig. Er is een tool "FiddlerCap" dat een vereenvoudigde interface heeft die gebruikers toelaat op relatief eenvoudige wijze een .saz bestand te genereren. Dit is eigenlijk een log sessie die je dan achteraf zelf lokaal kan inladen in Fiddler. Dan kan je na de feiten het verkeer van bij de eindgebruiker analyseren.

Zeg hem er dan wel even bij dat alle andere web-activiteiten ook zullen gelogged worden tijdens het draaien van FiddlerCap ...

Conslusie

Ikzelf ben al meermaals uit de puree gehaald door Fiddler, soms gaan applicaties een uitgebreide foutmelding van de webserver krijgen en slechts een heel algemene en weinig zeggende foutboodschap tonen. Dan kan je in Fiddler het vollédige antwoord van de server zien.

Als iets niet reageert dan kan je zien of de server niet reageert of de client.

Waarom duurt iets zo lang? Kijk eens met Fiddler waar de tijd naartoe gaat (developer tools zijn waarschijnlijk wel nog iets handiger hier).

Waarom vindt hij de webservice niet? Misschien een configuratieprobleem?

Enzoverder ...

Bij een probleem met webservices: one stop: Fiddler.

En ik herhaal, Fiddler. FIDDLER ...

Fiddler Download: www.telerik.com/fiddler

FiddlerCap: www.telerik.com/fiddler/fiddlercap

Troy Hunt: www.troyhunt.com