Wstęp do systemów operacyjnych i sieci komputerowych - LAB


Technikalia

Termin: piątek, 8:30-10:00, LAB11 (3070), Prowadzący: Michał Adamaszek, Kontakt: aszek@mimuw.edu.pl

Zasady zaliczania:

Są trzy zadania, pierwsze większe (z basha) i dwa pozostałe mniejsze. Ocena z laboratorium jest w przybliżeniu równa
liczba_rozwiązanych_zadań + 2
W przybliżeniu tzn. na połówki stopnia mogą wpłynąć: jakość rozwiązania (w obie strony), gigantyczne spóźnienie, aktywność na ćwiczeniach itp. Ocena 3 to po prostu "zal", oceny od 4 w górę są uwzględniane jako pozytywny bonus do oceny z egzaminu.

Różne materiały:


Egzaminy itp.


Zajęcia 1, 6.10, Wprowadzenie

1. Ankieta. Proszę o wypełnienie so-ankieta.txt i wysłanie jej mailem na aszek@mimuw.edu.pl. Jej jedynym celem jest poznanie wstępnych umiejętności uczestników. Przy każdej opcji proszę wpisać liczbę od 0 do 3 (0 = w ogóle nie znam, 3 = znam dobrze):
2. Podstawy. Polecenie man. Poruszanie się po katalogach (cd, ls). Struktura katalogów w Linuxie.

Zajęcia 2, 13.10, Użytkownicy, uprawnienia, pliki

Materiały. 1. Użytkownicy, uprawnienia. Użytkownicy, grupy (groups, finger, w, last, passwd). System plików: szczegóły polecenia ls (ls -al), prawa dostępu (rwx, polecenia chmod, chown, chgrp), dowiązania twarde i symboliczne (ln). Obsługa systemu plików: mv, cp, rm, touch, mkdir, pwd, du. Uwidacznianie typów plików w Midnight Commanderze.
2. Najprostsze operacje na plikach tekstowych. cat, head, tail. Dalsze: wc, sort, uniq, cut.
Ćwiczenia. Ćwiczenia dotyczące użytkowników najlepiej testować na maszynie students.
  1. Łańcuszek dowiązań symbolicznych może mieć co najwyżej długość 10 (sprawdź). Po co takie ograniczenie?
  2. Sprawdzić do jakich grup się należy. Do jakich grup należy prowadzący laboratorium?
  3. Przetestować dokładnie jak działają uprawnienia w odniesieniu do katalogów. Np. załóżmy, że mamy katalog foo, w nim plik bar. Przy jakich kombinacjach uprawnień rwx do katalogu i pliku można odczytać zawartość pliku, stworzyć nowy plik w katalogu, odczytać zawartość katalogu? Co się stanie, jeśli wykonamy polecenie cat foo/bar nie mając uprawnienia r do katalogu? A co jeśli nie mamy x do katalogu? Poeksperymentować.
  4. Kiedy był ostatnio zresetowany komputer students?
  5. Czy można odebrać sobie wszystkie prawa dostępu do pliku? Załóżmy, że plik ma uprawnienia 0004. Co to znaczy, i czy jego właściciel może go wtedy odczytać? A skasować?
  6. Który podkatalog w Twoim katalogu domowym zajmuje najwięcej miejsca?
  7. Jak działa opcja -R w chmod i wielu tym podobnych poleceniach?
  8. Zmusić polecenie rm żeby nie dopytywało się o potwierdzenie usunięcia za każdym plikiem. Podobnie, zmusić do usuwania całych katalogów z podkatalogami.
  9. Kiedy ostatnio prowadzący laboratorium logował się na students?
  10. Wylistuj wszystkie pliki w katalogu posortowane po dacie ostatniej modyfikacji.
  11. Co robi polecenie tac? Skąd nazwa
  12. (!)Wyznacz długość najdłuższego polecenia, które "ostatnio" uruchomiłaś/eś. (Hint: co jest w pliku ~/.bash_history?. Co dalej?)
  13. Mamy plik liczby.txt a w każdym jego wierszu liczbę. Czy sort liczby.txt dobrze je posortuje? Jak to poprawić?
  14. Stwórz plik, w którym znajduje się kilka linii a w każdej imię, nazwisko i liczba (w tej kolejności). Następnie wypisz cały plik posortowany po każdej z tych zmiennych. Wypisz też same nazwiska i same imiona.
  15. Jak i po co działa tail -f?

