Charles, bring mir mal die Milch!

Charles ist ein Netzwerk-Utility, bzw. genauer ein HTTP-Proxy, der Anfragen des Browsers und Apps und die Antworten der Server mitschneidet. Das erlaubt einen Blick hinter die Kulissen.

Charles – das Icon ist aus unerfindlichen Gründen eine reich verzierte Milchkanne, wie sie unsere Grossmütter gerne nutzen würden – gehört zu den Netzwerkutilities. Das ist eine Programmkategorie, für die ich, wie hier festgestellt, eine gewisse Schwäche habe.

Warum dem so ist, bleibt mir selbst ein Rätsel. Mir fehlen sowohl Zeit als auch Fachkenntnisse, um mich im Detail damit auseinanderzusetzen, was sich auf dem Netzwerkkabel oder der WLAN-Schnittstelle im Detail tut. Und eigentlich bin ich zufrieden, wenn die richtigen Daten in ausreichendem Tempo bei mir ankommen.

Milch. (In Form von HTTP-Kommunikation.)

Doch dann passiert es wieder, und mich packt der Rappel. Dann möchte ich doch genauer wissen, was sich hinter der Benutzeroberfläche meiner Betriebssysteme und der Programme abspielt – und was dieses oder jenes Programm genau treibt. Und dabei hilft Charles. Das Programm nennt sich selbst einen HTTP-Proxy Schrägstrich HTTP Monitor.

Für Entwickler und Neugierige

Der Proxy dokumentiert die HTTP-Anfragen der Browser und Apps und die Antworten, die aus dem Internet zurückkommen. Der Monitor überwacht diesen Datenverkehr und ermöglicht es, nicht nur die Metadaten, sondern auch den Inhalt des Datenverkehrs zu analysieren.

Stellt sich die Frage nach dem Sinn und Zweck: Geht es um die Befriedigung ungezügelter Neugierde? Der Hersteller beschreibt den Daseinszweck seiner App mit dem Bedürfnis von Entwicklern, das Kommunikationsverhalten ihrer Anwendungen analysieren:

In Web and Internet development you are unable to see what is being sent and received between your web browser / client and the server. Without this visibility it is difficult and time-consuming to determine exactly where the fault is. Charles makes it easy to see what is happening, so you can quickly diagnose and fix problems.

Charles makes debugging quick, reliable and advanced; saving you time and frustration!

Das ist selbstverständlich wichtig: Als Entwickler muss sehen, ob die Informationen so ausgetauscht werden, wie das beabsichtigt ist. Und wenn etwas schiefgeht, braucht man Instrumente für die Fehlersuche. Doch natürlich ist das nicht die ganze Wahrheit. Man kann mit Charles auch fremden Anwendungen hinterherschnüffeln.

Das Stichwort Reverse Engineering liegt einem auf der Zunge: Wenn man herausfinden will, wie eine Anwendung mit einem Server kommuniziert, weil man ebenfalls mit dem fraglichen Server kommunizieren möchte, dann hilft Charles weiter. Zumindest, wenn die Schnittstellen, die man würde verwenden wollen, nicht ausreichend gut dokumentiert sind. Ich habe es mal mit meinem Programm Clickomania probiert: Das übermittelt Resultate an meine Website (hier).

Praxisbeispiel: Wie könnte man wohl die Clickomania-Rangliste manipulieren?

Und wenn man nun herausfinden möchte, wie das geschieht, dann könnte Charles weiterhelfen. (Ich habe den Aufruf selbst, mit dem das Resultat an den Server übermittelt wird, im Log aber nicht gefunden. Vielleicht, weil ich nicht gut genug gesucht habe. Oder weil er Charles entgangen ist.) Ich nehme an, Leute, die ab und zu versuchen, gefälschte Resultate in die Online-Rangliste einzuschmuggeln, haben ein Programm wie Charles im Einsatz. Das kann nämlich auch Aufrufe mit veränderten Parametern simulieren oder Aufrufe manipulieren.

Beeindruckend an Charles ist, dass das Programm seinen Dienst sofort aufnimmt, ohne dass man an der Netzwerkkonfiguration hätte herumfingern oder irgendwelche ekligen Treiber installieren müssen. Charles bildet unter Structure zu den einzelnen Servern auch die Verzeichnisse ab und zeigt Stylesheets, Bilder, HTML-Dateien, und was es in der grossen, weiten Welt des Webdesigns sonst noch so für Ressourcen und Mime-Types gibt.

