Skip to main content.

Navigation:

Aufgabe 4:

Lernziel

Aufgabenbeschreibung

Im Rahmen der vierten praktischen Aufgabe soll der bisher implementierte Kommandointerpreter um die internen Kommandos tftp und rwho erweitert werden.

bsshell> tftp [-p port] ⟨host-ip⟩ ⟨put | get⟩ ⟨filename⟩
bsshell> rwho

Das Kommando tftp soll einen TFTP-Client (trival file transfer protokol) umsetzen. Dabei handelt es sich wie der Name schon sagt, um ein sehr einfaches Protokoll zur Übertragung von Dateien. Die Übertragung kann entweder vom Client zum Server (write) oder vom Server zum Client (read) erfolgen. Die besondere Schwierigkeit bei der Realisierung eines TFTP-Clients liegt darin, dass für die Kommunikation UDP/IP, das heißt datagrambasierte Kommunikation, verwendet wird. UDP/IP ist verbindungslos, so können Pakete:

  1. duplieziert werden,
  2. in der Reihenfolge vertauscht oder
  3. komplett verlohren gehen.

Auf diese Fehlverhalten bei der Übertragung muss der Client entsprechend der Vorgaben des TFTP-Protokolls reagieren. Dazu ist mit timeouts und retransmissions zu arbeiten.

Die Umsetzung des Kommandos 'rwho' soll mit Hilfe von SUN-RPCs erfolgen. Dazu gehört ein RPC basierter Server, der auf einem vorher festgelegtem Rechner (IP-Addresse) laufen soll und einem Client, der von unserem Kommandointerpreter dargestellt wird. Der Server soll die folgenden Funktionen anbieten:

Unsinnige Aufrufe sollen in den Serverfunktionen durch Plausibilittstests erkannt und mit entsprechenden Fehlercodes zurückgewiesen werden.

Implementierungshinweise

Teil A
Zuerst solltet ihr damit beginnen den TFTP-Client als eigenständiges Program zu implementieren. Danach könnt ihr den Client als Kommando 'tftp' in den Komanndointerpreter integrieren.

Hinweis: Testen könnt ihr euren TFTP-Client mit einem normalen TFTP-Server zusammen mit unserem TFTP-Proxy. Der TFTP-Proxy wird zwischen Client und Server der TFTP-Verbindung geschaltet und dient dazu Fehler, die euer Client abfangen soll, in die Verbindung einzuschleusen.
Weitere Infos: socket(2), connect(2), select(2), recvfrom(2) und sendto(2)
Teil B
Bei der Umsetzung des Kommandos 'rwho' solltet ihr wie bei der Umsetzung des Kommandos 'tftp' vorgehen: "Zuerst den Client und Server als eigenständige Programme implementieren und danach den Client als entsprechendes Kommando in den Interpreter integrieren.

Hinweis: Hinweise zur Implementierung eines SUN-RPC basierten Client/Servers könnt ihr der folgenden Beschreibung entnehmen.
Weitere Infos: rpcgen(1)

Vorgabe

Da die Aufgabe nur den Funktionsumfang nicht aber die Schnittstelle des Kommandointerpreters erweitert, gibt es zu dieser Aufgabe keine Vorgabe.

Hilfestellung