Zajęcia 3, 20.10, Polecenia, potoki

Materiały. 1. Wejście/wyjście procesów. Standardowe wejście, wyjście i wyjście błędów. Operatory przekierowania wejścia/wyjścia z/do pliku/procesu: <, >, >>, |. Przetwarzanie w potokach (pipes).
2. Więcej poleceń stworzonych do użycia z operatorem | w potokach: sort, uniq, cut, wc, tr, head, tail, tee, echo, cat, nl. Przykład:
who | cut -f1 -d" " | sort | uniq | wc -l
Polecenie podaje liczbę aktualnie zalogowanych użytkowników. Najlepiej przeanalizować go uruchamiając coraz dłuższe jego początkowe fragmenty. Inny:
ppc386 a.pas 2> /dev/null > a.txt
Kompiluje program a.pas przy czym wszystkie komunikaty o błędach wyrzuca do kosza, a wszystkie inne komunikaty kompilatora zapisuje w pliku a.txt (dzięki temu nic nie jest wypisane na ekran).
3. Niektóre urządzenia specjalne. Często warto mieć pod ręką specjalne urządzenia, które wyglądają jak pliki (w szczególności można w stosunku z/do nich przekierowywać) n.p. /dev/null - zjada wszystko co się do niego pisze (czarna dziura), /dev/zero - można z niego czytać ciągle zera, /dev/urandom - podaje bajty pseudolosowe.
4. Procesy. Tworzenie i zabijanie, środowisko, PID procesu (ps, kill, top, free). Uruchamianie procesów w tle.
Ćwiczenia
  1. W pliku osoby.txt znajdują się: imię, nazwisko, płeć, PESEL i liczby punktów zdobyte za trzy zadania, te ostatnie oddzielone średnikami. Proszę napisać polecenia realizujące następujące zadania:
    1. Wypisać wszystkie różne nazwiska, posortowane alfabetycznie.
    2. Wypisać imiona i nazwiska wszystkich osób w kolejności alfabetycznej według nazwisk.
    3. Wypisać posortowane malejąco liczby punktów zdobyte za drugie zadanie.
    4. Znaleźć trzy najstarsze osoby i wypisać ich imię i nazwisko, przy czym najpierw wypisać kobiety a potem mężczyzn.
    5. Wypisać wszystkie różne miesiące (numerycznie) w których bohaterowie pliku mają urodziny.
    6. Wypisać liczbę różnych ocen za zadanie trzecie.
    7. Wypisać imiona i nazwiska osób posortowane malejąco według oceny uzyskanej za trzecie zadanie.
    8. Wypisać nazwiska osób z czterema najwyższymi wynikami za zadanie pierwsze.
    9. Zapisać wszystkie nazwiska do pliku n.txt, a PESEL-e do p.txt (jednym poleceniem)
  2. Wypisz nazwę i rozmiar największego pliku w katalogu domowym.
  3. Skonstruuj polecenie wypisujące 10 linię z pliku (chyba, że jest mniej niż 10 linii, wtedy wypisuje pierwszą).
  4. Skonstruuj polecenie wypisujące 10 linię z pliku (chyba, że jest mniej niż 10 linii, wtedy wypisuje ostatnią).
  5. Co zrobią polecenia "cat a > a" i "cat < a >> a" (Uwaga!)? Czym różni się "cat a > a" i "cat a | cat > a" ?
  6. Wziąć dowolny plik tekstowy i wypisać jego 20 pierwszych linii do jednego pliku, pierwszych 10 linii do drugiego i pierwsze 3 linie do trzeciego pliku (jednym poleceniem).
  7. Jak przy pomocy polecenia kill unicestwić wszystkie swoje procesy na raz? (Uwaga: wcześniej zachowaj wszystkie swoje dane :) ).

Zajęcia 4, 27.10, Skrypty I

