*nix Netzwerkprogrammierung

Folien

Folien für "*nix-Netzwerkprogrammierung"

Programmbeispiele

und_server.c - Beispiel für Unix-Domain-Socket (Empfänger)
und_client.c - Beispiel für Unix-Domain-Socket (Sender)
udp_server.c - Beispiel für UDP-Netzwerk (Empfänger)
udp_client.c - Beispiel für UDP-Netzwerk (Sender)
tcp_server.c - Beispiel für TCP-Netzwerk (Empfänger)
tcp_client.c - Beispiel für TCP-Netzwerk (Sender)
traceroute.c - Einfaches Traceroute, muss als root ausgeführt werden
ht10srv.c - Rudimentärer Webserver
ht10srv_fixed.c - Rudimentärer Webserver, korrigierte Version

Hinweise zu ht10srv

Ht10srv ist ein sehr einfacher HTTP-Webserver, der ausschließlich GET-Anfragen unterstützt. Am Ende des Vortrages wurden diese Seite und die Programmbeispiele via ht10srv im lokalen Netzwerk verteilt. Um den Server auf port 80 auszuführen, muss er als root gestartet werden. Dabei ist zu beachten, dass das Programm keine Double-Dot-Attacken abfängt und auf Anfrage z.B. auch /etc/shadow ausliefern würde. Es empfiehlt sich daher das Programm statisch zu kompilieren und in einer Change-Root-Umgebung zu starten:

$> gcc --static -o ht10srv ht10srv.c
$> sudo chroot ./ /ht10srv

Der Server führt keine Umformung von kodierten Zeichen in HTTP-Pfaden durch (z.B. %20 für Leerzeichen) und kann daher keine Dateien mit Sonderzeichen/Leerzeichen im Dateipfad ausliefern. Der Server überträgt korrekte mime-type informationen nur für .html, .gif und .jpeg Dasteien. Browserabhängig kann es daher sein, dass Webseiten, die von Javascript, CSS, PNG-Bidldern, etc. abhängen nicht korrekt angezeigt werden. Es gibt keinen Alias für den leeren Pfad, d.h. die Datei index.html muss beim Seitenaufruf explizit angegeben werden.

Die ursprüngliche Version von ht10srv hat Dateigrößen aufgrund eines Bugs nicht korrekt mitgeteilt. Ht10srv_fixed.c enthält die korrigierte Version. Danke an Erik und Robert für die Analyse und das Beheben des Fehlers.