Sieci komputerowe — ćwiczenia 1 (część 1)


Temat zajęć: Podstawowe narzędzia konfiguracji i diagnostyki sieci.

 Podstawowe narzędzia sieciowe w systemie Linux

Uwaga:
Szczegółowe opisy poleceń znajdują się w man pages systemu. Na przykład, aby poznać dokładny opis polecenia ping, należy wpisać w terminalu

man ping
1. ping

Pozwala sprawdić, czy pakiety z lokalnego hosta docierają do innego wybranego hosta. Dodatkowo podaje czas, jaki potrzebuje pakiet na osiągnięcie hosta docelowego. Składnia:
ping [-c ile_pakietow] [-s rozmiar_pakietu] nazwa_hosta albo adres_ip 

2. traceroute

Pozwala sprawdzić, przez jakie routery (mosty) trasowany jest pakiet z lokalnego hosta do innego wybranego. Podaje dodatkowo czasy niezbędne do osiągnięcia danego routera. Standardowo wyświetla nazwy mostów pobrane z DNS, można użyć opcji -n aby uzyskać adresy IP routerów (DNS nie jest wówczas odpytywany). Opcja -a powoduje przerwanie badania trasy jeśli jakiś most po drodze nie odpowie w 10 kolejnych próbach. Opcja -m pozwala określić jaki maksymalny TTL otrzymają pakiety (czyli do ilu przeskoków badamy trasę). Składnia:
traceroute [-n] [-m max_TTL] [-a] nazwa_hosta albo adres_IP 

3. arp

Pozwala sprawdzić (lub dodać/usunąć) adresy znajdujące się aktualnie w tablicy ARP danego hosta. Zwykle używamy tylko składni arp -a (sprawdzenie).


4. host i nslookup

Pozwalają odpytywać serwer DNS. host to prostsze polecenie, piszemy:
host szukany_host

nslookup z kolei pracuje w dwóch trybach: interaktywnym i z wiersza poleceń. Ten drugi ma zwykle składnię:
nslookup szukany_host [-serwer_dns] 
W trybie interaktywnym (aby go uruchomić nie podajemy parametrów w wierszu poleceń) wprowadzamy kolejne komendy, a sesję kończymy przez Ctrl+D. Polecenia można przerywać przez Ctrl+C. Najczęściej używane polecenia:

5. ifconfig

Pozwala na ustawienie adresu IP, maski sieci i adresu rozgłaszania dla danego interfejsu sieciowego. Wymaga praw administratora systemu. Przykładowa składnia:
Przykład:
ifconfig eth0 up netmask 255.255.255.0 broadcast 192.168.1.255 192.168.1.6 
Użycie składni
ifconfig
lub
ifconfig interfejs
powoduje jedynie wyświetlenie informacji o danym interfejsie sieciowym (lub wszystkich interfejsach na danej maszynie) i nie wymaga uprawnień administratora systemu.

6. route

Umożliwia dodawanie/usuwanie hostów i sieci z tablicy trasowania pakietów. Wymaga uprawnień administratora systemu (chyba, że wywołujemy bez parametrów - w takim przypadku route pokazuje jedynie zawartość tablicy trasowania i nie wymaga uprawnień administratora). Najczęstsze przypadki użycia:

route add -net n1.n2.n3.n4 netmask m1.m2.m3.m4 dev interfejs
Informuje system, że pakiety przeznaczone dla sieci n1.n2.n3.n4 (z maską m1.m2.m3.m4) mają być przesyłane za pośrednictwem interfejsu interfejs.
route add -host h1.h2.h3.h4 dev interfejs
Podobnie jak poprzednie, ale dotyczy pojedynczych hostów.
route del [-net|-host] a1.a2.a3.a4 dev interfejs
Usuwa wpisy o hostach lub sieciach z tablicy trasowania.
route add default gw g1.g2.g3.g4 dev interfejs
Ustawia domyślny router na g1.g2.g3.g4.