Materiały. 1. Zmienne środowiskowe. Tworzenie i modyfikowanie zmiennych środowiskowych (export, printenv). Podstawowe zmienne środowiskowe: HOME, USER, PATH, PWD, OLDPWD, MAIL, HISTFILESIZE. Ustalanie początkowej wartości zmiennych środowiskowych, pliki .bashrc, .bashprofile.
2. Skrypty. Skrypt jest niczym innym jak pewnym (długim) poleceniem, które dla wygody, zamiast w jednej monstrualnie długiej linii poleceń, zapisujemy w pliku z wcięciami, komentarzami itp. Język programowania bash-a umożliwia (mniej więcej) użycie podobnych struktur sterujących jak inne języki imperatywne. Ogólna konstrukcja skryptu, składnia. Ściągnij przykładowy skrypt: sample_script.
2a. Zmienne i parametry. Deklarowanie i odwołania do zmiennych. Zmienne środowiska $USER, $HOME. Parametry skryptu ($1, ...), zmienne specjalne ($*, $# - lista i liczba parametrów).
2b. Sterowanie. Pętle for, while, polecenia seq, read. Instrukcja wyboru case. Instrukcja warunkowa if i polecenie test, [ ] wraz ze sprawdzaniem warunków logicznych, porównaniami i licznymi opcjami. Polecenie sleep.
2c. Obliczenia. Wykonywanie obliczeń arytmetycznych, $[].
Ćwiczenia
  1. Ogólne:
    1. Napisz skrypt, który co 5 sekund wyświetla liczbę aktualnie zalogowanych użytkowników.
    2. Napisz skrypt, który wypisze rozmiar każdego katalogu, który został podany jako parametr (niektóre parametry mogą być śmieciami).
    3. Wypisać tekst Dzisiaj jest... po czym nastąpi bieżąca data.
    4. Wypisać 10 linii tekstu, przy czym zawartością i-tej linii ma być dokładnie i liter "A".
    5. Napisać skrypt, który sprawdza, czy dostał dokładnie 2 parametry i jeśli nie, to krzyczy na uzytkownika.
    6. Napisać skrypt obliczający sumę k-tych potęg liczb od 1 do n, gdzie k i n są naturalne i są podane jako parametr skryptu. Obsłużyć błędy w stylu: nadmiar lub niedobór parametrów, ujemne parametry.
    7. Wypisać na ekran po jednej (np. pierwszej) linii z każdego pliku w bieżącym katalogu.
    8. Napisz skrypt, który wypisze swoje parametry posortowane alfabetycznie (możesz chcieć użyć polecenia tr).
    9. Napisz skrypt, który zliczy liczbę podkatalogów, plików różnego typu (wykonywalnych, nie) i dowiązań symbolicznych w katalogu podanym jako parametr po czym wypisze stosowną statystykę.
    10. Mamy kilka plików, w każdym kilka liczb, po jednej w wierszu. Z każdego pliku chcemy wybrać największą liczbę, a następnie te największe liczby wypisać w kolejności rosnącej. Jak to zrobić? Nie chcemy używać żadnych plików tymczasowych.
  2. osoby.txt
    1. Oblicz łączną liczbę punktów zdobytych za zadania 1,2,3 przez wszystkie osoby.
    2. Wypisz dane osoby, która zdobyła najwięcej punktów w sumie.
    3. Napisz skrypt, który przekształci osoby.txt w plik z tymi samymi danymi a dodatkowo na końcu każdej linii doda czy osoba zaliczyła, czy nie, zależnie od sumy punktów. Nazwa pliku docelowego jest parametrem skrytpu.
    4. Skrypt, który jako parametr dostaje słowo "imie", "nazwisko" lub "pesel" i wypisuje dane osób posortowane właśnie według tego klucza.
    5. Skrypt, który dane każdej osoby zapisze do innego pliku zatytułowanego nazwiskiem tej osoby.
  3. Wpadki. Każdy z poniższych krótkich skryptów działa w szczególnych przypadkach nie tak jak byśmy chcieli (np. nie działa). Jak to poprawić?
    1. echo $10
    2. cat $1
    3. if [ $a == $b ] then ....
    4. for linia in $(cat plik); do echo kolejna linia to $linia; done
    5. echo Tekst (z kawalkiem w nawiasie)

Zajęcia 5, 03.11, Skrypty II

Skrypty, cd. Funkcje w skrypcie i przesuwanie parametrów (shift). Przykład na końcu sample_script.
Dzisiaj:

Zajęcia 6, 10.11, Grep

Materiały 1. Wyrażenia regularne. Wyrażenie regularne to wzorzec, który opisuje język, tzn. zbiór słów, które do tego wzorca pasują. Operacje na wzorcach: konkatenacja, powtarzanie, alternatywa. Przykład: abc*(a|d) - słowa zaczynające się od ab po których następuje kilka c a następnie a lub d.
2. Gwiazdka w bashu. Rozwijanie symbolu * przez interpreter (np. ls *.txt).
3. grep służy do znajdowania linii pasujących do wzorca (lub których część pasuje do wzorca), lub przeczesywania listy plików w poszukiwaniu pasujących do wzorca. Egrep ma przyjaźniejszą składnię wyrażeń regularnych. Podstawowe konstrukcje: *, +, {n} - liczność powtórzenia poprzedniego symbolu, [] - zbiór symboli, | - alternatywa, . - dowolny symbol, [^] - dopełnienie zbioru symboli, ^, $ - początek, koniec wiersza. Grep-a można używać wewnątrz potoku lub podając listę plików. Bardzo liczne opcje grepa pozwalają modyfikować jego wyjście. Szczegóły w manie. Przykłady: 4. find - wyszukiwanie plików. Znajduje pliki spełniające zadane warunki: nazwa, typ pliku, określone uprawnienia, rozmiar, właściciel, data utworzenia, modyfikacji etc. Akcje: wypisanie (sformatowanej) nazwy, wykonanie polecenia, listowanie pliku. Przykłady: 5. Ćwiczenia
  1. Napisz wyrażenia regularne rozpoznające następujące zbiory słów (abstrakcyjnie i/lub w składni grep-a):
    1. zawierających co najmniej dwie spośród liter a,b,c
    2. nie zawierających żadnej cyfry
    3. takich, że po każdym wystąpieniu litery a jest cyfra
    4. PESEL-e osób urodzonych w latach 80-tych w lipcu
    5. loginy na students osób o imieniu na literę pomiędzy D i W
    6. zawierających parzystą liczbę liter a
    7. ciągi cyfr w których każda następna cyfra jest większa od poprzedniej
    8. zawierających fragment który składa się z co najmniej 5 cyfr pod rząd
    9. komentarze w języku C lub Pascalu
  2. Zaopatrzywszy się w plik passwd znajdź:
    1. Nazwiska studentów zaczynające się na "A".
    2. Nazwiska studentów dłuższe niż 12 znaków i to takie, które nie są podwójne (bez myślnika).
    3. Liczbę osób urodzonych w maju.
    4. Największy numer indeksu mniejszy niż 200000 i jego posiadacza.
    5. To samo, ale wśród studentów JSIM.
    6. Liczbę studentów mających imię zaczynające się na literę między D i G.
    7. Napisz skrypt, który dostając nazwisko znajduje nazwisko studenta poprzedniego w porządku alfabetycznym.
    8. Osoby których imię zaczyna się na tę samą literę co nazwisko.
  3. Ze wszystkich plików w bieżącym katalogu wyodrębnij linie w których znajduje się jakaś liczba (oddzielnie, otoczona białymi znakami) (i tylko je wypisz, bez dodatkowych napisów takich jak nazwa pliku).
  4. Wypisz listę osób aktualnie zalogowanych na students, które zalogowane są z komputerów poza siecią wydziału lub UW (przynajmniej na tyle na ile to się da łatwo stwierdzić).
  5. Dla chętnych: zapoznaj się z poleceniem sed

Zajęcia 7, 17.11, Make

Materiały 1. Cele. Kompilowanie dużego projektu (programistycznego lub np. w TeX-u), gdy zmieniamy tylko nieliczne pliki. Automatyzacja.
2. Makefile. Podstawy składni: cele, zależności, polecenia:
	target: dependencies
	      commands
	
Koniecznie tabulator! Zmienne. Reguły .PHONY. Zmienne automatyczne "$@" - bieżący cel, "$<" - pierwsza zależność, "$^" - lista zależności. Cel "all".
3. Zaawansowana składnia. Schematy reguł. Podstawienia. Wykonanie polecenia basha.
Ćwiczenia. Napisz plik(i) makefile, który(e):
  1. synchronizuje zawartość pliku 2.txt z zawartością 1.txt, tzn. przepisuje z 1 do 2, chyba, że 2 jest aktualne
  2. robi aktualne kopie zapasowe wszystkich plików .txt z bieżącego katalogu w katalogu kopie
  3. jak wyżej, oraz zapisuje do osobnego pliku nazwy plików, które zostały zaktualizowane
  4. jak wyżej, oraz pozwala usunąć ten dodatkowy plik
  5. jak wyżej, oraz potrafi zarchiwizować katalog kopia w pliku o nazwie yy-mm-dd.tgz, gdzie yy-mm-dd - bieżąca data
  6. kompiluje ustalony dokument TeXowy do pliku .ps
  7. kompiluje wszystkie dokumenty TeXowe w bieżącym katalogu do plików .ps
  8. jak wyżej, oraz do plików .pdf
  9. jak wyżej, oraz czyści pliki tymczasowe
  10. obejrzyj i zrozum ten oto makefile do dokumentów w TeXu. Natomiast ten tutaj jest dużo prostszy a równie przydatny.

Zajęcia 8, 24.11, Fork()

Materiały Uwagi dla piszących w języku C. Należy załączać pliki nagłówkowe unistd.h, sys/types.h, sys/wait.h

1. Procesy. Przypomnienie o procesach, PID-ach, poleceniu ps.
2. fork(). Funkcja fork() służy do tworzenia nowego procesu, który dziedziczy wszystko po rodzicu: pamięć, deskryptory plików, zmienne itp. Wartość zwracana wskazuje w którym procesie jesteśmy (w rodzicu - PID potomka, w potomku - 0). Oba procesy wznawiają wykonanie w tym samym miejscu.
3. wait(). Kulturalny proces powinien czekać na zakończenie jego potomków. wait() czeka na dowolnego, waitpid(int pid,...) na konkretnego. Funkcja jest blokująca.
4. Inne funkcje. Nazwy mówią same za siebie: getpid(), getppid(), halt, exit... Ponadto, do osiągnięcia efektu wstrzymania procesu na chwilę: sleep(secs), wymaga nagłówka unistd.h.
5. Błędy. Obsługa błędów mogących powstać przy używaniu wywołań systemowych. Standardowe zachowanie tych funkcji: zwraca coś nieujemnego jeśli OK, -1 jeśli błąd, przy czym kod błędu jest zapisywany w zmiennej globalnej errno.
6. Ćwiczenia.

Zajęcia 9/10/11, 01.12/08.12/15.12, fork()-dup()-exec()

Materiały 1. Deskryptory. Tablica deskryptorów, standardowe deskryptory 0 (stdin) i 1 (stdout). Można tworzyć nowe pary deskryptorów (łącza nienazwane) funkcją pipe - jeden do pisania, drugi do czytania. Pisanie i czytanie z nich przez funkcje write, read. Składnia: Mozna też nałożyc na nie strukturę FILE i pisać przez scanf, printf, a może i cin, cout. Deskryptor (dowolny) zamykamy close.
2. exec*() uruchamia nowy zadany program w miejsce naszego, ale z zachowaniem dotychczasowego PID, rodzica i deskryptorów. Pamięć starego programu jest natomiast likwidowana. Składnia:
execl(nazwa_progr, param0, param1, ...., NULL)

3. dup(), dup2() - powielanie deskryptorów.
4. fork-dup-exec. Standardowy sposób tworzenia łącza komunikacyjnego między procesem i jego potomkiem. Tworzymy parę par (tzn. dwa wywołania pipe) deskryptorów do komunikacji (ew. tylko jedną parę jeżeli chcemy komunikację tylko w jedną stronę); w procesie potomnym duplikujemy je na standardowe we/wy i odpalamy w procesie potomnym nowy program, który przez standardowe we/wy rozmawia teraz z rodzicem. Szczegóły w przykładzie.
5. Sygnały. Funkcja systemowa kill(pid, sig). Przechwytywanie i obsługa sygnałów.
6. Ćwiczenia na opanowanie składni i działania funkcji pipe, dup i exec. 6. Ćwiczenia inne.

Zajęcia 12, 5.01, IP, DNS, Internet, telnet

Materiały 1. Adresowanie. Struktura adresu IPv4. Polecenie ifconfig, klasy adresowe, maska podsieci.
2. DNS. Domeny, serwery DNS, translacja nazw. Hierarchiczna struktura domen. Znajdowanie serwera nazw domeny. Odpytywanie serwerów nazw: host, nslookup. Typy wpisów konfiguracyjnych serwera DNS (czwarta kolumna w host -v: NS, MX, TXT, A itp.). Opcje host -t typ_zapytania, host -t any, host -a pozwalają poznać bardziej szczegółowe dane. Plik /etc/resolv.conf.
3. ping. Polecenia ping, traceroute itp. służą do badania przepływu pakietów do hosta.
4. Organizacje. RIR-y i LIR-y. Europejski RIR: RIPE oraz jego baza Whois: http://www.ripe.net/whois. Znajdowanie informacji o domenie lub zakresie adresowym poprzez bazę Whois.
5. Porty, usługi, protokoły. Port jest pojęciem umownym, w zasadzie liczbą. Łącząc się ze zdalnym hostem łączymy się z jakimś jego portem. Standardowe usługi (services) sieciowe używają standardowych portów, ich lista jest w /etc/services (np: HTTP-80, SMTP-25, POP3-110, SSH-23, FTP-21, NNTP-119). Podstawą łączenia ze zdalnym hostem jakimkolwiek protokołem jest polecenie telnet nazwa_hosta nazwa_portu. Dalej następuje interakcja za pomocą protokołu odpowiedniego dla danej usługi.
6. RFC. Skąd wiadomo, jaki jest protokół dla danej usługi? Celem dokumentów RFC jest m.in. standaryzacja różnorakich protokołów. Aktualnie RFC3700 zawiera listę bieżących numerów RFC dla poszczególnych usług.
Ćwiczenia.
  1. Znajdź adresy IP poszczególnych komputerów wydziałowych: students, duch. A zodiac?
  2. Podaj zakres adresów należących do podsieci opisanej jako 213.130.23.0/8.
  3. Pewien komputer o adresie 130.10.10.23 należy do podsieci o masce 255.255.255.240. Ile numerów ma pula adresowa tej podsieci? Czy należy do niej adres 130.10.10.30?
  4. Który komputer na wydziale ma adres 10.1.1.143 ?
  5. Jak działa ta strona: www.mojnumerip.pl ? Czego dowiedzą się z niej osoby pracujące na różnych komputerach na wydziale? Wyjaśnij, co się dzieje.
  6. Znajdź w bazie whois informacje o domenach: mimuw.edu.pl, edu.pl, pkp.pl itp.
  7. Z bazy whois można korzystać też łącząc się z odpowiednim portem serwera tej usługi. Którym?
  8. Używając jedynie polecenia host znajdź numer telefonu do firmy obsługującej serwis onet.pl.
  9. Znajdź dostawcę internetu do którego puli adresów przynależy adres 80.252.0.145. A 80.251.0.145?
  10. Dowiedz się o serwery nazw domeny mimuw.edu.pl.
  11. Jak znaleźć numer IP komputera students widzianego spoza sieci wydziału? Odpytaj poleceniem host odpowiedni serwer DNS.
  12. (!) Wyślij do prowadzącego (na adres aszek@mimuw.edu.pl) maila przy użyciu wyłącznie programu telnet. W tym celu zapoznaj sie ze skróconym opisem protokołu SMTP: http://www.cs.cf.ac.uk/Dave/PERL/node175.html. Z jakim serwewem należy się połączyć aby wysyłać pocztę? Nadawcą maila ma być Kubus Puchatek.
  13. (!) Ściągnij jakąś stronę przez HTTP używając tylko telnet-u. Szybkie wprowadzenie do protokołu HTTP:http://www.jmarshall.com/easy/http/
  14. Spóźniony prezent gwiazdkowy: zapoznaj sie z następującymi RFC: RFC2324, RFC1882, RFC2550, RFC3092, RFC1437. Więcej: http://datacomm.org/rfc.html.

Zajęcia 13, 12.01, Konfiguracja, trasowanie i tcpdump

Materiały 1. Konfiguracja. Katalog /etc/init.d, skrypty startowe, /etc/init.d, /etc/sysconfig/net.... Interfejsy lo i eth0. Polecenie ifconfig w pełnej okazałości. Konfigurowanie swojej sieci, np.:
ifconfig eth0 192.168.0.1 up
Inne parametry: netmask, broadcast.
2. Trasowanie. Polecenia ping, traceroute służą do diagnostyki połaczenia ze zdalnym komputerem. Interpretacja wyników. Ustalanie bram i tras dla pakietów wychodzących z naszego komputera: route. Ustalanie serwerów DNS z których chcemy korzystać: /etc/resolv.conf.
3. tcpdump. Przechwytywanie pakietów. Tcpdump wypisuje wszystkie dane z nagłówka pakietu a jeśli chcemy to i cały pakiet. Podstawy składni: mamy opcje (jak wypisywać) i zapytania (jakie pakiety przechwytywać). W zapytaniach warunki logiczna z and, or i not.
4. Budowa pakietu, protokoły. Hierarchia IP-->TCP/UDP/ICMP-->HTTP/SSH/... (izw. ISO/OSI). Interpretacja niektórych pól z nagłówków wypisywanych przez tcpdump.
Ćwiczenia.
  1. Przetestuj ping do różnych komputerów: na wydziale, w Polsce, w Australii.
  2. Którędy podróżuje pakiet do www.onet.pl? Do www.google.com? Gdzie to jest?
  3. Przez jaki komputer wychodzą pakiety z sieci wydziałowej na świat?
  4. (!) Przy pomocy ifconfig skonfigurujcie komputery w laboratorium tak, aby były połaczone w jedną podsieć. Sprawdźcie, że reszta wydziału przestała istnieć, i że możecie się między sobą np. pingować, logować etc.
  5. Dla dwóch połączonych w podsieć komputerów sprawdźcie tcpdumpem jak wyglądają pakiety między wami przesyłane.
  6. Odfiltruj tylko pakiety protokołu ping i pingujcie swoje komputery.
  7. Sprawdź działanie tcpdumpa na interfejsie lokalnym, np. logując się do siebie przez ssh.
  8. Odfiltruj tylko pakiety przychodzące ze students.
  9. Odfiltruj tylko pakiety przychodzące do Twojego komputera ze students.
  10. (!) Zaobserwuj, np. na przykładzie połaczenia ssh, cykl życiowy połączenia tcp: SYN, SYN+ACK, ..., FIN.
  11. Obejrzyj całą zawatrośc danych przesyłanych np. w interakcji przez HTTP.
  12. Oglądaj i filtruj na milion sposobów to co się dzieje w sieci wydziałowej :)

