Do wykonania jedno, dowolne zadanie.

0Wprowadzenie do skryptów RouterOS

O środowisku

RouterOS (MikroTik) to system operacyjny dla routerów i urządzeń sieciowych. Posiada wbudowany interpreter skryptowy z własną składnią – inną niż bash, cmd czy PowerShell. Skrypty zapisujemy w plikach .rsc i uruchamiamy przez /import nazwa.rsc.

Składnia w pigułce

  • :local zmienna wartosc – deklaracja zmiennej
  • :put "tekst $zmienna" – wyświetlenie (zmienne rozwijane w cudzysłowie)
  • :put ("tekst " . $zmienna) – konkatenacja operatorem .
  • :if (warunek) do={ ... } else={ ... } – instrukcja warunkowa
  • :foreach x in=[/scieżka find] do={ ... } – pętla po elementach
  • /sciezka/komenda – wywołanie komendy systemowej

Łączenie z routerem testowym

Host: 192.168.53.123  | 
Login: admin  | 
Hasło: zaq12wsx
Połącz się przez SSH (PuTTY, WinBox, terminal) i wklejaj skrypty jako blok lub importuj pliki.
  +---------------------+
  |  RouterOS Terminal  |
  |  /import skrypt.rsc |
  +---------------------+
           |
           v
  +---------------------+
  |  :local, :if, :for  |
  |  /ip, /interface,   |
  |  /system, /tool     |
  +---------------------+
           |
           v
  +---------------------+
  |  Automatyzacja i    |
  |  diagnostyka sieci  |
  +---------------------+
            
1Hello, MikroTik! – zmienne, :put, arytmetyka

Cel zadania (~15 min)

Stwórz pierwszy skrypt w RouterOS. Nauczysz się deklarować zmienne (:local), wyświetlać tekst (:put), wykonywać podstawową arytmetykę oraz łączyć ciągi znaków operatorem ..

Wymagania

  1. Zadeklaruj zmienną name i przypisz jej swoje imię.
  2. Zadeklaruj zmienną year z bieżącym rokiem (2026).
  3. Wyświetl powitanie z użyciem zmiennej: :put ("Witaj, " . $name . "!").
  4. Zwiększ rok o 1 (:set year ($year + 1)) i wyświetl prognozę.
  5. Wykonaj kilka działań arytmetycznych: dodawanie, mnożenie, dzielenie.
  6. Sprawdź długość swojego imienia: :put [:len $name].

Uruchomienie

Zapisz skrypt jako hello.rsc, prześlij na router przez FTP/SFTP, a następnie uruchom: /import hello.rsc.

# hello.rsc - pierwszy skrypt MikroTik
:local name "Student"
:local year 2026

:put ""
:put "================================="
:put "     HELLO, MIKROTIK!"
:put "================================="
:put ""

:put ("Witaj, " . $name . "!")
:put ("Mamy rok " . $year)

:set year ($year + 1)
:put ("W przyszlym roku bedzie " . $year)

:put ("10 + 20 = " . (10 + 20))
:put ("10 * 20 = " . (10 * 20))
:put ("100 / 7 = " . (100 / 7))
:put ("Reszta z 100/7 = " . (100 % 7))
:put ("Dlugosc imienia: " . [:len $name])

:put ""
:put "================================="
PRZYKLADOWY EKRAN WYNIKOWY:

[admin@MikroTik] > /import hello.rsc

=================================
     HELLO, MIKROTIK!
=================================

Witaj, Student!
Mamy rok 2026
W przyszlym roku bedzie 2027
10 + 20 = 30
10 * 20 = 200
100 / 7 = 14
Reszta z 100/7 = 2
Dlugosc imienia: 7

=================================
Script file loaded and executed successfully
2Analizator interfejsów sieciowych

Cel zadania (~20 min)

Napisz skrypt, który przegląda wszystkie interfejsy sieciowe routera, wyświetla ich nazwę, stan (AKTYWNY / WYŁĄCZONY) oraz liczbę odebranych pakietów. Wykorzystasz pętlę :foreach i odczyt atrybutów przez /interface get.

