S využitím utility netcat (nc
) napište skript fungující jako jednoduchý síťový server
poslouchající na TCP portu 2505 a jeho klient.
Po připojení na port 2505 pošle server klientu řádek netslay/1.0 ready
a bude čekat na příkaz (text ukončený
novou řádkou). Server podporuje čtyři příkazy:
quit
— Po uzavření aktuálního TCP spojení se server ukončí (není-li tento příkaz použit, po
ukončení spojení server čeká na další).list cmd
— Server vrátí klientu 200 List follows
a seznam PIDů a celou příkazovou
řádku procesů v systému, které se jmenují cmd (oba sloupce jsou odděleny tabulátorem, nemají žádnou hlavičku).
Nevypisují se procesy, které běži pod uživatelem root.term PID
— Procesu s daným PID pošle server signál TERM
. Pokud v systému
žádný takový proces neexistuje, vrátí server klientu 400 No process
. Pokud
proces beží pod uživatelem root, vrátí 400 Process owned by root
. Pokud se poslání signálu nepodařilo,
vrátí 500 Unable to terminate
, v pozitivním případě 200 Process terminated
.kill PID
— Analogicky jako v předchozím případě, jen posílá signál KILL
(odpovědi serveru se podle toho také přizpůsobí).Klient bude mít jako první parametr název stroje, na který se má připojit a jako druhý a třetí parametr příkaz odpovídající
příkazům a parametrům serveru (quit
, list
, term
, kill
). Po připojení na server
nejprve ověří identifikační řetězec (netslay/1.0 ready
), pošle příkaz a čeká na odpověď. Stavovou odpověď serveru
(200
, 400
apod.) vypíše na chybový výstup (je-li kód jiný než 200, nastaví také nenulovou návratovou
hodnotu), samotnou informační odpověď serveru vypíše na standardní výstup.
Kromě toho bude ještě klient sám implementovat příkaz softkill cmd
, který nejprve pošle všem procesům
cmd na serveru signál TERM a pokud některý z nich po 15 sekundách bude stále ještě běžet, tak také signál KILL.
Podaří-li se všechny takové procesy zabít, bude návratová hodnota klienta 0, jinak jiná hodnota.
Termín odevzdání: 17. 5. 2006 19:00 CEST