STRACE ( Socket Trace )

Kurz gesagt

Wenn es nicht schnell genug gehen kann, hier eine Schritt für Schritt Anleitung wie ein Strace Log erstellt wird:

  1. Herunterladen und Installieren von hier
  2. IE Cache löschen
  3. Fehlerseite als Startseite im IE Eintragen ( Homepage )
  4. Alle IE Instanzen beenden
  5. In Installationsverzeichnis wechseln ( z.B. C:\Program Files (x86)\STRACE  )
  6. STRACE.CMD starten
  7. Im geöffneten IE Fenster das Problem reproduzieren und danach den Browser schließen
  8. Auf dem Arbeitsplatz sollte sich nun eine Datei ähnlich wie STRACE_IEXPLORE_PID_8080_08062010_112701 befinden
  9. fertig

 

Und jetzt für alle die es noch etwas genauer wissen möchten…

Beschreibung

Es handelt sich hier um ein Command Line Tool welches ausschließlich verwendet wird um Daten zu protokollieren die über Windows Sockets empfangen oder gesendet werden. Es kann auch für SSL Verbindungen verwendet werden da die Daten protokolliert werden bevor sie “encrypted” bzw. nachdem sie “decrypted” wurden.

Generell ist die Funktionalität vergleichbar mit der Debug Version der WININET.DLL. Diese DLL ist eine Kernkomponente des Internet Explorer und stellt Funktionen bereit um Verbindungen zu Servern herzustellen. Weitere Informationen zur Debug Wininet.dll gibt es hier: https://support.microsoft.com/kb/884931

STRACE hat gegenüber der Debug Wininet.dll zwei Vorteile. Zu einem kann das Tool auf allen Systemen verwendet werden und es ist nicht auf den Internet Explorer selbst  beschränkt.

Wann sollte man es einsetzen?

In erster Linie sollte STRACE zum Einsatz kommen wenn man

    • keine Debug WININET.DLL zu Verfügung hat
    • man die Daten mit HTTPREPLAY ( link ) wieder geben möchte bzw. eine Übersicht der Daten erhalten möchte.

Installation

Die aktuelle Version von https://www.microsoft.com/downloads/details.aspx?familyid=f5ec767f-27f2-4fb3-90a5-4bf0d5f4810a&displaylang=en laden und installieren. Ist STRACE bereits auf einem anderen System installiert kann auch einfach das entsprechende Verzeichnis ( C:\Program Files (x86)\STRACE ) auf ein anderes System kopiert werden. Es findet bei der Installation keine Registrierung oder ähnliches statt. Es gibt sowohl eine 32Bit wie auch eine 64Bit Version.

Wie funktioniert’s?

Es reicht aus STRACE.CMD zu starten. Sollte unter Vista bzw. Windows 7 eine Nachfrage kommen ob WITHDLL.EXE ausgeführt werden soll bestätigt dies bitte mit “JA”. Ist dies geschehen wird automatisch ein neuer Internet Explorer gestartet. Ab diesem Zeitpunkt wird der komplette Datenverkehr vom IE mit protokolliert.

ACHTUNG: Der Cache des Internet Explorer sollte auf jeden Fall vorher gelöscht werden wenn die Daten mit HTTPReplay später wieder gegeben werden sollen! Wird dies nicht durchgeführt holt der IE die Daten aus dem Cache und somit befinden sich diese nicht im Logfile.

Wenn eine andere Applikation als der Internet Explorer verwendet werden soll kann folgendes Kommando verwendet werden:

withdll /d:STRACE.DLL %process%.exe

Mit injdll /p:service_pid /d:STRACE.DLL kann auch von einer bereits laufenden Applikation eine Log Datei erstellt werden.

Ihr seht gleichzeitig ein CMD Fenster welches solange geöffnet bleiben muss solange der Trace laufen soll. Es ist auch sinnvoll die Fehlerseite als Startseite ( Homepage ) im IE einzutragen damit nicht Daten protokolliert werden die u.U. nichts mit dem eigentlichen Problem zu tun haben.

Analyse

Das Log Datei selbst wird standardmäßig auf dem Desktop erstellt und hat einen Namen ähnlich wie “STRACE_IEXPLORE_PID_8080_08062010_112701”. Der Applikationsname und die dazu gehörige PID ( Process ID ) werden u.a. als Dateinamen verwendet.

Bemerkung: Wenn Internet Explorer 8 verwendet wird kann man durchaus mehrere Log Dateien erhalten da STRACE automatisch an jeden neuen Prozess gebunden wird.  Da der IE8 standardmäßig aus mindestens zwei Prozessen besteht werden auch entsprechend viele zwei Log Dateien erstellt wobei nur die ( wahrscheinlich ) größere sinnvolle und vor allem verwertbare Daten beinhaltet.

