Einrichten eines Netzwerkdiensts

Content

Das Anbieten eines Netzwerkdiensts und dessen Annahme kann von dem eigentlichen Netzdienst getrennt werden. Ein Werkzeug, das diese Idee umsetzt ist tcpserver von Dan Bernstein, der hierzu eine Schnittstelle entwickelte mit dem Namen UCSPI entwickelte: https://cr.yp.to/proto/ucspi.txt

tcpserver erhält als Parameter eine Netzwerkadresse einschließlich einer Portnummer und ein beliebiges Kommando. Für jede neue Verbindung wird das Kommando frisch gestartet, wobei die Standard-Ein- und Ausgabe mit der Netzwerkverbindung verbunden sind. Das Kommando ist mitsamt seinen umfangreichen Optionen hier beschrieben: https://cr.yp.to/ucspi-tcp/tcpserver.html

Hier ist ein Beispiel:

theon$ tcpserver 0 22045 date & echo $! >service.pid
[1] 26434
theon$ telnet 127.0.0.1 22045
bash: tcpserver: command not found
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
[1]+  Exit 127                tcpserver 0 22045 date
theon$ kill $(cat service.pid) && rm -f service.pid
bash: kill: (26434) - No such process
theon$ 

Wenn „0“ angegeben wird, dann werden alle verfügbaren lokalen Adressen verwendet (einschließlich localhost = 127.0.0.1). Die Portnummer ist hier 22045. Wenn die Portnummer bereits verwendet wird, gibt es eine Fehlermeldung:

theon$ tcpserver 0 22046 date & echo $! >service.pid
[1] 26438
theon$ tcpserver 0 22046 date
bash: tcpserver: command not found
bash: tcpserver: command not found
[1]+  Exit 127                tcpserver 0 22046 date
theon$ kill $(cat service.pid) && rm -f service.pid
bash: kill: (26438) - No such process
theon$ 

Welche Netzwerkverbindung ein Prozess hat, können Sie mit lsof (list open files) ermitteln:

theon$ tcpserver 0 22047 date & echo $! >service.pid
[1] 26442
theon$ lsof -p $(cat service.pid)
bash: tcpserver: command not found
bash: lsof: command not found
[1]+  Exit 127                tcpserver 0 22047 date
theon$ kill $(cat service.pid) && rm -f service.pid
bash: kill: (26442) - No such process
theon$ 

Der Status „LISTEN“ bedeutet hier, dass Verbindungen akzeptiert werden. Die „:22045“ gibt die Adresse an, wobei „“ der 0 bei tcpserver entspricht, d.h. pauschal alle verfügbaren Adressen einschließt. Die Nummer hinter dem Doppelpunkt spezifiziert die Portnummer. Die Wahl der Portnummer kann auch dem System überlassen werden, wenn hier ebenfalls eine 0 angegeben wird:

theon$ tcpserver 0 0 date & echo $! >service.pid
[1] 26447
theon$ lsof -p $(cat service.pid)
bash: tcpserver: command not found
bash: lsof: command not found
[1]+  Exit 127                tcpserver 0 0 date
theon$ kill $(cat service.pid) && rm -f service.pid
bash: kill: (26447) - No such process
theon$ 

Aufgabe