W ramach każdego zadania dokonają państwo re implementacji istniejącego protokołu komunikacji. Przy czym Państwa wersja będzie miała takie cechy:
Projekt na 3.0
Program pozwala na chatowanie z użytkownikami po sieci lokalnej za pomocą wiadomości Broadcast. Dokładniej: za pomocą broadcastów wykrywamy jacy użytkownicy są widoczni w sieci lokalnej — następnie możemy rozmawiać z nimi już bezpośrednio.
Program musi spełniać takie wymagania:
Wersja na 4.0
Przedstawione są dwa różne klienty napisane w różnych językach, klienty te są kompatybilne — tj. mogą rozmawiać ze sobą.
Czyli program pozwalający na chatowanie między użytkownikami.
System składa się z dwóch elementów: serwera i klienta.
Każdy użytkownik ma swój login oraz hasło. Klient by wysłać wiadomość do innego użytkownika musi:
Dodatkowo:
W dużych serwerowniach problemem okazuje się być inwentaryzacja tego co jest podłączone do sieci w danej serwerowni. Chcielibyśmy zrobić system który automatycznie podaje informacje o serwerach.
Będzie działał on tak: nowy serwer po uruchomieniu wysyła zapytanie (do całej sieci!): “Czy jest tutaj może system nadzorcy”. Na zapytanie to odpowiada tylko system nadzorcy który:
Na takie pytanie serwer odpowiada wysyłając parametry.
Zadania dla systemu nadzorcy:
Zadania dla klienta:
- Adres MAC karty sieciowej
- Ilość rdzeni
- Ilość RAM
- Zajętość procesora
- Lista 20 procesów zajmujących najwięcej czasu procesora w danej chwili?
- Lista 20 procesów zajmujących najwięcej pamięci RAM
Note
Oczywiście istnieje już gotowy system który spełnia te wymagania, jest to np. ralph.
Protokół HTTPS pozwala na uzyskanie bezpiecznego połączenia z serwerem HTTP, (czyli zapewnia on poufność danych oraz ich integralność).
Protokół PTTP (Plain Text Transfer Protocol) jest uproszczoną wersją HTTP, składa się on z jednej komenty:
GET /path/to/file PTPP/1.0
serwer po jej otrzymaniu odeśle plik, kończąc jego nadawanie za pomocą ciągu znaków:
<<PTTP END>>
Państwa program dodatkowo będzie pozwalał na “szyfrowanie” protokołu PTTP za pomocą algorytmu Base64 (algorytm ten zamienia dowolny ciąg bajtów na ciąg zawierający tylko znaki które da się wyświetlić w ramach zestawu znaków ASCII).
Mają państwo za zadanie wykonać serwer PPTP(U) oraz klienta PPTU.
Serwer PPTP(U) ma takie funkcjonalności:
Klient powinien mieć takie funkcjonalności:
Note
Do wykonania kodowania Base64 w linuksie służy polecenie base64:
echo GET /wiki/Plac_Niebia%C5%84skiego_Spokoju HTTP/1.1 | base64
R0VUIC93aWtpL1BsYWNfTmllYmlhJUM1JTg0c2tpZWdvX1Nwb2tvanUgSFRUUC8xLjEK
echo R0VUIC93aWtpL1BsYWNfTmllYmlhJUM1JTg0c2tpZWdvX1Nwb2tvanUgSFRUUC8xLjEK | base64 -d
GET /wiki/Plac_Niebia%C5%84skiego_Spokoju HTTP/1.1
W tym zadaniu nie ma serwera — ale klienci mogą wymieniać się plikami.
Każdy klient określa listę katalogów które “udostępnia” innym systemom.
Po włączeniu klient wysyła pytanie do sieci lokalnej “Kto obsługuje protokół Rumba”, wszystkie inne klienty odpowiadają że obsługują.
Potem klient może wysłać do inneogo klienta jedno z dwóch żądań:
Użytkownik może:
Bardzo przydatną usługą są sieci wymiany plików peer-to-peer działają one w następujący sposób:
W Waszym systemie pliki będą identyfikowane za pomocą sum kontrolnych sha512, suma kontrolna funkcją która ma następujące cechy:
Note
By uzyskać sumę kontolną pliku należy w linuksie wisać:
jb ~ $ sha512sum rand.data
c320503fbc8b1970d5595e03ca43c8a3f0252bf6c78d1783e61ca1b0e18a7a03461d6b25afa219fe2cd4fdd879e2b50144469a35b388c903c2f8f4a4428a30d6 rand.data
Rozwiązanie składa się z dwóch programów: klienta i serwera.
Klient ma następujące funkcjonalności:
Jedną z najlepszych metod omijania cenzury Internecie (oraz zapewniania sobie anonimowości jest sieć TOR (The Onion Router). Teraz przytoczę jej krótki opis. Są w niej trzy rodzaje bytów:
Połączenie klienta działa tak:
Klient łączy się do jednego z węzłów pośredniczących (powiedzmy P1) i wysyła pakiet danych, Pakiet ów jest zaszyfrowany tak że tylko P1 może go odczytać po odszyfrowaniu P1 otrzymuje dwie informacje: adres kolejnego węzła P2, oraz zaszyfrowaną paczkę danych którą P1 powinien wysłać do P2, P2 otrzymuje pakiet który odszyfrowuje (by uzyskać adres P3) i tak dalej. Węzeł PN po odszyfrowaniu ma wysłać pakiet do węzła końcowego (WK), który wysła go w postaci odszyfrowanej do prawdziwego odbiorcy.
Odbiorca myśli że kontaktuje się z węzłem końcowym. Gdy wyśle dane do niego te są powtarzają tą samą drogę (ale w odwrotnym kierunku), tj: dane przechodzą przez takie komputery WK -> PN -> P(N-1) -> (...) -> P1 -> Klient.
Zasadnicze pytanie brzmi skąd WK wie jaką drogą posłać dane z powrotem — odpowiedź jest prosta: nie wie! Odsyła dane tam skąd je dostał.
Państwa system powinien działać podobnie, tylko że nie musi zawierać szyfrowania.
Spełnia on takie wymagania:
Dane formalne
Projekt na trzy osoby.