Wymagania

  1. Pobierz listę interfejsów: /interface find.
  2. W pętli :foreach iface in=[/interface find] dla każdego:
    • pobierz nazwę: [/interface get $iface name]
    • sprawdź czy działa: [/interface get $iface running]
    • pobierz liczbę RX pakietów: [/interface get $iface rx-packet]
  3. Jeśli running=true – oznacz jako AKTYWNY, w przeciwnym razie WYLACZONY.
  4. Policz sumaryczną liczbę interfejsów i liczbę aktywnych.
  5. Wyświetl czytelną tabelkę.

Efekt działania

Skrypt generuje przejrzystą tabelę interfejsów z oznaczeniem stanu i liczbą odebranych pakietów.

# interfaces.rsc - analizator interfejsow
:local total 0
:local active 0

:put ""
:put "================================="
:put "  ANALIZATOR INTERFEJSOW SIECI"
:put "================================="
:put ""
:put "LP  NAZWA               STAN        RX-PACKETY"
:put "--- -------------------- ---------- ----------"

:foreach iface in=[/interface find] do={
    :set total ($total + 1)

    :local name [/interface get $iface name]
    :local running [/interface get $iface running]
    :local rxPkt  [/interface get $iface rx-packet]

    :local status "WYLACZONY"
    :if ($running = true) do={
        :set status "AKTYWNY"
        :set active ($active + 1)
    }

    :put ($total . "   " . $name . "        " . $status . "    " . $rxPkt)
}

:put ""
:put "---------------------------------"
:put ("Razem interfejsow: " . $total)
:put ("Aktywnych:         " . $active)
:put "================================="
PRZYKLADOWY EKRAN WYNIKOWY:

[admin@MikroTik] > /import interfaces.rsc

=================================
  ANALIZATOR INTERFEJSOW SIECI
=================================

LP  NAZWA               STAN        RX-PACKETY
--- -------------------- ---------- ----------
1   ether1              AKTYWNY     158423
2   ether2              WYLACZONY   0
3   wlan1               AKTYWNY     89123
4   bridge-local        AKTYWNY     234567

---------------------------------
Razem interfejsow: 4
Aktywnych:         3
=================================
Script file loaded and executed successfully
3Ping Watchdog – testowanie hostów

Cel zadania (~20 min)

Stwórz skrypt, który sprawdza dostępność kilku hostów za pomocą polecenia /ping. Wykorzystasz listę adresów, pętlę :foreach i opóźnienie :delay. Nauczysz się uruchamiać komendy systemowe z poziomu skryptu.

Wymagania

  1. Zdefiniuj listę hostów: :local hosts {192.168.1.1; 8.8.8.8; 192.168.1.100}.
  2. Dla każdego hosta wywołaj /ping count=2 address=$host interval=100ms.
  3. Przed każdym pingiem wyświetl nazwę sprawdzanego hosta.
  4. Dodaj :delay 2 pomiędzy kolejnymi hostami.
  5. Po zakończeniu wszystkich testów wyświetl podsumowanie „Testy zakonczone”.

Wskazówka

W przeciwieństwie do bash, w RouterOS v7 komenda /ping wyświetla wynik bezpośrednio na ekranie i nie zwraca wartości do zmiennej. Skrypt wyświetla surowe wyniki pinga – analizujesz je wizualnie.

Efekt działania

Skrypt pinguje kolejne hosty i wyświetla wyniki. Student uczy się pętli i wywoływania komend systemowych.

# watchdog.rsc - Ping Watchdog
:local hosts {192.168.53.1; 8.8.8.8}
:local count 1

:put ""
:put "================================="
:put "    PING WATCHDOG - SKAN SIECI"
:put "================================="
:put ""

:foreach host in=$hosts do={
    :put ("[" . $count . "] Sprawdzam: " . $host)
    :put "---------------------------------"
    /ping count=2 address=$host interval=100ms
    :put ""
    :set count ($count + 1)
    :delay 2
}

:put "================================="
:put "Testy zakonczone."
:put "================================="
PRZYKLADOWY EKRAN WYNIKOWY:

[admin@MikroTik] > /import watchdog.rsc