Den Datenverkehr auswerten

Unter Overview sieht man die Details zum Aufruf, unter Summary die Ladereihenfolge und unter Chart die Statistiken zur zeitlichen Abfolge, zu den Dateigrössen, Typen und zum Datenfluss. Im Menü Tools finden sich die Werkzeuge, mit denen in den Datenverkehr eingegriffen werden kann. Und via File > Save Session speichert man die gesammelten Daten, um sie in Ruhe durchforsten zu können. Die Sequence-Ansicht zeigt die Aufrufe in der Reihenfolge, also den Live-HTTP(S)-Datenverkehr.

HTTPS ist (erst einmal) das Äquivalent zu der sauren Milch.

Stellt sich natürlich die Frage: Was ist bei verschlüsseltem Datenverkehr? Normalerweise sieht man dann nur Zeichensalat, der, wie im Fall von Nerdfunk.ch, einen Hinweis auf Let’s encrypt enthält. Man kann auch verschlüsselten Verkehr analysieren, wenn man Charles als man-in-the-middle HTTPS proxy aufsetzt. Das habe ich nicht ausprobiert, weil reine Neugierde es IMHO nicht rechtfertigt, SSL-Zertifikate zu installieren, die ich ansonsten nicht brauche. Das ist ein Sicherheitsrisiko, dass ich auf meinem Alltagsrechner sicherlich nicht eingehe.

Eine App, die ich nicht brauche, aber trotzdem habe

Fazit: Charles ist eine jener Apps, die ich nicht wirklich brauche, die ich aber noch so gerne in meinem Fundus habe. Es gibt sie für Windows, Mac und Linux, eine 30-Tage-Testversion ist verfügbar. Die Lizenz kostet 50 US-Dollar.

Interessanterweise gibt es Charles auch als App fürs iPhone und iPad (neun Franken), die nicht nur eine Überwachung der Browser-Aktivitäten, sondern auch der anderen Apps zulässt. Dass das mit iOS möglich ist, überrascht mich ein wenig – ich hätte gedacht, dass Apples Sandbox das nicht zulässt. Aber man lernt nie aus. Und man erkennt auch immer wieder aufs Neue, wie wichtig die Verschlüsselung doch ist …

2 Kommentare zu «Charles, bring mir mal die Milch!»

  1. Wenn Dir Charles gefällt, wirst Du an Fiddler (https://www.telerik.com/fiddler) Freude haben: kostenlos und (wie ich finde) schönere Oberfläche.

    Beispiel für sinnlosen, aber interessanten Einsatzzweck: herausfinden, dass in früheren Versionen von “Jodel” die App zwar nur “in der Nähe” angezeigt, der Server aber immer die genauen Koordinaten geschickt hat. Man konnte die User also lokalisieren.

    Oder beim Quizduell konnte man die Antworten des Webservers so anpassen, dass immer die erste Antwort richtig war. 🙂

    Sinnvolle Einsatzzwecke: Eine Anwendung hat Problem mit der Kommunikation eines Servers (den man installiert hat). Fehlermeldungen wie üblich dürftig. => Mit Fiddler findet man schnell heraus, ob die Anwendung eine falsche Anfrage (fehlende Authentifizierung etc.) schickt, oder ob der Server falsch antwortet.

    Oder in die andere Richtung: man entwickelt eine Browser-App und muss dafür einen Webservice ansteuern, an dem jemand anderes entwickelt. Eine Funktion liefert ungültige Daten, was Fiddler beweist. Dank Fiddler muss man nicht umständlich eine Ausnahme für diese Abfrage implementieren (zB. Beispieldaten im Code erzeugen), sondern kann die Serverantwort einmalig von Hand korrigieren und im Fiddler dann einstellen “beantworte Anfragen an /getCustomers mit der lokalen Datei customers.json”. So kann man ohne Änderungen am Code weiter entwickeln und muss nicht darauf warten, bis der Server-Entwickler seinen Teil korrigiert hat.

    Dazu kommen noch Features wie die Simulation einer langsamen Verbindung oder “bei 5% der Anfragen gibt Server einen Fehler zurück”.

Kommentar verfassen