Geschrieben von Max Maischein
1: use warnings; 2: use strict;
1: use Sniffer::HTTP;
1: my $sniffer = Sniffer::HTTP->new( 2: request => sub { my ($req,$conn) = @_; 3: print $req->uri,"\n" if $req }, 4: response => sub { my ($res,$req,$conn) = @_; 5: print $res->code,"\n" }, 6: ); 7: $sniffer->run();
Fehlersuche in Web Applikationen
Downloaden von Inhalten
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.
1: Internet 2: || 3: +-------------------------------+ || 4: | Rechner | || 5: | | || 6: | | || +-Server-----+ 7: | +-Browser--+ +-----------+ | || Anfrage | | 8: | | |---| | -|--> || ---------> | | 9: | | | |HTTP::Proxy| | || | | 10: | | |<--| | -|<-- || <--------- | | 11: | +----------+ +-----------+ | || Antwort +------------+ 12: +-------------------------------+ ||
1: Internet 2: || 3: +-------------------------------+ || 4: | Rechner | || 5: | libpcap | || 6: | ^ ^ | || +-Server-----+ 7: | +-Browser--+ | | | || Anfrage | | 8: | | |-------+--|-----> |--> || ---------> | | 9: | | | | | || | | 10: | | |<---------+------ |<-- || <--------- | | 11: | +----------+ | || Antwort +------------+ 12: +-------------------------------+ ||
HTTP::Proxy ist schwerfällig
Net::Pcap liefert die Ethernet-Pakete
Sniffer::HTTP kombiniert Net::Pcap und LWP
LWP hat HTTP::Request und HTTP::Response
$req->as_string
1: use warnings; 2: use strict;
1: use Sniffer::HTTP;
1: my $sniffer = Sniffer::HTTP->new( 2: request => sub { my ($req,$conn) = @_; 3: print $req->uri,"\n" if $req }, 4: response => sub { my ($res,$req,$conn) = @_; 5: print $res->code,"\n" }, 6: ); 7: $sniffer->run();
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
Starten:
1: C:\Projekte\Sniffer-HTTP>perl bin\live-http-headers.pl
Request für http://frankfurt.pm.org/
1: >>> 2: GET http://frankfurt.pm.org/ HTTP/1.1 3: Connection: keep-alive 4: ... 5: Host: frankfurt.pm.org 6: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7 7: Keep-Alive: 300
Antwort: Redirect
1: <<< 2: Connection: Keep-Alive 3: Date: Mon, 07 Nov 2005 19:44:17 GMT 4: Location: http://frankfurt.perlmongers.de/ 5: Server: Apache/2.0 6: Content-Length: 216 7: Content-Type: text/html; charset=iso-8859-1 8: Keep-Alive: timeout=15, max=100
...
Request für <http://frankfurt.perlmongers.de/>
1: >>> 2: GET http://frankfurt.perlmongers.de/ HTTP/1.1 3: Connection: keep-alive 4: ... 5: Host: frankfurt.perlmongers.de 6: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7 7: Cookie: prefs= 8: Keep-Alive: 300
Antwort: Website
1: <<< 2: Connection: Keep-Alive 3: Date: Mon, 07 Nov 2005 19:44:18 GMT 4: Transfer-Encoding: chunked 5: Server: Apache/1.3.33 (Unix) 6: Content-Type: text/html; charset=ISO-8859-1 7: Keep-Alive: timeout=2, max=200 8: Set-Cookie: prefs=; path=/; expires=Sat, 06-Nov-2010 19:44:18 GMT
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)
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.
HTTP::Recorder
HTTP::Request::FromTemplate
Live HTTP Headers (FireFox)
Ethereal
Fragen ?