=================================
    PING WATCHDOG - SKAN SIECI
=================================

[1] Sprawdzam: 192.168.53.1
---------------------------------
Columns: SEQ, HOST, SIZE, TTL, TIME
SEQ  HOST          SIZE  TTL  TIME
  0  192.168.53.1    56   64  663us
  1  192.168.53.1    56   64  876us

[2] Sprawdzam: 8.8.8.8
---------------------------------
Columns: SEQ, HOST, SIZE, TTL, TIME
SEQ  HOST     SIZE  TTL  TIME
  0  8.8.8.8    56  118  9ms897us
  1  8.8.8.8    56  118  9ms395us

=================================
Testy zakonczone.
=================================
Script file loaded and executed successfully
4Eksplorator tablicy ARP

Cel zadania (~20 min)

Napisz skrypt przeglądający tablicę ARP routera. Wyświetlisz adres IP, adres MAC, interfejs oraz typ wpisu (dynamiczny/statyczny) każdego sąsiada w sieci LAN. Nauczysz się odczytywać dane z /ip arp.

Wymagania

  1. Pobierz wpisy ARP: /ip arp find.
  2. Dla każdego wpisu pobierz: address, mac-address, interface, dynamic.
  3. Jeśli dynamic=true – oznacz jako DYNAMICZNY, w przeciwnym razie STATYCZNY.
  4. Policz osobno wpisy dynamiczne i statyczne.
  5. Dodaj nagłówek z bieżącą datą i godziną (/system clock print).

Wskazówki

Atrybut dynamic to wartość logiczna true/false. Wpisy dynamiczne są uczone automatycznie z ruchu sieciowego, statyczne dodaje administrator ręcznie.

Efekt działania

Skrypt wyświetla pełną tablicę ARP z podziałem na typy oraz podsumowanie liczbowe.

# arp.rsc - eksplorator tablicy ARP
:local total 0
:local dynCount 0
:local staticCount 0

:put ""
/system clock print
:put ""
:put "================================="
:put "      TABLICA ARP ROUTERA"
:put "================================="
:put ""
:put "LP  IP              MAC               INTERFEJS     TYP"
:put "--- --------------- ----------------- ------------- -------"

:foreach entry in=[/ip arp find] do={
    :set total ($total + 1)
    :local ipAddr  [/ip arp get $entry address]
    :local macAddr [/ip arp get $entry mac-address]
    :local iface   [/ip arp get $entry interface]
    :local isDyn   [/ip arp get $entry dynamic]

    :local typeStr "STATYCZNY"
    :if ($isDyn = true) do={
        :set typeStr "DYNAMICZNY"
        :set dynCount ($dynCount + 1)
    } else={
        :set staticCount ($staticCount + 1)
    }

    :put ($total . "   " . $ipAddr . "   " . $macAddr . "   " . $iface . "   " . $typeStr)
}

:put ""
:put "================================="
:put ("Lacznie wpisow ARP: " . $total)
:put ("Dynamicznych:       " . $dynCount)
:put ("Statycznych:        " . $staticCount)
:put "================================="
PRZYKLADOWY EKRAN WYNIKOWY:

[admin@MikroTik] > /import arp.rsc
             time: 14:35:22
             date: jun/27/2026

=================================
      TABLICA ARP ROUTERA
=================================

LP  IP              MAC               INTERFEJS     TYP
--- --------------- ----------------- ------------- -------
1   192.168.1.1     AA:BB:CC:11:22:33 bridge-local  STATYCZNY
2   192.168.1.50    00:1A:2B:3C:4D:5E ether1        DYNAMICZNY
3   192.168.1.51    BC:DE:F0:12:34:56 ether1        DYNAMICZNY

=================================
Lacznie wpisow ARP: 3
Dynamicznych:       2
Statycznych:        1
=================================
Script file loaded and executed successfully
5Backup konfiguracji routera

Cel zadania (~20 min)

Stwórz skrypt do automatycznego tworzenia kopii zapasowej konfiguracji routera. Skrypt wyeksportuje konfigurację do pliku .rsc, sprawdzi czy plik istnieje i wyświetli jego rozmiar. Poznasz operacje eksportu i zarządzania plikami.

