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:
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
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





