Open Source im professionellen Einsatz
Linux-Magazin 09/2004

Skripte zur Arbeitserleichterung und ein Archiv-Modul

Gepackte Koffer

Jeder Programmierer nutzt für die tägliche Arbeit eine Sammlung persönlicher Skripte. Um vier aus dem eigenen Fundus geht es hier. Alle brauchen jedoch Perl-Module, die nicht auf jedem Rechner vorhanden sind. Das Perl Archive Toolkit löst die Abhängigkeit und packt Skripte und Module in ein handliches Archiv.

680

Wer auf mehreren Rechnern arbeitet, kennt das Problem, dass Perl-Skripte einen Rattenschwanz an Modulen benötigen. Sie zu installieren erfordert eine CPAN-Konfiguration und kostet Zeit. Autrijus Tang hat mit dem CPAN-Modul PAR (Perl Archive Toolkit) eine Möglichkeit geschaffen, Skripte inklusive aller erforderlichen Module in Archive zu verpacken, ähnlich wie das unter Java mit ».jar«-Dateien funktioniert.

Da PAR aber nicht unbedingt auf jeder Maschine verfügbar ist, um ein Archiv zu entpacken, gibt es sogar die Möglichkeit, Executables zu erstellen. Sie enthalten den Interpreter, alle nötigen Module, Bibliotheken sowie die Skripte. So lassen sich auch Perl-Skripte ausführen, denen im Normalfall sämtliche Module fehlen würden.

Auch für Entwickler, die oft einen Werkzeugkoffer voller kleiner Skripte mit sich führen, ist PAR sehr hilfreich. Skripte, die bei der täglichen Arbeit nützlich sind und kleinere Jobs erledigen, verwenden in der Regel Module aus der schier unendlichen Sammlung des CPAN. Die folgenden vier Skripte sind Teil meiner eigenen Werkzeugsammlung.

Passwortschnüffler

Ein kleiner Base-64-(De-)Kodierer zum Beispiel ist immer dann nützlich, wenn man im Web mit Basic-Authentifikation arbeitet. Neulich saß ich nämlich vor einem Dialogfenster wie in Abbildung 1 und hatte das Passwort vergessen. Glücklicherweise besaß der Browser einen Passwortmanager, der die nötigen Felder automatisch ausgefüllt hat. Aber leider besteht das Passwortfeld nur aus Sternchen.

Abbildung 1: Ein typisches Browserfenster bei Basic-Authentifikation. Leider ist das automatisch vom Browser ausgefüllte Passwortfeld mit Sternchen verschleiert.

Doch ein zwischen Browser und Server geschalteter Proxy (beispielsweise der aus dem Artikel von[1]) lässt schnell erkennen, dass ein String wie »dGVzdDpzZWNyZXQ=« durch die Leitung fließt (siehe Abbildung 2). Dummerweise überträgt der Browser Passwort und Benutzername mit dem Base-64-Algorithmus kodiert. Die Dekodierung ist dank Perl aber sehr einfach, das Skript aus Listing 1 bringt den Klartext zum Vorschein:

$ b64.pl -d dGVzdDpzZWNyZXQ=
test:secret

Listing 1:
»b64.pl«

01 #!/usr/bin/perl
02 ###########################################
03 # b64.pl - Encode and decode Base64
04 # Mike Schilli <m@perlmeister.com>, 2004
05 ###########################################
06 use warnings;
07 use strict;
08 
09 use Getopt::Std;
10 use MIME::Base64;
11 
12 getopts "d", my %opts;
13 
14 die "usage: $0 [-d] string" unless
15     defined $ARGV[0];
16 
17 if($opts{d}) {
18     print decode_base64($ARGV[0]), "n";
19 } else {
20     print encode_base64($ARGV[0]);
21 }

Abbildung 2: Ein Base-64-kodierter Passwortstring aus der Basic-Authentifikation (im Bild rot umrahmt) zwischen Webclient und Server lässt sich relativ einfach mit einem Proxy ausschnüffeln.

Der Benutzername ist »test«, das Passwort lautet »secret«. Diese Methode zeigt auch, dass Basic-Auth nur wenig nützt, wenn jemand an der Leitung schnüffelt. Umgekehrt zeigt folgender Aufruf, dass »b64.pl« auch die Kodierung beherrscht:

$ b64.pl test:secret
dGVzdDpzZWNyZXQ=


Weitere nützliche Anwendungen gibt es viele: Base-64-Kodierung kommt immer dann zum Einsatz, wenn es darum geht, binäre Daten in ein anzeigbares Format umzuwandeln. Viele E-Mail-Programme kodieren beispielsweise binäre Attachments mit Base 64.

Prozent-Hex im URL-Wald

Auch in vielen URLs befinden sich kodierte Sequenzen. Wenn der Browser per GET-Request einen Parameter an den Server schickt, sieht das zum Beispiel folgendermaßen aus:

http://host.com/cgi/foo?p=a%20b%2Fc


Der Browser hat jedes Sonderzeichen in das Format »%XX« umgewandelt, wobei »XX« dem Ascii-Hexadezimalwert entspricht. Mit dem Skript in Listing 2 lässt sich der Hex-String leicht dekodieren:

$ urlcode.pl -d a%20b%2Fc
a b/c

Listing 2:
»urlencode.pl«

01 #!/usr/bin/perl
02 ###########################################
03 # urlcode.pl - URL en/decode
04 # Mike Schilli <m@perlmeister.com>, 2004
05 ###########################################
06 use warnings;
07 use strict;
08 
09 use Getopt::Std;
10 use URI::Escape;
11 
12 getopts "d", my %opts;
13 
14 die "usage: $0 [-d] string" unless
15     defined $ARGV[0];
16 
17 if($opts{d}) {
18     print uri_unescape($ARGV[0]), "n";
19 } else {
20     print uri_escape($ARGV[0]), "n";
21 }

Auch »urlcode.pl« beherrscht das Kodieren genauso wie das Dekodieren. Um einen String zu Testzwecken zu encoden, wandelt folgender Aufruf eine Zeichenkette ins URL-Format um:

$ urlcode.pl "a b/c"
a%20b%2Fc


Dank des CPAN-Moduls »URI::Escape« ist das Skript trivial, es testet lediglich mit »Getopt::Std«, ob »-d« auf der Kommandozeile angegeben wurde, und ruft dann entsprechend »uri_escape« oder »uri_unescape« aus dem Modul »URI::Escape« auf.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus

Ausgabe 04/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.