Zajęcia 14, 19.01

Materiały 1. Poczta. Polecenie mail jest przydatne do wysyłania poczty np. ze skryptu. Jest (trochę) bardziej zaawansowane niż telnet na port 25. Standardowe użycie:
echo "Tresc maila" | mail -s "Temat maila" adresat@gdzies.pl
Można dodać załącznik (-a), (blind) carbon copies (-b, -c), zmienić adres w polu From: (-r) etc.
2. Organizacja poczty. Przechowywanie: mailboxy i maildiry, różnice między nimi. Mailboxy i maildiry nadają się do ręcznego przeglądania, np. grep-em.
3. Struktura pojedynczej wiadomości. E-mail jest protokołem całkowicie tekstowym, nagłówek wiadomości zawiera wszystkie pola niezbędne do jej dostarczenia i dodatkowe informacje, dalej treść. Załączniki są częścią treści. Najważniejsze pola: From:, To:, Subject:, Cc:, Bcc:, Reply-To: Message-ID:, Received:.
4. formail. Wyciąganie poszczególnych danych z maila oraz przekształcanie maili ułatwia program formail. Działanie: wybieranie określonych pól z nagłówka, lub ekstrahowanie treści (body) maila, generowanie nagłówków nowych wiadomości na podstawie innych wiadomości, generowanie nagłówków wiadomości z zadanych pól. Formail czyta z wejścia i pisze na wyjście.
UWAGA. Używając narzędzi opisanych poniżej należy bardzo uważać, aby nie doprowadzić do nieskończonej pętli mailowej! W razie czego należy szybko usunąć plik .forward.
5. Mechanizm .forward. Pomiędzy otrzymaniem maila przez serwer pocztowy a dostarczeniem go do skrzynki użytkownika można go jakoś przetworzyć. Najbardziej podstawowy mechanizm polega na umieszczeniu w katalogu domowym pliku .forward z podaną pewną akcją. Akcja ta zostanie zastosowana do każdego nadchodzącego maila. Może to być adres e-mail na który mail należy przesłać, nazwa programu (po symbolu pipe-a |) którym należy go obsłużyć, lub kilka akcji oddzielonych przecinkami. Przykład pliku .forward:
jasio@o2.pl, "| head -1 >> ~/pierwsze.txt"
Spowoduje on przeforwardowanie każdego nadchodzącego maila do jasia oraz dopisanie pierwszej linii maila (co to za linia?) do pliku pierwsze.txt.
6. procmail. Jest to bardziej zaawansowany filtr poczty. Aby go uaktywnić kierujemy w .forward wszystkie maile do tego programu: |procmail Po nadejściu maila procmail czyta go i dopasowuje do reguł zawartych w pliku konfiguracyjnym .procmailrc (uprawnienia 0600). Jeżeli dopasowanie do jakieś reguły sie uda wykonywana jest akcja związana z tą regułą i przetwarzanie się kończy (z jednym wyjątkiem o którym dalej). Jeżeli po przejrzeniu wszystkich reguł maila nie udało się do żadnej dopasować to trafia on w najzupełniej zwyczajny sposób do skrzynki pocztowej. Reguła jest wyrażeniem regularnym do którego jest dopasowywana treść maila (dokładnie jak z grep-em). Akcja to nazwa mailboxa lub pliku do którego ma być zapisany mail lub polecenie na którego standardowe wejście ma być przekazany mail.
7. Reguły procmaila. Składnia pojedynczej reguły (z grubsza):
:0 flagi
* wyrazenie_regularne
akcja