Wymagania

  1. Pobierz nazwę routera: /system identity get name.
  2. Utwórz nazwę pliku z tożsamości routera: :local fname ($identity . "_backup").
  3. Wykonaj eksport: /export file=$fname.
  4. Odczekaj 1 sekundę (:delay 1s) – plik zapisuje się asynchronicznie.
  5. Znajdź plik: /file find where name=($fname . ".rsc").
  6. Jeśli istnieje – pobierz rozmiar (/file get $f size) i wyświetl w bajtach.

Wskazówki

/export file=name tworzy plik w katalogu głównym. :delay jest konieczny, bo eksport odbywa się w tle. Operator . łączy ciągi: $fname . ".rsc".

Efekt działania

Skrypt tworzy kopię zapasową konfiguracji z nazwą routera i raportuje jej rozmiar.

# backup.rsc - backup konfiguracji
:local identity [/system identity get name]
:local fname ($identity . "_backup")

:put ""
:put "================================="
:put "   BACKUP KONFIGURACJI ROUTERA"
:put "================================="
:put ("Router: " . $identity)
:put ""

:put "[1] Eksportuje konfiguracje..."
/export file=$fname
:delay 1s

:put "[2] Sprawdzam plik..."
:local f [/file find where name=($fname . ".rsc")]

:if ([:len $f] > 0) do={
    :local fileSize [/file get $f size]
    :local sizeKB ($fileSize / 1024)
    :put ("  OK: " . $fname . ".rsc")
    :put ("  Rozmiar: " . $fileSize . " B (" . $sizeKB . " KB)")
} else={
    :put "  BLAD: Nie znaleziono pliku!"
}

:put ""
:put "================================="
:put "Backup zakonczony."
:put "================================="
PRZYKLADOWY EKRAN WYNIKOWY:

[admin@MikroTik] > /import backup.rsc

=================================
   BACKUP KONFIGURACJI ROUTERA
=================================
Router: OfficeRouter

[1] Eksportuje konfiguracje...
[2] Sprawdzam plik...
  OK: OfficeRouter_backup.rsc
  Rozmiar: 12458 B (12 KB)

=================================
Backup zakonczony.
=================================
Script file loaded and executed successfully
6Route Informer – analiza tablicy routingu

Cel zadania (~20 min)

Stwórz skrypt przeglądający tablicę routingu i wyświetlający aktywne trasy. Dla każdej trasy pokaż adres docelowy, bramę, interfejs oraz typ. Dodatkowo zidentyfikuj trasę domyślną i trasy podłączone bezpośrednio.

Wymagania

  1. Pobierz aktywne trasy: /ip route find where active=yes.
  2. Dla każdej trasy pobierz: dst-address, gateway, interface, dynamic.
  3. Rozpoznaj typ trasy:
    • jeśli dst-address = 0.0.0.0/0DEFAULT
    • jeśli dynamic = falseSTATIC
    • jeśli gateway to nazwa interfejsu (nie IP) – CONNECT
    • w przeciwnym razie DYNAMIC
  4. Policz liczbę tras default, statycznych i connect.

Wskazówki

Trasa CONNECT ma bramę ustawioną na nazwę interfejsu (np. ether1), a nie adres IP. Trasa domyślna to 0.0.0.0/0. Użyj :if ($gw = $iface) lub sprawdź czy gateway zawiera kropkę.

Efekt działania

Skrypt wyświetla aktywną tablicę routingu z podziałem na typy i podsumowaniem.

# routes.rsc - analiza tablicy routingu
:local total 0
:local defaultCount 0
:local staticCount 0
:local connectCount 0

:put ""
:put "================================="
:put "    ANALIZA TABLICY ROUTINGU"
:put "================================="
:put ""
:put "LP  TRASA                 BRAMA              INTERFEJS    TYP"
:put "--- --------------------- ------------------ ------------ -------"