Określenie routera, przez który mają być przesyłane komunikaty można również dołączyć przy dodawaniu sieci i hostów do tablicy trasowania. Zwykle na końcówkach wystarczy dodać własną lokalną sieć (bez routera, bo jesteśmy do niej wpięci bezpośrednio), sieć loopback 127.0.0.0 (również bez routera, ale na interfejsie lo) oraz domyślny router dla pakietów do wszystkich pozostałych adresów (czyli spoza naszej sieci lokalnej i spoza loopback).

7. hostname
Pozwala sprawdzić lub ustawić nazwę lokalnego hosta. Nazwa ustawiona za pomocą hostname ma wpływ w zasadzie tylko na działanie lokalnej maszyny - inne komputery podłączone do sieci, chcąc sprawdzić nazwę naszego hosta i tak skorzystają z DNS.

8. domainname
Pozwala sprawdzić lub ustawić nazwę domeny dla lokalnego hosta.

9. plik /etc/resolv.conf
W pliku tym określamy serwer(y) DNS, które mają być odpytywane przez lokalnego hosta w celu zamiany nazwy na IP lub odwrotnie. Aby określić serwer DNS należy w pliku tym umieścić wiersz:
nameserver adres_IP 
Oczywiście nie możemy podać tutaj nazwy, bo jak system miałby ją zamienić na IP skoro właśnie określamy sposób tej zamiany (jest pewien wyjątek - patrz punkt 10).
Plik resolv.conf może zawierać wiele wpisów typu nameserver. Serwery będą wówczas odpytywane w kolejności, w jakiej pojawiają się w pliku (w przypadku, gdy pierwszy nie odpowie, pytany jest drugi, jeśli on nie odpowie - trzeci itd.). Określenie zbyt wielu serwerów powoduje długie przestoje przy podaniu nieprawidłowej (niemapowalnej) nazwy.
Dodatkowo w resolv.conf możemy podać domyślną(e) domenę(y), czyli nazwę domeny, która będzie automatycznie "doklejana" do nazw hostów jeśli pominiemy domenę. Wpis wygląda następująco:
search nazwa_domeny 
np.:
search amu.edu.pl 
Jeśli np. wykonamy
ping main2 
to jeśli serwer DNS odpowie, że nie zna nazwy main2, system automatycznie ponowi zapytanie, tym razem o main2.amu.edu.pl.
Podawanie zbyt wielu domen wyszukiwania również nie jest wskazane. W przypadku omyłkowego wprowadzenia niemapowalnej nazwy, błąd systemu pojawi się dopiero po stwierdzeniu, że wprowadzona nazwa w połączeniu z każdą z domen przeszukiwania również jest niemapowalna.

10. plik /etc/hosts
W pliku tym możemy ręcznie wprowadzić adresy IP hostów i odpowiadające im nazwy. Wpisy mają postać:
adres_IP nazwa [nazwa_alternatywna1] [nazwa_alternatywna2 ...] 
Możemy więc wprowadzić najczęściej "używane" hosty do tej statycznej tablicy aby ograniczyć odpytywanie serwera DNS o nazwy. Aby tablica miała pierwszeństwo przed serwerem DNS, w pliku /etc/host.conf musi znaleźć się wpis
order hosts,bind
Wówczas przy zamianie nazwy na adres IP (lub odwrotnie) najpierw zostanie sprawdzony plik /etc/hosts i dopiero jeśli nazwa/adres nie zostaną tam odnalezione, zostanie odpytany serwer DNS. Gdyby w host.conf był wpis
order bind,hosts
to kolejność byłaby odwrotna: najpierw zostałby odpytany serwer DNS, a jeśli on nie udzieliłby odpowiedzi, zostałaby sprawdzona lokalna tablica.

11. plik /etc/services

Zawiera nazwy "dobrze znanych" usług i odpowiadające im numery portów. Wpisy w tym zbiorze mają postać:
nazwa_usługi numer_portu/protokół 
np.
telnet 23/tcp 
Plik ten używany jest przez funkcję systemową getservbyname (daj usługę po nazwie) oraz niektóre narzędzia sieciowe, np. netstat (patrz niżej), który dzięki temu wyświetla nazwy usług zamiast wyłącznie numerów portów.


12. netstat

Pokazuje otwarte gniazda (komunikacyjne i nasłuchujące) wg wybranych kryteriów oraz procesy, które z tych gniazd korzystają. Wyświetla tabelę zawierającą m. in. : protokół (TCP/UDP), adres lokalny i numer lokalnego portu, adres zdalny i numer portu (jeśli gniazdo nasłuchuje, to pojawia się często *.*) oraz stan połączenia (np. listen, established itd.). Przykładowa składnia:
netstat -a
Wyświetla informacje o wszystkich protokołach (również innych niż TCP i UDP).
netstat -t
Wyświetla informacje o gniazdach TCP.
netstat -u
Wyświetla informacje o gniazdach UDP.
Dodatkowo opcja -n powoduje wyświetlanie wyłącznie wartości numerycznych (UID zamiast nazwy użytkownika, numer portu zamiast nazwy usługi, adres IP zamiast nazwy hosta).

13. telnet

Telnet może służyć jako zdalny terminal, tzn. umożliwia pracę w konsoli na zdalnej maszynie, na której działa usługa telnet (port 23 TCP). Ta rola telnet jest już jednak w zaniku, ponieważ przy logowaniu się na zdalną maszynę nazwa użytkownika i hasło przesyłane są przez sieć otwartym tekstem. Dlatego jako zdalna konsola zdecydowanie lepiej sprawdza się SSH (Secure Shell), który zapewnia szyfrowanie połączenia.
Telnet nie musi jednak wykonywać połączenia tylko na port 23, na którym ew. działa serwer usługi telnet. Możemy za jego pomocą połączyć się z dowolną usługą pracującą na TCP i, o ile protokół wymiany danych z tą usługą jest protokołem tekstowym ASCII, przeprowadzić "rozmowę" z usługą za pomocą konsoli. Składnia jest wówczas następująca:
telnet host numer_portu
Program telnet zapewnia to, że wszystkie znaki wprowadzane z konsoli zostaną przesłane do usługi, a wszystkie znaki zwrócone przez usługę zostaną wyświetlone na konsoli. Oczywiście telnet jako narzędzie testujące nie sprawdzi się w przypadku usług, które posiadają protokół binarny (wszystko, co wprowadzamy w konsoli telnet wysyłane jest w postaci znaków ASCII).
W otwartej sesji telnet możemy przejść do tzw. wewnętrznej konsoli telnet za pomocą kombinacji Control-]. Mamy wówczas do dyspozycji kilka poleceń sterujących transmisją (dostępna lista po wprowadzeniu polecenia help), z których najczęściej używanym jest prawdopodobnie quit, wykorzystywane do zamknięcia połączenia jeśli wystąpi problem w komunikacji z usługą i połączenie nie zamyka się samoczynnie.

14. nc i netcat

nc i netcat to podobne programy służące m.in. do wysyłania i odbierania danych za pomocą protokołów TCP i UDP.

Aby wysłać dane, piszemy:

nc host numer_portu

Program pobiera dane ze standardowego wejścia.

Aby nasłuchiwać danych z sieci, wydajemy polecenie:

nc -l numer_portu

Program wypisuje odebrane dane na standardowym wyjściu. Kilka ciekawych przykładów można znaleźć m.in. w podręczniku systemowym (man nc).

 Zadanie 1

Za pomocą pomocą polecenia nc lub netcat zobaczyć wiadomość wysyłaną przez przeglądarkę internetową. (Pomoc: uruchomić nasłuchiwanie na dowolnym porcie, a następnie uruchomić przeglądarkę i postarać się podejrzeć stronę z "localhost" na podanym porcie.

 Zadanie 1b


Proszę za pomocą programu telnet zasymulować działanie przeglądarki WWW. Dokładniej, proszę wykonać połączenie do hosta onet.pl na port 80 i wydać komendę pobierającą stronę główną.

 Zadanie 2

Za pomocą programu nc lub netcat wysłać komunikat tekstowy na inny komputer w sieci. Zadanie wykonać w parach

 Odpowiedniki omówionych narzędzi na platformie Windows NT/2000/XP

Zakładamy, że katalogiem systemowym jest C:\WINNT.