Hosted at Sorceforge.net next up previous contents
Next: About this document ... Up: Hitchhiker's Guide to the Previous: DNS   Contents

Subsections

Muhahaha - oder: Automatisierung

In diesem Kapitel wird gezeigt, wie man die ganzen Protokolle, insbesondere HTTP, mit Linux-Tools automatisieren kann; Wer keine Linux-Kenntnisse hat, wird dieses Kapitel nicht interressieren.

Whois

Auch wenn man mit dem Whois-Protokoll sehr viele Informationen über Domains sammeln kann, ist das manuelle auffinden des zuständigen Whois-Servers auf Dauer mühsam75.

Deswegen gibt es für gute Systeme einige Whois-Clients, die diesen Vorgang automatisieren und auch den störenden Disclaimer automatisch entfernen.

Der Client whois ist dabei besonders praktisch, da er bei vielen modernen Distributionen gleich mitgeliefiert wird (herunterladbar von http://www.linux.it/~md/software/). Die Bedienung ist überaus einfach (siehe Screenshot

Figure 36: whois auf pro-linux.de
\begin{figure}\begin{center}\begin{small}
\begin{verbatim}iblech@thestars guid...
...f
...iblech@thestars guide $\end{verbatim}
\end{small}\end{center}\end{figure}
[*]).

Daytime

Das Daytime-Protokoll (beschrieben [*]) ist sehr nützlich für die Synchronisation der Systemuhren vieler Rechner in einem Netzwerk. Aber wer will schon manuell in einem größeren LAN alle Uhren stellen?

Da kann auch ein simples Shellskript eingreifen, was zum Beispiel als Cronjob76 ausgeführt werden kann:

date --set="telnet server daytime | grep :`"
hwclock --systohc --utc

Die letzte Zeile synchronisiert die Systemuhr von Linux mit der RTC-Uhr77 des BIOS.

HTTP

Die Automatisierung bei HTTP ist natürlich besonders interessant, da heutzutage die meisten Dinge über HTTP laufen. Man kann zum Beispiel jeden Tag eine Website herunterladen und prüfen, ob sie seit dem letzten Tag geändert wurde, und, wenn ja, sie sich automatisch per Mail zuschicken lassen. Oder man manipuliert ein bisschen78 an Votes...

Lynx

Lynx, fast schon ein Klassiker, ist eigentlich nur zum text-basierten Surfen (siehe Screenshot

Figure 37: Lynx auf linide.sf.net
\begin{figure}\begin{center}\begin{small}
\begin{verbatim}...
[*]) gedacht, lässt sich aber auch prima automatisieren.

Um zum Beispiel einfach den Sourcecode einer Seite abzurufen, benutzt man

lynx -source http://linide.sf.net/
Der Quelltext wird dann auf dem Terminal angezeigt bzw kann in Pipes weiterverarbeitet werden. Will man schon die gerenderte Version sehen, benutzt man
lynx -dump http://linide.sf.net/

Das Beispiel von oben, zu prüfen ob eine Website geändert wurde und gegebenenfalls per Mail verschicken, ist dann in Shell-Skript schnell implementiert:

OMD5="$(md5sum < /tmp/seite)"
lynx -dump http://linide.sf.net/uebersicht.html > /tmp/seite
[ "$OMD5" = "$(md5sum < /tmp/seite)" ] || \
  mail -s Linux\ Guide < /tmp/seite

Ein GET-Request ist klar, wie im Kapitel über HTTP [*] beschrieben, also einfach die Parameter mit einem ? getrennt von der eigentlichen URL lynx als Parameter übergeben. POST-Requests sind ein bisschen schwieriger, sind aber auch sehr leicht möglich. Um die Abbildung [*] mit Lynx via POST umzusetzen, verwendet man

echo "name=ingo
alter=15
os=Gentoo
===" | lynx -post_data -source http://host/umfrage.php
und bekommt den Sourcecode der Ergebnisseite zurück.

Allerdings ist Lynx ein bisschen begrenzt, da er zum Beispiel nicht den Referer (siehe [*]) setzen kann, Cookies nicht automatisch akzeptiert und in einer Datei gespeichert werden können79, usf.

curl

curl ist da schon wesentlich mächtiger. Neben der Fähigkeit, auch Dateien hochzuladen, die uns weniger interessiert, bietet curl volle Unterstützung für Cookies, GET- und POST-Requests, Location-Changing sowie den schon angesprochenen Referer.

Standardsyntax

Um die eben erwähnten Features von curl zu aktivieren, sind einige Paramater nötig:

Die Standardsyntax für curl lautet also

curl -b /tmp/cookies$$ -c /tmp/cookies$$ -e referer-url;auto \
  -L -m 17 -o output url

GET-Requests

Wie schon bei lynx erwähnt, sind GET-Requests nichts anderes als verlängerte URLs, also besteht auch hier keine Notwendigkeit für eine neue Syntax82.

POST-Requests

Ähnlich wie bei lynx, kann83 auch bei curl ähnlich verfahren werden:

echo "name=Ingo&alter=15&os=Gentoo" | \
 curl -d @- ...
Alternativ gibt es auch die Möglichkeit, von curls besserer Syntax gebrauch zu machen:
curl -d "name=Ingo" -d "alter=15" -d "os=Gentoo" ...
Mir gefällt allerdings folgendes Konstrukt am Besten:
{
 echo "name=Ingo"
 echo "alter=15"
 echo "os=Gentoo"
} | tr '\n '&' | curl -d @- ...
So behält man selbst bei langen Feldern die Übersicht.



Footnotes

... mühsam75
auch angesichts der Tatsache, dass es auch bei Whois Weiterleitungen gibt...
... Cronjob76
Cronjobs werden vom crond (dem Cron-Daemon) regelmäßig zu bestimmten Zeiten ausgeführt. Sie können mit Hilfe des Kommandos crontab -e festgelegt werden.
... RTC-Uhr77
Real Time Clock
...bisschen78
grin
... können79
was normalerweise unerwünscht ist, nämlich ständig Cookies anzunehmen, ist bei der Automatisierung sehr nützlich, manchmal sogar notwendig, da einige Seiten einen nur bei gesetzem Cookie akzeptieren
... praktisch80
in Verbindung mit einem IP-Wechsel via Proxy
... Festplatte81
bzw. in das Device, das auf /tmp gemountet wurde
... Syntax82
Obwohl curl mit der -G-Option gerade dies bietet
... kann83
muss aber nicht

Hosted at Sorceforge.net next up previous contents
Next: About this document ... Up: Hitchhiker's Guide to the Previous: DNS   Contents
Ingo Blechschmidt 2003-08-07