Meinen Schreibtisch ziert seit einem Jahr ein Chumby ([2], Abbildung 1), ein kleiner, Radiowecker-ähnlicher Kasten, auf dem konfigurierbare Apps Schlagzeilen, das Wetter, Börsenkurse und die News aus der Welt der Programmierung durchtickern. Der Zweitbildschirm im Augenwinkel nervt weniger als ein Widget auf dem Hauptschirm und ich lese Klatsch aus Silicon Valley oder erlebe bahnbrechende Neuheiten der Gadget-Industrie.
Abbildung 1: Der Chumby zeigt die neuesten Schlagzeilen auf Ihackernews.com an.
Defcon-2 dank Werbung
Vor einigen Wochen hielt es eine offenbar vom schnöden Werbemammon geblendete Person der Chumby-Zentrale für nötig, zwischen meinen Kanälen eine zehn Sekunden dauernde Werbung für eine Autoversicherung einzublenden (Abbildung 2). Ich schaltete auf Defcon-2 [3] und untersuchte, ob die Chumby-Einstellungen einen HTTP-Proxy erlauben, um die lästige Werbung abzufangen, bevor sie auf dem Chumby eintrifft.
Abbildung 2: Die Reklamehexe hat sich ungefragt zwischen die Chumby-Kanäle gedrängt.
Im Forum erfuhr ich, dass Chumby keinen HTTP-Proxy unterstützt, man aber einen USB-Stick einstöpseln kann, auf dem in einer Datei »userhook0«
im Rootverzeichnis die Proxy-Einstellungen von Abbildung 3 stehen. Damit gebootet schleust das Gerät HTTP-Requests durch den Proxyserver, der die URLs ansehen und eventuell manipulieren kann.
Abbildung 3: Steckt im Chumby ein USB-Stick mit einer Datei userhook0, übernimmt das Gerät während des Bootvorgangs die dort eingestellten Proxy-Parameter.
Squid oder handgestrickt
Als Proxyserver eignet sich Squid [4], aber wer gerne bastelt, zimmert sich wie in Listing 1 mit dem CPAN-Modul HTTP::Proxy schnell einen loggenden Proxy zusammen. Zeile 21 startet den Proxyserver, der auf Port 9999 des Hosts 192.168.1.123 lauscht, die HTTP-Requests des Chumby entgegennimmt und die Inhalte aus dem Internet holt. Der ab Zeile 10 eingeschobene »request«
-Filter sieht sich einen eintreffenden HTTP-Request an, fieselt die URL heraus und gibt sie mit »print«
aus.
01 #!/usr/local/bin/perl -w
02 use strict;
03 use HTTP::Proxy;
04 use HTTP::Proxy::HeaderFilter::simple;
05
06 my $proxy = HTTP::Proxy->new(
07 host => "192.168.1.123",
08 port => 9999 );
09
10 $proxy->push_filter(
11 request =>
12 HTTP::Proxy::HeaderFilter::simple->new(
13 sub {
14 my( $self ) = @_;
15 print $self->proxy->request->uri(),
16 "\n";
17 }
18 )
19 );
20
21 $proxy->start;
Mit diesem Spion in der Leitung zeigt Abbildung 4, was der Chumby so alles treibt. Um der unerwünschten Werbung den Teppich unter den Füßen wegzuziehen, ändert Listing 2 die Methode »push_filter()«
so, dass sie die URL des Requests umschreibt, falls Chumby ursprünglich den berühmten Eviladserver.com verlangt hat.
01 #!/usr/local/bin/perl -w
02 use strict;
03 use HTTP::Proxy;
04 use HTTP::Proxy::HeaderFilter::simple;
05 use HTTP::Request::Common;
06
07 my $proxy = HTTP::Proxy->new(
08 host => "192.168.1.123",
09 port => 9999 );
10
11 my $repl = "http://perlmeister.com/test/" .
12 "sandy-beach.jpg";
13
14 $proxy->push_filter(
15 request =>
16 HTTP::Proxy::HeaderFilter::simple->new(
17 sub {
18 my( $self, $headers, $req ) = @_;
19
20 if( $req->uri() =~
21 /eviladserver\.com/ ) {
22 $_[2] = GET $repl;
23 }
24 }
25 )
26 );
27
28 $proxy->start;
Statt nervender Werbung erscheint dann ein Bild vom Sandy Beach auf meiner Lieblingsinsel Oahu auf Hawaii, in dessen Brandung es erfahrene Bodysurfer in einer zusammenbrechenden Welle sauber umherbeutelt.
Abbildung 4: Der loggende Proxy schreibt die vom Chumby aufgerufenen URLs mit.
« Zurück
1
2
3
4
5
Weiter »