:foreach route in=[/ip route find where active=yes] do={
    :set total ($total + 1)
    :local dst   [/ip route get $route dst-address]
    :local gw    [/ip route get $route gateway]
    :local iface [/ip route get $route interface]
    :local isDyn [/ip route get $route dynamic]

    :local routeType "DYNAMIC"

    :if ($isDyn = false) do={
        :set routeType "STATIC"
        :set staticCount ($staticCount + 1)
    }

    :if ($dst = "0.0.0.0/0") do={
        :set routeType "DEFAULT"
        :set defaultCount ($defaultCount + 1)
    }

    # Jesli brama to nazwa interfejsu (nie IP) -> CONNECT
    :if ([:find $gw "."] = nil) do={
        :set routeType "CONNECT"
        :set connectCount ($connectCount + 1)
    }

    :put ($total . "   " . $dst . "   " . $gw . "   " . $iface . "   " . $routeType)
}

:put ""
:put "================================="
:put ("Liczba aktywnych tras: " . $total)
:put ("Trasa domyslna:        " . $defaultCount)
:put ("Trasy statyczne:       " . $staticCount)
:put ("Trasy CONNECT:         " . $connectCount)
:put "================================="
PRZYKLADOWY EKRAN WYNIKOWY:

[admin@MikroTik] > /import routes.rsc

=================================
    ANALIZA TABLICY ROUTINGU
=================================

LP  TRASA                 BRAMA              INTERFEJS    TYP
--- --------------------- ------------------ ------------ -------
1   0.0.0.0/0             192.168.53.1       ether1       DEFAULT
2   10.0.0.0/8            10.0.0.1           ether2       STATIC
3   192.168.53.0/24       ether1             ether1       CONNECT

=================================
Liczba aktywnych tras: 3
Trasa domyslna:        1
Trasy statyczne:       1
Trasy CONNECT:         1
=================================
Script file loaded and executed successfully
7Parser logów systemowych

Cel zadania (~20 min)

Napisz skrypt analizujący logi systemowe RouterOS. Nauczysz się filtrować wpisy według kategorii (critical, error, warning), zliczać je za pomocą /log find oraz wyświetlać szczegóły ostatnich zdarzeń krytycznych.

Wymagania

  1. Pobierz czas pracy systemu: /system resource get uptime.
  2. Dla każdej kategorii policz wpisy używając [:len [/log find where topics=critical]].
  3. Kategorie: critical, error, warning, info.
  4. Wyświetl statystyki w czytelnej formie.
  5. Wyświetl ostatnie 3 wpisy krytyczne: /log print where topics=critical.

Wskazówka

Zamiast /log print count-only (które wyświetla liczbę bezpośrednio), lepiej użyć [:len [/log find where topics=...]] – zwraca liczbę bez efektów ubocznych na ekranie.

Efekt działania

Skrypt generuje statystyki logów i pokazuje szczegóły zdarzeń krytycznych.

# logs.rsc - analiza logow systemowych
:local uptimeStr [/system resource get uptime]

:put ""
:put "================================="
:put "    ANALIZA LOGOW SYSTEMOWYCH"
:put "================================="
:put ("Czas pracy systemu: " . $uptimeStr)
:put ""

:local critCount [:len [/log find where topics=critical]]
:local errCount  [:len [/log find where topics=error]]
:local warnCount [:len [/log find where topics=warning]]

:put "--- STATYSTYKI LOGOW ---"
:put "  KRYTYCZNE:    " . $critCount
:put "  BLEDY:        " . $errCount
:put "  OSTRZEZENIA:  " . $warnCount
:put ""

:put "--- OSTATNIE LOGI KRYTYCZNE ---"
/log print where topics=critical
:put ""

:put "--- OSTATNIE LOGI Z BLEDAMI ---"
/log print where topics=error
:put ""

:put "================================="
:put "Analiza zakonczona."
:put "================================="
PRZYKLADOWY EKRAN WYNIKOWY:

[admin@MikroTik] > /import logs.rsc

=================================
    ANALIZA LOGOW SYSTEMOWYCH
=================================
Czas pracy systemu: 3d2h15m

--- STATYSTYKI LOGOW ---
  KRYTYCZNE:    2
  BLEDY:        15
  OSTRZEZENIA:  45

