Open Source im professionellen Einsatz

Ruby als Schnüffler

Ein Skript wie in Listing 9 genügt Root, um einen kleinen Traffic-Monitor zu betreiben. Es definiert die zu überwachende IP-Adresse und erzeugt ein Sniffer-Objekt, das die angegebene Netzwerkkarte beschnüffelt. Für jedes Paket, das der Sniffer mitbekommt, prüft das Programm, ob der Absender oder der Empfänger mit der angegebenen IP-Adresse übereinstimmt, und zählt die übertragenen Bytes zum Akkumulator »sent_bytes« beziehungsweise »received_bytes« hinzu. Die Schleife »sniffer.each_packet« kann der Anwender auf der Kommandozeile mit der Tastenkombination [Strg]+[C] abbrechen. Dann läuft der Rest des Skripts zu Ende ab, schließt den Sniffer und gibt eine Zusammenfassung der gesendeten und empfangenen Pakete aus.

Listing 9

Pcap-Bibliothek

01 require "pcaplet"
02
03 HOST_IP = Pcap::IPAddress.new("10.0.0.1")
04
05 received_bytes = 0
06 sent_bytes = 0
07
08 sniffer = Pcap::Pcaplet.new("-i eth1")
09 sniffer.each_packet do |pkt|
10   next unless pkt.ip?
11
12   src, dst, = pkt.ip_src, pkt.ip_dst
13
14   if src == HOST_IP
15     sent_bytes += pkt.size
16   elsif dst == HOST_IP
17     received_bytes += pkt.size
18   end
19 end
20 sniffer.close
21
22 puts "#{HOST_IP} hat #{sent_bytes} Bytes gesandt und #{received_bytes} empfangen."

Fit bei Dateiformaten

Damit der Programmierer Dateien nicht stets von Hand auseinandernehmen oder zusammenstückeln muss, bringt Ruby Bibliotheken für gebräuchliche Dateiformate wie Json oder Base64 (für E-Mail-Attachments) mit. Auch CSV-Unterstützung ist mittlerweile eingebaut, früher musste man sie noch gesondert über das Faster-CSV-Gem installieren. Listing 10 liest und schreibt zeilenweise.

Listing 10

CSV-Verarbeitung

01 require "csv"
02
03 # Zeilen als Arrays einlesen
04 CSV.foreach("users.csv") do |(login, name)|
05   puts login if name =~ /And/
06 end
07
08 # Zeilen als Hashes einlesen
09 CSV.foreach("users.csv", :headers => true) do |row|
10   puts row["login"] if row["name"] =~ /And/
11 end
12
13 # Array in Zeilen schreiben
14 CSV.open("users.csv", "wb") do |csv|
15   csv << ["george", "Georgey Porgey"]
16   csv << %w(gertrude Gertrude)
17 end

Wer mit Ruby in Zip-Archive sehen oder sie verändern möchte, greift zur Zip-Gem [6]. Sie kann Dateien auflisten, extrahieren und hinzufügen. Zum Arbeiten mit XML gibt es die mitgelieferte Bibliothek Rexmal, die vollständig in Ruby implementiert ist. Sie eignet sich, um einfache Dokumente zu erzeugen oder Elemente und Werte per Xpath auszulesen.

Wer Gnomes native XML-Bibliothek Libxml2 installiert hat, kann alternativ Libxml-ruby [7] als praktischen Wrapper benutzen, der wesentlich bessere Performance bietet. Eine besonders schöne Programmierschnittstelle zeichnet Nokogiri [8] aus, das sowohl Xpath- als auch CSS-3-Selektoren unterstützt.

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