<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CC::Blog &#187; GD::Image</title>
	<atom:link href="http://ccblog.de/tag/gdimage/feed/" rel="self" type="application/rss+xml" />
	<link>http://ccblog.de</link>
	<description>Nur ein weiteres kleines unbedeutendes Blog</description>
	<lastBuildDate>Wed, 11 Apr 2012 12:09:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>URL Rewriting mit dem Squid</title>
		<link>http://ccblog.de/2009/12/29/url-rewriting-mit-dem-squid/</link>
		<comments>http://ccblog.de/2009/12/29/url-rewriting-mit-dem-squid/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 10:15:55 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Netz]]></category>
		<category><![CDATA[GD]]></category>
		<category><![CDATA[GD::Image]]></category>
		<category><![CDATA[imagemagick]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[redirect]]></category>
		<category><![CDATA[squid]]></category>
		<category><![CDATA[squid.conf]]></category>
		<category><![CDATA[url_rewrite_program]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://ccblog.de/?p=262</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Aufmerksam geworden durch <a href="http://nefarius.darkhosters.net/linux:netzwerkspielereien_mit_sniffing" target="_blank">diesen Artikel</a>, 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.</p>
<p>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.</p>
<p style="text-align: center;"><a href="../wp-content/Bildschirmfoto-2009-12-29-um-11.07.32.png"><img class="aligncenter" title="Bildschirmfoto 2009-12-29 um 11.07.32" src="../wp-content/Bildschirmfoto-2009-12-29-um-11.07.32-300x127.png" alt="" width="300" height="127" /></a></p>
<p>Wor moechten also alle Bilder, die aus dem LAN via Proxy angefordert werden, einmal um 180 Grad drehen. Folgende Ausgangssituation:</p>
<ul>
<li>Transparenter Squid auf einem Router</li>
<li>Webserver auf einem etwas dickeren Rechner im LAN</li>
</ul>
<p>in /etc/squid/squid.conf folgende Zeile einfügen:<br />
<code><br />
url_rewrite_program /usr/bin/updwn.pl<br />
url_rewrite_children 5<br />
</code><br />
Das File /usr/bin/updwn.pl sollte wie folgt aussehen:<br />
<code><br />
#!/usr/bin/perl<br />
# Runs as proxy:proxy<br />
# input - siehe unten (Array params)<br />
# output - URL - transparent *invisble to Enduser <img src='http://ccblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  *<br />
$|=1;<br />
while (&lt;&gt;) {<br />
chomp $_;<br />
@params=split(/ /,$_);<br />
# 0 = Request URL<br />
# 1 = Requesting IP/-<br />
# 2 = -<br />
# 3 = Request Method<br />
# 4 = myip= ?<br />
# 5 = myport = ?<br />
$url=$params[0];<br />
if (!($params[1]=~/192\.168\.60\.200/)) { # Nicht rekursiv aufrufen (Boese !!)<br />
$url='http://192.168.60.200/ppics/updwn.pl?u='.$url if ( ($url=~/gif/i) || ($url=~/jpg/i) || ($url=~/jpeg/i) || ($url=~/png/i));<br />
}<br />
print $url."\n";<br />
$count++;<br />
}<br />
</code><br />
Wobei die 192.168.60.200 durch die IP des eigenen Webserver zu ersetzen waere. Die eigentliche &#8220;Magie&#8221; 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</p>
<p>Hier der Inhalt von /var/www/ppics/updwn.pl:<br />
<code><br />
use CGI qw/:standard/;<br />
use LWP::UserAgent;<br />
use GD;<br />
binmode STDOUT;</code></p>
<p>$|=1;<br />
my $url=param(&#8220;u&#8221;);</p>
<p>chomp $url;<br />
my $ctype=&#8221;;<br />
my $content=&#8221;;<br />
get_content($url,\$ctype,\$content);<br />
rotate(\$content,\$ctype) if ($ctype=~/image/i);<br />
print &#8220;Content-Type: &#8220;.$ctype.&#8221;\n\n&#8221;;<br />
print $content;<br />
print &#8220;\n&#8211;magicalboundarystring\n&#8221; if ($ctype=~m/image/);</p>
<p>sub get_content {<br />
my ($url,$ref_ctype,$ref_content)=@_;<br />
my $ua = LWP::UserAgent-&gt;new;<br />
$ua-&gt;agent(&#8220;MyApp/0.1 &#8220;);<br />
my $req = HTTP::Request-&gt;new(GET =&gt; $url);<br />
my $res = $ua-&gt;request($req);<br />
$$ref_ctype=$res-&gt;content_type;<br />
$$ref_content=$res-&gt;content;<br />
}</p>
<p>sub rotate {<br />
my ($ref_content,$ref_header)=@_;<br />
my $image=undef;<br />
$image=newFromPngData GD::Image($$ref_content) if ($$ref_header=~/png/i);<br />
$image=newFromJpegData GD::Image($$ref_content) if ($$ref_header=~/jpeg/i);<br />
$image=newFromGifData GD::Image($$ref_content) if ($$ref_header=~/gif/i);<br />
$image-&gt;rotate180();<br />
$$ref_header=&#8217;image/png&#8217;;<br />
$$ref_content=$image-&gt;png();<br />
}<br />
Wichtig: Die URL sollte nicht aus dem Internet erreichbar sein. Ansonsten hat man einen selbstgebastelten offenen Proxy&#8230;</p>
<p>Mithilfe der Parameter des Files /usr/bin/updwn.pl kann man sich jetzt sogar lustige ACLs bauen. (Rotiere nur fuer bestimmte IP&#8217;s oder fuer bestimmte URLs, etc&#8230;) Der Phantasie sind da keine Grenzen gesetzt.</p>
 <p><a href="http://ccblog.de/?flattrss_redirect&amp;id=262&amp;md5=272e4e06ec16763d5814031140299524" title="Flattr" target="_blank"><img src="http://ccblog.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2009/12/29/url-rewriting-mit-dem-squid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=int2k&amp;popout=1&amp;url=http%3A%2F%2Fccblog.de%2F2009%2F12%2F29%2Furl-rewriting-mit-dem-squid%2F&amp;language=de_DE&amp;category=text&amp;title=URL+Rewriting+mit+dem+Squid&amp;description=Aufmerksam+geworden+durch+diesen+Artikel%2C+mit+dem+ueber+den+Proxy+geholte+Webseiten+%28genauer+gesagt+werden+alle+Images+einmal+um+180+Grad+gedreht%29+on+the+Fly+manipuliert+werden+habe+ich+mir...&amp;tags=GD%2CGD%3A%3AImage%2Cimagemagick%2CLinux%2Cperl%2Cproxy%2Credirect%2Csquid%2Csquid.conf%2Curl_rewrite_program%2Cwebserver%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