--- OSTATNIE LOGI KRYTYCZNE ---
 0  apr/15 12:30:22 critical interface ether3 link down
 1  apr/15 12:35:10 critical interface ether3 link up

--- OSTATNIE LOGI Z BLEDAMI ---
 0  apr/15 13:10:05 error dhcp client on ether2: lease lost

=================================
Analiza zakonczona.
=================================
Script file loaded and executed successfully
8Raport zasobów systemowych

Cel zadania (~20 min)

Stwórz skrypt zbierający pełną informację o stanie routera: wersję RouterOS, nazwę urządzenia, czas pracy, użycie CPU, pamięć RAM oraz wolną przestrzeń dyskową. Wykorzystasz komendy z gałęzi /system resource.

Wymagania

  1. Pobierz nazwę urządzenia: /system identity get name.
  2. Pobierz dane z /system resource get:
    • version, cpu-load, uptime
    • total-memory, free-memory
    • total-hdd-space, free-hdd-space
    • architecture-name, board-name
  3. Przelicz bajty na megabajty: $totalMem / 1048576.
  4. Pobierz liczbę zalogowanych użytkowników: /user print count-only.
  5. Wyświetl wszystko w czytelnej formie.

Wskazówka

W RouterOS v7 /system resource get przyjmuje nazwę atrybutu bezpośrednio – nie trzeba używać [find]. Przykład: /system resource get uptime.

Efekt działania

Skrypt wypisuje kompleksowy raport o stanie routera – przydatny przy codziennej administracji.

# systeminfo.rsc - raport zasobow
:put ""
:put "================================="
:put "   RAPORT ZASOBOW SYSTEMOWYCH"
:put "================================="
:put ""

:local identity [/system identity get name]
:local version  [/system resource get version]
:local cpuLoad  [/system resource get cpu-load]
:local uptime   [/system resource get uptime]
:local totalMem [/system resource get total-memory]
:local freeMem  [/system resource get free-memory]
:local totalHdd [/system resource get total-hdd-space]
:local freeHdd  [/system resource get free-hdd-space]
:local arch     [/system resource get architecture-name]
:local board    [/system resource get board-name]

:local totalMemMb ($totalMem / 1048576)
:local freeMemMb  ($freeMem / 1048576)
:local totalHddMb ($totalHdd / 1048576)
:local freeHddMb  ($freeHdd / 1048576)
:local usedMemMb  ($totalMemMb - $freeMemMb)

:put "IDENTYFIKATOR:"
:put ("  Nazwa:         " . $identity)
:put ("  Wersja ROS:    " . $version)
:put ("  Architektura:  " . $arch)
:put ("  Plyta:         " . $board)
:put ""

:put "CZAS:"
:put ("  Uptime:        " . $uptime)
:put ""

:put "PROCESOR:"
:put ("  Obciazenie:    " . $cpuLoad . "%")
:put ""

:put "PAMIEC RAM:"
:put ("  Calkowita:     " . $totalMemMb . " MB")
:put ("  Wolna:         " . $freeMemMb . " MB")
:put ("  Uzyta:         " . $usedMemMb . " MB")
:put ""

:put "DYSK:"
:put ("  Calkowity:     " . $totalHddMb . " MB")
:put ("  Wolny:         " . $freeHddMb . " MB")
:put ""

:local userCount [/user print count-only]
:put ("UZYTKOWNICY:   " . $userCount . " zalogowanych")
:put ""
:put "================================="
PRZYKLADOWY EKRAN WYNIKOWY:

[admin@MikroTik] > /import systeminfo.rsc

=================================
   RAPORT ZASOBOW SYSTEMOWYCH
=================================

IDENTYFIKATOR:
  Nazwa:         OfficeRouter
  Wersja ROS:    7.14.3
  Architektura:  x86_64
  Plyta:         x86

CZAS:
  Uptime:        3d2h15m

PROCESOR:
  Obciazenie:    12%

PAMIEC RAM:
  Calkowita:     448 MB
  Wolna:         381 MB
  Uzyta:         67 MB

DYSK:
  Calkowity:     966 MB
  Wolny:         948 MB

