Sniffer::HTTP

Max Maischein

Frankfurt.pm

Was ist Sniffer::HTTP ?

Geschrieben von Max Maischein

HTTP-Transfers einfach mitschneiden

  use warnings;
  use strict;
  use Sniffer::HTTP;
  my $sniffer = Sniffer::HTTP->new(
    request  => sub { my ($req,$conn) = @_; print $req->uri,"\n" if $req },
    response => sub { my ($res,$req,$conn) = @_; print $res->code,"\n" },
  );
  $sniffer->run();

Warum?

  • FireFox hat die "Live HTTP Headers" Erweiterung, die im Prinzip das selbe liefert, aber halt nicht in Perl.

  • HTTP::Proxy ist im Prinzip genau das selbe, funktioniert aber unbequem, während man entwickelt - man kann nicht browsen, wenn der Proxy abstürzt.

Wofür ist das praktisch?

  • Man kann alle Verbindungen des eigenen Browsers überwachen.

  • Man kann die Daten mitschneiden, ohne daß das laufende Programm angehalten werden muß (Flash!)

  • Testen bzw. Mitschneiden von Server-Antworten

Beispielsitzung

Starten:

  C:\Projekte\Sniffer-HTTP>perl bin\live-http-headers.pl

Request für http://frankfurt.pm.org/

  >>>
  GET http://frankfurt.pm.org/ HTTP/1.1
  Connection: keep-alive
  ...
  Host: frankfurt.pm.org
  User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7
  Keep-Alive: 300

Beispielsitzung

Antwort: Redirect

  <<<
  Connection: Keep-Alive
  Date: Mon, 07 Nov 2005 19:44:17 GMT
  Location: http://frankfurt.perlmongers.de/
  Server: Apache/2.0
  Content-Length: 216
  Content-Type: text/html; charset=iso-8859-1
  Keep-Alive: timeout=15, max=100

Beispielsitzung

Request für <http://frankfurt.perlmongers.de/>

  >>>
  GET http://frankfurt.perlmongers.de/ HTTP/1.1
  Connection: keep-alive
  ...
  Host: frankfurt.perlmongers.de
  User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7
  Cookie: prefs=
  Keep-Alive: 300

Beispielsitzung

Antwort: Website

  <<<
  Connection: Keep-Alive
  Date: Mon, 07 Nov 2005 19:44:18 GMT
  Transfer-Encoding: chunked
  Server: Apache/1.3.33 (Unix)
  Content-Type: text/html; charset=ISO-8859-1
  Keep-Alive: timeout=2, max=200
  Set-Cookie: prefs=; path=/; expires=Sat, 06-Nov-2010 19:44:18 GMT

Wofür sollte man Sniffer::HTTP nicht verwenden?

  • Am Arbeitsplatz

  • Kriminelle Aktivitäten

  • Testen von Programm-Antworten (wg. Zeitstempel etc.)

  • Testen von "echter" User-Interaktion (HTTP::Recorder ist da besser, basiert aber auf HTTP::Proxy)

Voraussetzungen

  • Sniffer::HTTP basiert auf Net::Pcap, und kann daher live-Mitschnitte von der Netzwerkkarte lesen.

  • Es geht aber auch das Auslesen von Dateien.

  • Sehr praktisch für das Testen von Server-Code gegen fest definierte Clients, aber anfällig gegen Veränderung des Protokolls bzw. Test- Szenarios.

Hilfreiche Dinge:

  • HTTP::Recorder

  • HTTP::Request::FromTemplate

  • Live HTTP Headers (FireFox)

  • Ethereal

Danke

Fragen ?