Open Source im professionellen Einsatz
Linux-Magazin 12/2004

Fernsteuerung via Instant Messenger

Kontaktmann

Wer von außen durch die eigene Firewall ins LAN gelangen will, braucht entweder ein geheimes Loch oder einen kooperativen Agenten auf der Innenseite. Ein Jabber-Client nimmt von innen aktiv Kontakt zum öffentlichen Jabber-Server auf und wartet auf Instruktionen seiner Internet-Buddies in Form von Instant Messages. Michael Schilli

458

Um vom Internet aus Aktionen im lokalen Netzwerk auszulösen, könnte man ein Loch in die hoffentlich vorhandene Firewall bohren und einen lokalen Webserver ins Internet stellen. Dynamisch vergebene IP-Adressen des Internetproviders verfolgen Services wie Dyndns .org und erlauben einen beinahe statischen Zugriff. Einfacher geht's heute allerdings mit einem Agenten oder Bot (wohl von Robot): Ein auf der Innenseite der Firewall laufender Client hängt im öffentlichen Instant-Messaging-Netzwerk Jabber und versteht Kommandos, die ihm in Form von Textnachrichten übermittelt werden.

Der Bot akzeptiert nur Befehle von Clients aus seiner Buddy-Liste und erlaubt lediglich vier Aktionen: die Last auf dem Agenten-Rechner bestimmen, die öffentliche Adresse des Routers abfragen (Kommando: »ip«) und das Licht im Schlafzimmer meiner Wohnung in San Francisco ein- beziehungsweise ausschalten (»lamp on|off«).

Das Skript »agent.pl« nutzt Log::Log4perl und führt in der Datei »/tmp/agent.log« Buch über die ausgeführten Transaktionen. Die Zeile 24 in Listing 1 erzeugt ein neues »Net::Jabber::Client«-Objekt, das einen Instant-Message-Client implementiert.

Rückruf

Bevor aber »agent.pl« in die Haupt-Eventschleife in Zeile 61 eintritt, sind ab Zeile 26 noch einige Callbacks für eintretende Ereignisse zu definieren. Der »onauth«-Handler ab Zeile 48 kommt an die Reihe, wenn der Client sich erfolgreich mit dem in Zeile 17 angegebenen Nutzernamen beim Server angemeldet hat. Der Handler fragt dann mittels »RosterGet()« die Buddy-List ab und speichert sie im globalen Hash »%ROSTER«.

Die anschließend abgesetzte Methode »Presence()« schickt allen Clients im Roster eine »presence«-Nachricht, die ihnen anzeigt, dass »agent.pl« online ist. Ab diesem Zeitpunkt zeigt ein »gaim«-Client mit »mikes-agent-sender« als eingeloggtem Benutzer »mikes-agent-receiver« als aktiven Client in seiner Buddy-List an (Abbildung 3).

Abbildung 3: Der Bot erscheint in der Buddy-List des Senders.

Der »message«-Callback ab Zeile 28 kommt zum Zuge, wenn der Kommandeur eine Nachricht an »agent.pl« schickt. Jeder beliebige Client im Jabber-Netzwerk könnte dies tun. Deshalb prüft Zeile 34, ob es sich beim Gesprächspartner auch um einen bekannten und berechtigten handelt. Im vorliegenden Fall darf es nur »mikes-agent-sender« sein, da die Buddy-List des Clients nur ihn enthält (siehe Abschnitt "Installation"). Andere Anfrager lässt die Funktion abblitzen und kehrt in Zeile 37 zur Hauptschleife zurück.

Endlos

Das im Message-Text geschickte Steuerungskommando kramt in Zeile 41 die »GetBody()«-Methode hervor und gibt sie an die ab Zeile 71 definierte »run _cmd«-Funktion weiter. »Execute()« ab Zeile 61 nimmt Verbindung mit dem Jabber-Server auf »Jabber.org« auf und meldet »mikes-agent-receiver« dort an. Die Haupt-Eventschleife erholt sich auch bei temporär abreißender Verbindung und sollte niemals enden. Falls sie jedoch nach zu vielen Fehlern dennoch abbricht, räumt Zeile 68 auf und das Programm endet.

Abbildung 1: Der Bot hinter der Firewall führt Befehle aus, die ein Jabber-Client vom Internet sendet.

Abbildung 2: Die Internet-gestützte Lampensteuerung in der Übersicht.

Linux-Magazin kaufen

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

Deutschland

Ähnliche Artikel

  • Laber-Tanten

    Als Gegenstück zu den bekannten Instant-Messaging-Systemen etabliert sich zunehmend das Open-Source- basierte Jabber. Auf einer soliden XML-Protokollgrundlage bieten Server und Clients alle Features, die kommunikationsfreudige Anwender erwarten. Zudem ist Jabber offen für Chats mit fremden Welten.

  • E-Baywatcher

    Wer in letzter Sekunde in Versteigerungen eingreifen will, lässt sich rechtzeitig von einem Perl-Agenten daran erinnern. Der Agent sucht auf Ebay nach Stichworten und informiert seinen Mandanten sofort per Instant Message, wenn sich eine passende Auktion dem Ende nähert.

  • Eingestöpselt

    Der Instant Messenger Pidgin unterstützt von Haus aus viele Protokolle und bietet zahlreiche Funktionen. Was dem Tausendsassa unter den Chatclients fehlt, rüsten verschiedene Plugins unkompliziert nach. Der Artikel lässt es fünfmal klicken.

  • 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.

  • VoIP-Software Ekiga 3.0 mit vielen Neuerungen

    Ekiga hieß früher Gnome-Meeting und ist eine VoIP-Anwendung mit Videosupport. Das Ekiga-Projekt hat seine Software nun stark überarbeitet, Version 3.0 bringt zahlreiche neue Funktionen mit.

comments powered by Disqus

Ausgabe 06/2017

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