UZYTKOWNICY:   2 zalogowanych

=================================
Script file loaded and executed successfully
9Inspektor adresacji IP

Cel zadania (~20 min)

Stwórz skrypt analizujący adresy IP skonfigurowane na routerze. Wyświetlisz każdy adres wraz z interfejsem i klasyfikacją (publiczny/prywatny wg RFC1918). Nauczysz się operować na stringach i podejmować decyzje na podstawie pierwszych oktetów adresu.

Wymagania

  1. Pobierz wszystkie adresy IP: /ip address find.
  2. Dla każdego pobierz: address, interface, comment.
  3. Wyodrębnij pierwsze 3 znaki adresu: [:pick $ipAddr 0 3].
  4. Jeśli adres zaczyna się od 10. lub 192 – oznacz jako PRYWATNY.
  5. Jeśli adres zaczyna się od 172 – sprawdź drugi oktet (16-31).
  6. W przeciwnym razie oznacz jako PUBLICZNY.
  7. Policz adresy prywatne i publiczne.

Efekt działania

Skrypt wyświetla tabelę adresów IP z klasyfikacją oraz podsumowaniem.

# ipaddr.rsc - inspektor adresacji IP
:local total 0
:local privateCount 0
:local publicCount 0

:put ""
:put "=========================================="
:put "     INSPEKTOR ADRESACJI IP"
:put "=========================================="
:put ""
:put "LP  ADRES               INTERFEJS       TYP         KOMENTARZ"
:put "--- ------------------- --------------- ----------- ------------"

:foreach addr in=[/ip address find] do={
    :set total ($total + 1)
    :local ipAddr  [/ip address get $addr address]
    :local iface   [/ip address get $addr interface]
    :local comment [/ip address get $addr comment]

    :local firstOctet [:pick $ipAddr 0 3]
    :local isPrivate false
    :local addrType "PUBLICZNY"

    :if (($firstOctet = "10.") or ($firstOctet = "192")) do={
        :set isPrivate true
    }

    :if ($firstOctet = "172") do={
        :local secondOctet [:pick $ipAddr 4 6]
        :local secondNum [:tonum $secondOctet]
        :if (($secondNum >= 16) and ($secondNum <= 31)) do={
            :set isPrivate true
        }
    }

    :if ($isPrivate = true) do={
        :set addrType "PRYWATNY"
        :set privateCount ($privateCount + 1)
    } else={
        :set publicCount ($publicCount + 1)
    }

    :local showComment $comment
    :if ([:len $comment] = 0) do={ :set showComment "(brak)" }

    :put ($total . "   " . $ipAddr . "   " . $iface . "   " . $addrType . "   " . $showComment)
}

:put ""
:put "=========================================="
:put ("Lacznie adresow: " . $total)
:put ("Prywatnych:      " . $privateCount)
:put ("Publicznych:     " . $publicCount)
:put "=========================================="
PRZYKLADOWY EKRAN WYNIKOWY:

[admin@MikroTik] > /import ipaddr.rsc

==========================================
     INSPEKTOR ADRESACJI IP
==========================================

LP  ADRES               INTERFEJS       TYP         KOMENTARZ
--- ------------------- --------------- ----------- ------------
1   192.168.1.254/24    bridge-local     PRYWATNY    LAN
2   10.0.0.1/8          ether2           PRYWATNY    siec wewnetrzna
3   203.0.113.5/24      ether1           PUBLICZNY   (brak)

==========================================
Lacznie adresow: 3
Prywatnych:      2
Publicznych:     1
==========================================
Script file loaded and executed successfully
10Network Probe Suite – traceroute i ping

Cel zadania (~20 min)

Stwórz skrypt diagnostyczny, który wykonuje śledzenie trasy (/tool traceroute) i serię pingów do wskazanego hosta. Połączysz kilka narzędzi sieciowych w jeden skrypt i wygenerujesz raport diagnostyczny.

