Open Source im professionellen Einsatz

Regular Expressions

Wer Admin-Skripte programmiert, kommt kaum um reguläre Ausdrücke herum. Dabei muss er eine Art Reverse Engineering der verarbeiteten Daten durchführen. Es gilt, Muster in den Eingabedateien zu erkennen, zu verstehen und in Regeln zu fassen. Mehrmaliges Nachjustieren bleibt nicht aus.

Eine Skriptsprache für den Administrator muss also gute Unterstützung für Regular Expressions bieten – und das tut Ruby. Wie in Perl lassen sich einfache Zeichenketten finden (Listing 4). Auch Gruppen, sogar verschachtelte, beherrscht die Sprache, wie Listing 5 zeigt. Und wie das Listing 6 demonstriert, eignen sich reguläre Ausdrücke gut als Prüfinstrumente, ob Zeilen in einer Eingabedatei auskommentiert oder unlesbar sind.

Listing 6

Textzeilen prüfen

01 # auskommentierte Zeilen auslassen
02 File.foreach("users.txt") do |line|
03   next if line =~ /^#/
04 # nicht verarbeitbare Zeilen auslassen
05   next unless line =~ /^([a-z]+)\s+(\w+)$/
06 # sonstige Zeilen verarbeiten
07   login, name = $1, $2
08   [...]
09 end

Listing 5

Regex mit Gruppen

01 corpus =~ /fo(..)s/   # => 0
02 $1                    # => "xe"
03
04 corpus =~ /fo(.(.))s/ # => 0
05 [$1, $2]              # => ["xe", "e"]

Listing 4

Reguläre Ausdrücke

01 corpus = "foxes and goats"
02 corpus =~ /foxes/         # => 0
03 corpus =~ /and/           # => 6
04 corpus =~ /and$/          # => nil
05 corpus =~ /.es\s+/        # => 2

Aufs Netzwerk zugreifen

Zum umfangreichen Repertoire von Ruby gehört außerdem die Netzwerk-Programmierung. Es beherrscht TCP-, UDP- und Unix-Domain-Sockets. So lässt sich bereits ein einfacher Webzugriff realisieren (Abbildung 3). Packt der Programmierer das Öffnen in einen Block, schließt Ruby den Socket am Ende automatisch:

Abbildung 3: Mit Rubys Sockets ist in nur wenigen Zeilen ein Skript geschrieben, das eine Webseite aufruft.

Abbildung 3: Mit Rubys Sockets ist in nur wenigen Zeilen ein Skript geschrieben, das eine Webseite aufruft.

Abbildung 4: Mit Ruby kann der Administrator eigene Tools zur Systemverwaltung programmieren. Hier hat das Skript Benutzerkonten angelegt, die es aus einer CSV-Datei gelesen hat.

Abbildung 4: Mit Ruby kann der Administrator eigene Tools zur Systemverwaltung programmieren. Hier hat das Skript Benutzerkonten angelegt, die es aus einer CSV-Datei gelesen hat.

require "socket"
TCPSocket.open("www.ard.de", 80) do |socket|
 socket.puts "GET / HTTP/1.0\n\n"
 puts socket.read
end

Der Einsatz von Sockets eignet sich gut, um Rubys Fehlerbehandlung mittels Exceptions zu demonstrieren. Listing 7 zeigt ein Codeschnipsel, das dreimal versucht eine Verbindung mit einem Webserver aufzunehmen, ehe es schließlich mit einer Fehlermeldung aufgibt.

Listing 7

Exceptions

01 require "socket"
02
03 attempts = 0
04
05 begin
06   attempts += 1
07   TCPSocket.open("www.example.com", 80) { |socket| [...] }
08 rescue Exception => e
09   if attempts < 3 then sleep 5 and retry
10   else puts "Es reicht! #{e}"
11   end
12 end

In vielen Situationen braucht sich der Programmierer aber gar nicht auf die Ebene der Sockets herabzulassen. Er kann beispielsweise zur HTTP-Bibliothek greifen und mit wenigen Zeichen die Slashdot-Startseite aufrufen:

require "net/http"
body = Net::HTTP.get("slashdot.org", "/")

Listing 8 verfeinert den HTTP-Zugriff, indem es das strukturierte »response« -Objekt verwendet, in dem sich der HTTP-Status und die Header finden. Ruby bringt in seiner Standardbibliothek sogar einen kompletten HTTP-Server namens Webrick mit.

Listing 8

HTTP-Header

01 require "net/http"
02
03 response = Net::HTTP.get("slashdot.org", "/")
04 puts response.body if response.code == 200
05 puts response.each_header.select { |key, value| key =~ /^content/}

Für den ernsthaften Einsatz bietet sich aber eher Eventmachine [4] an, ein skalierbarer Ruby-Webserver nach asynchronem Modell. Anhand seiner Dokumentation ist in wenigen Codezeilen etwa ein einfacher Echo-Server umgesetzt. Der Autor dieses Artikels hat Eventmachine erfolgreich in Produktivinstallationen als Loadbalancer oder als SSL-Proxy für andere Rechner eingesetzt.

Äußerst nützlich für den Sysadmin ist auch die Pcap-Bibliothek [5], ein Ruby-Wrapper um die Packet-Capture-Library Libpcap. Mit ihrer Hilfe lesen Ruby-Skripte rohen Netzwerktraffic, und dabei ist die Bibliothek einfach zu benutzen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook