Open Source im professionellen Einsatz
Linux-Magazin 11/2010
© S. Hofschlaeger, Pixelio.de0

© S. Hofschlaeger, Pixelio.de0

Perl-Skript öffnet Bezahl-WLANs

Schlüsseldienst

Ein Perl-Skript erspart dem eiligen Nutzer das Herumklicken auf Splash-Pages von Wifi-Providern, indem es Geschäftsbedingungen automatisch abnickt und den Zugriff freischaltet.

589

Bevor Hotel-, Internetcafé- oder Flughafen-WLANs neue User ins Netz lassen, leiten sie deren Browser-Requests um (Abbildung 1). Der Surfwillige muss sich dann erst durch eine Splash-Page (Abbildung 2) quälen. Dort erwarten ihn entweder ellenlange Nutzungsbedingungen, die sowieso niemand liest, Checkboxen, die zu aktivieren sind, oder Werbung oder alle drei Ärgernisse zugleich.

Abbildung 1: Obwohl der User Google.com wünscht, leitet der WLAN-Provider ihn zunächst unfreiwillig zu seiner eigenen Splash-Page um.

Abbildung 2: Solche Splash-Pages muss das Perl-Skript überwinden, um seinem Anwender den Weg zum Zugang zu ebnen.

Wifi-Provider wollen so die MAC-Adresse der Clients im Wifi-Netz zentral erfassen und die User an die Spielregeln erinnern. Erst nachdem das geklärt ist, hebt der Accesspoint die Schranke und beliebige Verbindungen stehen offen.

Manchmal möchte der User aber gar keinen Webzugang, sondern nur einen SSH-Tunnel öffnen, und wundert sich dann bei offener Shell und geschlossenem Browser, warum er zwar eine IP-Adresse zugewiesen bekommt, aber offensichtlich eine Firewall den Zugriff aufs Internet blockiert.

Flexible Plugin-Taktik

Das Perl-Skript »splash« hilft in solchen Fällen aus der Patsche. Es wühlt sich blind durch die Webformulare, klickt auf alle Links, checkt die Checkboxen, sammelt die Cookies ein und schickt sie brav an den Wifi-Provider zurück, dem es auf diese Weise vorgaukelt, mit einem Browser samt lebensechtem Bediener zu kommunizieren.

Doch wie kann ein einfaches Skript mit potenziell Tausenden verschiedenen Splash-Seiten zurechtkommen? Wifi-Provider könnten nicht nur beliebig komplexe Formulare erzeugen, sondern auch schwere Geschütze auffahren, etwa mit Javascript tricksen oder gar Flash-Animationen einsetzen, um automatische Skripte abzuwehren.

Deshalb fährt das Skript eine Plugin-Strategie, mit der es sich an neue Verfahren anpassen lässt. Jedes Plugin probiert nach seiner eigene Methode die Splash-Seite zu überlisten: Das Plugin »ClickAllLinks.pm« klickt alle Links auf der Seite durch, während »CheckBoxFill.pm« alle dargestellten Checkboxen des ersten Webformulars aktiviert und anschließend einen eventuell vorhandenen Submit-Button drückt. Neu entwickelte Plugins fügt der User ins Plugin-Verzeichnis ein, aus dem sie das Skript ohne weitere Konfiguration automatisch aufschnappt und als neue Taktik ausprobiert.

Nach jedem Plugin-Lauf prüft »splash« erneut, ob ein Request für [http://google.com] auch wirklich die Webseite des Suchmaschinenriesen erreicht oder ob stattdessen noch immer die Splash-Page erscheint. Falls sich immer noch kein Erfolg eingestellt hat, kommt das nächste Plugin mit neuer Methode zum Zug, andernfalls bricht das Skript mit einer Erfolgsmeldung ab.

Bis die Mauer fällt

Abbildung 3 zeigt, wie das Skript reagiert, falls einfach noch keine Netzwerkverbindung existiert, wohl weil der User noch keines der verfügbaren Wifi-Netzwerke selektiert oder noch nicht das erforderliche WPA-Passwort eingegeben hat. Solange die Google-Anfrage nur Fehler liefert oder länger als 5 Sekunden blockiert, probiert es das Skript nach kurzer Verschnaufpause einfach noch mal. Sobald der Client eine IP zugewiesen bekommt und sich bei Webanfragen wenigstens die Splash-Page einstellt, schickt es ein Plugin nach dem anderen in die Schlacht (Abbildung 4), bis eines schließlich die Barriere überwindet.

Abbildung 3: Falls keine Netzwerkverbindung besteht, versucht das Skript in Abständen von 5 Sekunden den Google-Server zu erreichen.

Abbildung 4: Trifft das Skript auf eine Splash-Page, versucht es zunächst nach dem Click-all-Links-Verfahren alle Links durchzuklicken.

Listing 1 zeigt die Basisklasse »SplashJumper« aller Plugins, die lediglich einen Konstruktor definiert. Sie zieht das CPAN-Modul Module::Pluggable hinzu und übergibt ihm die Parameter »require => 1«. Das Modul durchforstet daraufhin das Unterverzeichnis »SplashJumper/Plugin« nach ».pm«-Dateien und lädt sie wegen der »require«-Anweisung alle in das gerade laufende Skript.

Listing 1:
»SplashJumper.pm«

01 ###########################################
02 package SplashJumper;
03 ###########################################
04 use strict;
05 use warnings;
06 use Module::Pluggable require => 1;
07
08 sub new {
09     bless {}, shift;
10 }
11
12 1;

Linux-Magazin kaufen

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

Deutschland

Ähnliche Artikel

  • Heilig nach Punkten

    Der Instant-Messenger-Client Gaim spricht nicht nur viele Protokolle, sondern lässt sich auch noch mit Perl-Plugins erweitern. Eines versetzt sogar Atheisten in die Lage, katholisch aufzusteigen.

  • Schädlingsbekämpfung

    Spammer senden nicht nur E-Mails, sie nisten sich auch in Diskussionsforen und Blogs ein, um mit Link-reichen Pseudopostings die großen Suchmaschinen hinters Licht zu führen. Ein Perl-Skript macht sauber.

  • Perl-Snapshot

    Passend zum Titelthema: Mike
    Schilli nutzt Mouse und Moose, um
    Distributionsrepositories abzufragen.

  • Foto-Labor

    Gimp, das GNU Image Manipulation Program, verbessert und manipuliert digitale Bilder mit anspruchsvollen Filterfunktionen. Statt immer wieder die gleichen Manöver mit der Maus auszuführen, lassen sich die Vorgänge mit Gimps Perl-Schnittstelle sogar automatisieren.

  • Tierische Kurssprünge

    Ein in Perl geschriebenes Pidgin-Plugin ignoriert dröge Börsentage, an denen die Kurse stillstehen, aber schlägt per Instant Message Alarm, falls die Aktien anfangen Achterbahn zu fahren.

comments powered by Disqus

Ausgabe 08/2016

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