Wymagania

  1. Zdefiniuj cel diagnostyki: :local target "8.8.8.8".
  2. Wykonaj traceroute: /tool traceroute address=$target count=1 duration=3s.
  3. Wykonaj serię 5 pingów: /ping count=5 address=$target interval=1s.
  4. Dodaj nagłówek z numeracją kroków diagnostycznych.
  5. Na końcu wyświetl podsumowanie „Diagnostyka zakonczona”.

Wskazówki

/tool traceroute pokazuje kolejne skoki sieciowe od routera do celu. /ping z parametrem count=5 wykonuje 5 prób. Parametr duration=3s w traceroute ogranicza czas oczekiwania na odpowiedź.

Efekt działania

Skrypt wykonuje pełną diagnostykę sieci do wskazanego hosta i wyświetla wyniki na ekranie.

# network_probe.rsc - zestaw narzedzi diagnostycznych
:local target "8.8.8.8"

:put ""
:put "=========================================="
:put "       NETWORK PROBE SUITE"
:put "=========================================="
:put ""
:put ("Cel diagnostyki: " . $target)
:put ""

:put "[1] TRACEROUTE - śledzenie trasy"
:put "------------------------------------------"
/tool traceroute address=$target count=1 duration=3s
:put ""

:put "[2] PING - 5 prob"
:put "------------------------------------------"
/ping count=5 address=$target interval=1s
:put ""

:put "=========================================="
:put "Diagnostyka zakonczona."
:put "=========================================="
PRZYKLADOWY EKRAN WYNIKOWY:

[admin@MikroTik] > /import network_probe.rsc

==========================================
       NETWORK PROBE SUITE
==========================================

Cel diagnostyki: 8.8.8.8

[1] TRACEROUTE - sledzenie trasy
------------------------------------------
 ADDRESS          LOSS  SENT  LAST    AVG
 192.168.53.1     0%       1  0.7ms   0.7
 10.0.0.1         0%       1  0.8ms   0.8
 185.75.160.254   0%       1  3.5ms   3.5
 216.239.58.135   0%       1  52.1ms  52.1
 8.8.8.8          0%       1  9.9ms   9.9

[2] PING - 5 prob
------------------------------------------
SEQ  HOST     SIZE  TTL  TIME
  0  8.8.8.8    56  118  9ms897us
  1  8.8.8.8    56  118  9ms395us
  2  8.8.8.8    56  118  9ms512us
  3  8.8.8.8    56  118  9ms488us
  4  8.8.8.8    56  118  9ms621us

==========================================
Diagnostyka zakonczona.
==========================================
Script file loaded and executed successfully
+Podsumowanie – 10 zadań, 10 umiejętności MikroTik

Co opanowałeś?

Wykonując wszystkie zadania, zdobyłeś praktyczne umiejętności skryptowania w RouterOS:

Zad. Kluczowe komendy Umiejętność
1:local, :put, :set, :lenZmienne, arytmetyka, konkatenacja
2/interface find/get, :foreachIteracja po interfejsach, :if
3/ping, :foreach, :delayTestowanie hostów, lista adresów
4/ip arp find/getEksploracja ARP, filtrowanie bool
5/export file=, /file find/getBackup konfiguracji, pliki
6/ip route find/get, [:find]Analiza routingu, klasyfikacja tras
7/log find, /log printFiltrowanie logów, :len
8/system resource getDiagnostyka systemu, konwersja MB
9/ip address, :pick, :tonumAdresacja IP, klasyfikacja RFC1918
10/tool traceroute, /pingDiagnostyka sieci, raport

Każde zadanie wykorzystuje wyłącznie wbudowane komendy RouterOS – nie wymaga dodatkowych pakietów ani licencji.

  MikroTik RouterOS Scripting
  +--------------------------+
  | Zad 1  Zmienne           |
  | Zad 2  Interfejsy        |
  | Zad 3  Ping Watchdog     |
  | Zad 4  ARP Explorer      |
  | Zad 5  Backup konfiguracji|
  | Zad 6  Route Informer    |
  | Zad 7  Log Parser        |
  | Zad 8  System Resource   |
  | Zad 9  IP Inspector      |
  | Zad 10 Network Probe     |
  +--------------------------+
  \  RouterOS v7 scripting  /
   \                       /
    \---------------------/