Dez 29

Aufmerksam geworden durch diesen Artikel, mit dem ueber den Proxy geholte Webseiten (genauer gesagt werden alle Images einmal um 180 Grad gedreht) on the Fly manipuliert werden habe ich mir das ganze mal näher angesehen und optimiert.

Vorweg schonmal das Ergebnis (funktioniert TRANSPARENT mit allen JPGs, GIFs und PNGs). Transparent bedeutet in diesem Falle, dass der Anwender in keinerlei Weise mitbekommt, dass es sich hier um ein manipliertes Bild handelt. Die Requests werden quasi 1:1 durchgeleitet.

Wor moechten also alle Bilder, die aus dem LAN via Proxy angefordert werden, einmal um 180 Grad drehen. Folgende Ausgangssituation:

  • Transparenter Squid auf einem Router
  • Webserver auf einem etwas dickeren Rechner im LAN

in /etc/squid/squid.conf folgende Zeile einfügen:

url_rewrite_program /usr/bin/updwn.pl
url_rewrite_children 5

Das File /usr/bin/updwn.pl sollte wie folgt aussehen:

#!/usr/bin/perl
# Runs as proxy:proxy
# input - siehe unten (Array params)
# output - URL - transparent *invisble to Enduser :-) *
$|=1;
while (<>) {
chomp $_;
@params=split(/ /,$_);
# 0 = Request URL
# 1 = Requesting IP/-
# 2 = -
# 3 = Request Method
# 4 = myip= ?
# 5 = myport = ?
$url=$params[0];
if (!($params[1]=~/192\.168\.60\.200/)) { # Nicht rekursiv aufrufen (Boese !!)
$url='http://192.168.60.200/ppics/updwn.pl?u='.$url if ( ($url=~/gif/i) || ($url=~/jpg/i) || ($url=~/jpeg/i) || ($url=~/png/i));
}
print $url."\n";
$count++;
}

Wobei die 192.168.60.200 durch die IP des eigenen Webserver zu ersetzen waere. Die eigentliche “Magie” findet naemlich jetzt im updwn.pl auf dem Webserver statt. Das Ding benutzt, im gegensatz zu dem File, welches in dem Artikel beschrieben wurde, direkt die GD-Library und ruft keinerlei Executables mehr auf. Damit ist das Script ein wenig performanter

Hier der Inhalt von /var/www/ppics/updwn.pl:

use CGI qw/:standard/;
use LWP::UserAgent;
use GD;
binmode STDOUT;

$|=1;
my $url=param(“u”);

chomp $url;
my $ctype=”;
my $content=”;
get_content($url,\$ctype,\$content);
rotate(\$content,\$ctype) if ($ctype=~/image/i);
print “Content-Type: “.$ctype.”\n\n”;
print $content;
print “\n–magicalboundarystring\n” if ($ctype=~m/image/);

sub get_content {
my ($url,$ref_ctype,$ref_content)=@_;
my $ua = LWP::UserAgent->new;
$ua->agent(“MyApp/0.1 “);
my $req = HTTP::Request->new(GET => $url);
my $res = $ua->request($req);
$$ref_ctype=$res->content_type;
$$ref_content=$res->content;
}

sub rotate {
my ($ref_content,$ref_header)=@_;
my $image=undef;
$image=newFromPngData GD::Image($$ref_content) if ($$ref_header=~/png/i);
$image=newFromJpegData GD::Image($$ref_content) if ($$ref_header=~/jpeg/i);
$image=newFromGifData GD::Image($$ref_content) if ($$ref_header=~/gif/i);
$image->rotate180();
$$ref_header=’image/png’;
$$ref_content=$image->png();
}
Wichtig: Die URL sollte nicht aus dem Internet erreichbar sein. Ansonsten hat man einen selbstgebastelten offenen Proxy…

Mithilfe der Parameter des Files /usr/bin/updwn.pl kann man sich jetzt sogar lustige ACLs bauen. (Rotiere nur fuer bestimmte IP’s oder fuer bestimmte URLs, etc…) Der Phantasie sind da keine Grenzen gesetzt.

Tagged with:
Dez 28

Oh wie wahr….

Dez 28

Wer nicht unbedingt mit Kanonen auf Spatzen schiessen will, und sich Adobes Creative Suite zulegen moechte, ist mit PAINT.NET bestens bedient. Das gute Stueck punktet mit Layern, einer Menge Effekten und dem Fakt, dass es frei ist.

Wenn es jetzt noch sowas aehnliches fuer den MAC gaebe, waere ich gluecklich. Und jetzt komm mir bitte keiner mit The Gimp . Das Ding ist zwar ebenfalls nett, aber solange es nur unter “X” schnurrt, leider keine echte alternative.

Tagged with:
Dez 26

Wo wir gerade bei Katzencontent sind.

Darf ich vorstellen: Mietzekatze “Blue”:

Blue kommt aus der Tuerkei. Genauergesagt von der Tierhilfe Antalya. Dort ist Blue, als Findling, zusammen mit ein paar anderen Ihrer Art als Katzenbaby, in einem Abflussrohr, gefunden worden. Aufgepeppelt von der Tierhilfe durfte Blue mit ca. 7 Monaten das Land verlassen und sollte vermittelt werden. Da sich direkt nach der Einreise meist niemand findet, der eine Katze haben moechte (Wer kauft schon die Katze im Sack :-), sollte Blue ersteinmal zur Pflege zu uns kommen.

Nach ca. 2 Wochen “Pflege” war allerdings klar, dass sich die kleine so gut mit unseren beiden Rackern versteht. Daher haben wir Blue nun offiziell in unsere Familie aufgenommen.

Update: Geht uebrigens tierisch auf MausCursor am Rechner ab:

Tagged with:
Dez 25

No comment…

Dez 19

Schon lustig im Rheinland, sobald die erste Schneeflocke fällt fangen alle an Salz zu streuen, oder Ihre Autos (selbst auf der Autobahn) nur noch in Schrittgeschwindigkeit vorwärtszubewegen… Der Knaller war vorgestern. Da faehrt doch glatt der Streuwagen hier vor dem Haus her (Man beachte: Kein Schnee, Temperatur +1 Grad Celcius). Naja, andere Gegenden, andere Sitten 🙂

Und weils so hübsch ist, hier ein Foto von dem (bisschen) Schnee mit Blick auf den Petersberg:

preload preload preload