Hier ein Beispiel eines STRACE Logs:

06/08/2010 11:20:38:449 - socket 0x0000044c created
06/08/2010 11:20:38:449 - closesocket 0x0000044c
06/08/2010 11:20:38:449 - socket 0x0000044c created
06/08/2010 11:20:38:449 - closesocket 0x0000044c
06/08/2010 11:20:38:465 - socket 0x000004d0 created
06/08/2010 11:20:38:465 - closesocket 0x000004d0
06/08/2010 11:20:38:480 - socket 0x0000053c created
06/08/2010 11:20:38:480 - closesocket 0x0000053c
06/08/2010 11:20:38:480 - socket 0x0000053c created
06/08/2010 11:20:38:480 - closesocket 0x0000053c
06/08/2010 11:20:38:480 - socket 0x0000053c created
06/08/2010 11:20:38:480 - closesocket 0x0000053c
06/08/2010 11:20:38:480 - socket 0x0000053c created
06/08/2010 11:20:38:496 - connect socket 0x0000053c (10.166.20.101:80)
06/08/2010 11:20:38:543 - 1105 byte(s) sent on socket 0x0000053c
=====================================================
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 0123456789abcdef

0000: 47 45 54 20 2f 77 70 61 64 2e 64 61 74 20 48 54 GET /wpad.dat HT
0010: 54 50 2f 31 2e 31 0d 0a 41 63 63 65 70 74 3a 20 TP/1.1..Accept:
0020: 2a 2f 2a 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a */*..User-Agent:
0030: 20 4d 6f 7a 69 6c 6c 61 2f 34 2e 30 20 28 63 6f Mozilla/4.0 (co
0040: 6d 70 61 74 69 62 6c 65 3b 20 4d 53 49 45 20 38 mpatible; MSIE 8
0050: 2e 30 3b 20 57 69 6e 33 32 3b 20 54 72 69 64 65 .0; Win32; Tride
0060: 6e 74 2f 34 2e 30 29 0d 0a 48 6f 73 74 3a 20 65 nt/4.0)..Host: e
0070: 75 72 6f 70 72 6f 78 79 2e 65 75 72 6f 70 65 2e uroproxy.europe.
0080: 63 6f 72 70 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 corp.microsoft.c

0870: e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f7 f8 ................
0880: f9 fa fb fc fd fe 20 22 3b 0d 0a 66 75 6e 63 74 ...... ";..funct
0890: 69 6f 6e 20 43 68 61 72 54 6f 41 73 63 69 69 28 ion CharToAscii(
08a0: 63 29 7b 0d 0a 20 72 65 74 75 72 6e 20 43 68 61 c){.. return Cha
08b0: 72 73 2e 69 6e 64 65 78 4f 66 28 63 29 20 2b 20 rs.indexOf(c) +
08c0: 33 32 3b 0d 0a 7d 0d 0a 66 75 6e 63 74 69 6f 6e 32;..}..function
08d0: 20 4d 61 6b 65 49 6e 74 28 78 29 7b 0d 0a 20 78 MakeInt(x){.. x
08e0: 20 25 3d 20 34 32 39 34 39 36 37 32 39 36 3b 0d %= 4294967296;.
08f0: 0a 20 69 66 28 78 20 3c 20 30 29 0d 0a 20 20 78 . if(x < 0).. x
0900: 20 2b 3d 20 34 32 39 34 39 36 37 32 39 36 3b 0d += 4294967296;.
0910: 0a 20 72 65 74 75 72 6e 20 78 3b 0d 0a 7d 0d 0a . return x;..}..
=====================================================
06/08/2010 11:20:38:777 - socket 0x0000053c closed gracefully
06/08/2010 11:20:38:777 - closesocket 0x0000053c
06/08/2010 11:27:02:347 - socket 0x00000668 created
06/08/2010 11:27:02:347 - closesocket 0x00000668
06/08/2010 11:27:02:347 - socket 0x00000668 created
06/08/2010 11:27:02:347 - closesocket 0x00000668
06/08/2010 11:27:02:347 - socket 0x000005a4 created
06/08/2010 11:27:02:347 - closesocket 0x000005a4

STRACE Logs lassen sich hervorragend komprimieren und sollten nur in dieser Form weiter ( an uns ) gesendet werden. Wer selbst einen etwas übersichtlicheren Blick auf die Daten werfen möchte sollte dafür HTTPReplay verwenden.