Na przykład:
:0
* From:.*aszek.*mimuw.*
/dev/null
wrzuci wszystkie maile od prowadzącego zajęcia tam, gdzie ich miejsce. Inne:
:0 c
* From:.*aszek.*
| grep Subject >> ~/from-aszek.txt
zapisze wszystkie tematy maili otrzymanych od aszka do odpowiedniego pliku. Flaga "c" oznacza, że nawet po udanym dopasowaniu do tej reguły przetwarzanie pliku ma być kontynuowane. Wniosek: użycie flagi "c" przy wszystkich regułach spowoduje że list i tak trafi do standardowej skrzynki (i może przy pierwszych próbach z procmailem lepiej się tego trzymać). Możliwe akcje: | skrypt - przekazuje maila na wejście programu/skryptu, ! adres - forwarduje maila na podany adres, nazwa_pliku - zapisuje maila do podanego pliku. Więcej przykładów w man procmailex.
Ćwiczenia.
  1. Obejrzyj swój maildir na students: katalog ~/Mail. A co jest w katalogu ~/mail?
  2. Przejrzyj jakiś plik z mailem ze swojego maildira. Zwróć uwagę na nagłówek i zinterpretuj jak najwięcej pól.
  3. Wyszukaj w swoim maildirze (lub w mailboxach pine-a jeżeli je masz, w katalogu ~/mail) maile pochodzące od określonego nadawcy, mające określony temat itp. Dla każdego znalezionego wpisu wypisz jakis początkowy fragment maila (grep -A)
  4. (!) Wyślij do prowadzącego maila zawierającego kolejno wszystkie liczby naturalne od 1 do 100.
  5. Weź plik z dowolnym mailem i poobrabiaj go programem formail. W szczególności:
  6. Uaktywnij na swoim koncie na zodiacu procmaila i napisz następujące reguły. Na wszelki wypadek pamiętaj o opcji c.

Zajęcia 15, 26.01

Przez chwilę: omówienie zadania laboratoryjnego 1 i 2 (a może i 3)
Przez część ćwiczeń: rozwiązywanie zadań typu egzaminacyjnego i powtórzenie przed egzaminem. Materiały:
Co to jest i z czym to się je: