Przeliczanie Adresacji IP i Kalkulator Podsieci

LSK
Priorytet: Normalny Szkic

Zadanie 1000: Przeliczanie Adresacji IP i Kalkulator Podsieci

Wstęp

Adresacja IP to absolutny fundament działania jakiejkolwiek sieci komputerowej. Każdy administrator (i uczeń LSK) musi płynnie operować na adresach IPv4, maskach podsieci oraz notacji CIDR (np. /24). Ręczne wyliczanie podsieci często prowadzi do pomyłek. Automatyzacja tych obliczeń to kolejny krok, który przyspiesza pracę i eliminuje ludzkie błędy.

Cel zadania

Zrozumienie zasad adresacji IPv4, podziału na podsieci oraz stworzenie autorskiego programu (kalkulatora IP) działającego w systemie Linux, który zautomatyzuje te obliczenia. Wykorzystasz go następnie do przeanalizowania 20 przygotowanych przypadków.

Wymagania techniczne

  1. Przypomnienie zasad działania IPv4 i operacji bitowych AND/OR.
  2. Napisanie skryptu/programu w systemie Linux (np. w Bash, Python lub C++), który przyjmie adres IP oraz maskę.
  3. Wyliczenie przez program: wielkości podsieci, ilości dostępnych hostów, pierwszego oraz ostatniego użytecznego adresu IP, a także adresu rozgłoszeniowego (Broadcast).
  4. Przetestowanie działania kalkulatora na 20 podanych przykładach.

Kroki do wykonania

1. Teoria: Jak przeliczać adresy IP?

Zanim napiszesz program, przypomnij sobie matematykę, która za tym stoi. Adres IPv4 to 32 bity (np. 192.168.1.10). Maska podsieci (np. 255.255.255.0 lub /24) określa, ile bitów należy do części sieciowej, a ile do części hosta.

Wzory, które musisz zaimplementować:

  • Ilość wszystkich adresów w podsieci (Wielkość): 2^(32 - maska_CIDR).
  • Ilość użytecznych hostów: Wielkość podsieci - 2 (odrzucamy adres sieci i adres rozgłoszeniowy).
  • Adres sieci (Subnet): Wynik bitowej operacji AND na adresie IP hosta i masce podsieci.
  • Pierwszy host: Adres sieci + 1.
  • Adres rozgłoszeniowy (Broadcast): Wynik bitowej operacji OR na adresie IP i odwróconej masce (gdzie 0 zamieniają się na 1 w części hosta).
  • Ostatni host: Adres Broadcast - 1.

2. Tworzenie kalkulatora pod Linuksem

Wybierz język (np. Python, Bash, C++, PHP w CLI) i napisz program pod środowisko Linux. Program powinien przyjmować z wiersza poleceń adres IP i maskę (jako argumnenty lub z prośbą o wpisanie).

[!TIP] Jeśli wybierzesz język Python w systemie Linux, rozważ użycie wbudowanej biblioteki ipaddress, która mocno upraszcza pracę. Jeśli wybierasz tradycyjny skrypt shellowy (.sh), będziesz musiał zamieniać oktety na postaci binarne manualnie za pomocą narzędzi takich jak awk, bc lub wbudowanych operatorów bitowych.

Przykładowy zarys działania Twojego programu w terminalu:

$ ./moj_kalkulator_ip.sh 192.168.10.50 /26
Adres IP: 192.168.10.50
Maska: /26 (255.255.255.192)
Adres sieci: 192.168.10.0
Wielkość podsieci: 64 adresy
Maksymalna ilość hostów: 62
Pierwszy host: 192.168.10.1
Ostatni host: 192.168.10.62
Broadcast: 192.168.10.63

[!IMPORTANT] Commit 1: Po napisaniu i wstępnym przetestowaniu poprawnego działania pierwszej wersji kalkulatora IP, utwórz pierwszego commita z wiadomością o wdrożeniu logiki przeliczania.

3. Zestaw 20 adresów do przeliczenia

Użyj swojego programu (lub weryfikuj również ręcznie na kartce, w ramach treningu), aby określić dla poniższych 20 przydziałów Adres sieci, Ilość hostów, Pierwszy host, Ostatni host oraz adres Broadcast.

  1. 10.0.0.50 /8
  2. 192.168.1.150 /24
  3. 172.16.5.10 /16
  4. 192.168.10.10 /25
  5. 10.10.10.10 /28
  6. 192.168.100.200 /26
  7. 172.20.0.5 /22
  8. 10.1.2.3 /30
  9. 192.168.0.5 /23
  10. 172.31.255.254 /27
  11. 10.255.255.250 /9
  12. 192.168.200.1 /29
  13. 172.16.128.50 /18
  14. 10.50.50.50 /12
  15. 192.0.2.100 /24
  16. 172.18.100.12 /20
  17. 192.168.5.5 /31
  18. 10.10.0.1 /10
  19. 172.25.15.150 /19
  20. 192.168.254.254 /21

[!CAUTION] Zwróć szczególną uwagę na przypadki takie jak maska /31 i /30. Maska /31 to rzadki przypadek używany na połączeniach punkt-punkt (Point-to-Point) wspierany przez standard RFC 3021, gdzie nie występuje adres sieci i broadcast w klasycznym sensie, a cała pula zawiera tylko dwa użyteczne adresy dla routerów brzegowych. Zobacz, w jaki sposób poradzi sobie z tym Twój program!

Zadanie dla chętnych

Rozwiń swój program tak, aby weryfikował poprawność tego, co wpisuje użytkownik (tzw. input validation). Jeśli użytkownik poda adres spoza prawidłowej puli oktetów (np. 300.2.1.0/24), wpisze słowa zamiast cyfr, albo maskę większą niż /32 (np. 192.168.1.1/33), program powinien wyświetlić czytelny komunikat błędu (skierowany na strumień stderr) i zakończyć działanie z kodem wyjścia błędu innym niż 0. Dodaj także wypisywanie standardowej "Klasy IP" (A, B, C, D, E).