ITBlog

IT Blog w tematach różnych...

  • O blogu…
  • Edukacja
    • Moodle – stare
    • Moodle2
    • Testy
    • Wykłady IT
  • Firma

Zbieranie danych za pomocą protokołu SNMP

Napisane przez Igor Brzeżek on 20 lipca 2026
Napisane w: Monitorowanie sieci, Sieci.

Contents
  1. Wprowadzenie
  2. Linux
  3. Instalacja klienta i demona
  4. Konfiguracja
  5. Testowanie
  6. Maszyna za NATem
  7. Konfiguracja demona pułapek
  8. Reakcja na pułapki
  9. Windows
  10. RouterOS
  11. Cisco

Wprowadzenie

Jeśli chcesz monitorować zdalnie zasoby hostów sieciowych takie jak obciążenie pamięci czy procesora (i wiele, wiele innych parametrów) możesz użyć protokołu SNMP. Poniżej pokazano podstawową instalację oraz konfiguracje na systemach Linux, Windows oraz RouterOS i Cisco. Nie jest w tym artykule opisywana w szczegółach cała teoria związana z SNMP a tylko wybrane elementy praktycznego zastosowania.  Ten system składa się z kilku elementów:

  • agent (udostępniający zasoby maszyny snmpd)
  • klient (odpytujący agenty, np.: snmpwalk, snmpget)
  • trap (tzw. pułapka) wysyłająca samodzielnie dane do demona (np.: snmptrapd)

Linux

Instalacja klienta i demona

Instalacja wymaga aktualizacji pakietów oraz instalacji:

# sudo apt update
# sudo apt install snmp snmpd snmp-mibs-downloader

Pakiet snmp zawiera oprogramowanie do ręcznego odpytywania agentów, pakiet snmpd odpowiada na takie pytania.

Konfiguracja

Pojawi sie katalog /etc/snmp a w nim dwa pliki: dla klienta ‚snmp.conf’ oraz dla serwera ‚snmpd.conf’. My skonfigurujemy tu ten drugi aby można było odpytywać nasz komputer:

# sudo nano /etc/snmp/snmpd.conf

Domyślnie po instalacji usługa działa tylko na interfejsie pętli zwrotnej:  szukamy linii z: ‚agentaddress  127.0.0.1,[::1]’ – to uruchamia usługe SNMP tylko na adresie pętli zwrotnej a my chcemy dostać się do parametrów SNMP z sieci LAN zatem komentujemy ta linie i wstawiamy:

# Dla IPv4
agentaddress udp:161
# rocommunity public 0.0.0.0/0

# Dla IPv6
agentaddress udp6:161
#rocommunity6 public ::/0

Linie zakomentowane to tak na wypadek gdyby w dalszej części pliku ich nie było (ale powinny być) i mówią o nazwie wspólnowy.

Testowanie

Przeładujemy usługę SNMP:

# sudo systemctl reload snmpd

I możemy sprawdzić czy działa i na jakim porcie nasłuchuje:

# netstat -aon | less

Powinno być cos takiego:

Usługi SNMP

Widać, że SNMP pracuje na protokole IPv4 i IPv6 na porcie 161. Od teraz możemy nasz host monitorować w Observium i nie tylko.  za pomocą snmpwalk sprawdzimy co tam piszczy w naszej maszynie. Składania:

# snmpwalk -v 2c -c public 127.0.0.1

lub gdy pracujemy na innej maszynie (IP dostosuj do swojego):

# snmpwalk -v 2c -c public 192.168.55.1

Maszyna za NATem

Jeśli maszyna, którą chcemy monitorować znajduje się za NAT to trzeba wykonać przekierowanie portów (można inaczej ale o tym tu nie mówimy). Należy przekierować port z zewnątrz (nazwijmy go ‚publiczny’) na port 161 hosta za NATem, protokół UDP. Jak już to wykonamy to w systemie zbierającym dane trzeba to uwzględnić. Jeśli to program snmpwalk to za adresem IP podajemy numer portu:

# snmpwalk -c public -v 2c 192.168.53.89:10000

Konfiguracja demona pułapek

Protokół SNMP i jego oprogramowanie nie działa w czasie rzeczywistym. Jak skonfigurujemy odpytywanie tak je mamy ale zawsze zapytania o stan np.: obciążenia procesora są wysyłane przez klienta SNMP w pewnych odstępach czasu np. co 5 minut. Co się dzieje w ‚międzyczasie’ tego nie wiemy. W tym może pomóc nam mechanizm tzw. pułapek. działa on na takiej zasadzie, że agent samodzielnie wysyła komunikat (UDP, port 162) do serwera pułapek (snmptrapd) na temat zdarzenia.

Najpierw instalujemy agenta pułapek. Jeśli już mamy pozostałe elementy SNMP to wystarczy:

# sudo apt install snmptrapd

Po instalacji możemy sprawdzić czy jest ok:

# snmptrapd --version

Konfiguracja jest przechowywana w /etc/snmp/snmptrap.conf zatem edytujemy go np.:

# sudo nano /etc/snmp/snmptrapd.conf

Na tym etapie wystarczy odkomentować linię

authCommunity log,execute,net public

oraz dodać linie:

doNotLogTraps no

aby demon przyjmował informacje od agentów.

Reakcja na pułapki

Aby sygnały z pułapek jakoś obsłużyć można dla wybranej pułapki napisać skrypt i zaprogramować jego wykonanie. Napiszemy prosty skrypt w BASH, który zapisze do pliku dane dotyczące pułapki. Format jest danych generowanych przez snmptrapd jest taki:

  • pierwsza linia: nazwa nadawcy (hostname)
  • druga linia IP nadawcy
  • trzecia linia i następne to dane (pary OID – wartość)

Poniżej przykład skryptu (przykładowo zapisanego w pliku /etc/snmp/trap_handler1.sh):

#!/bin/bash

# Ścieżka do pliku logu (zgodnie z dobrą praktyką w /var/log)
LOG_FILE="/var/log/trap_test1.log"

# Pobranie aktualnej daty i czasu
DATE_TIME=$(date "+%Y-%m-%d %H:%M:%S")

# snmptrapd przekazuje pierwsze dwie linie jako informacje o nadawcy:
read -r HOSTNAME
read -r TRANSPORT_INFO

# Wyciągamy czysty adres IP z linii transportowej (często ma format "UDP: [192.168.1.50]:58392")
IP_ADDRESS=$(echo "$TRANSPORT_INFO" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)

# Jeśli nie udało się wyciągnąć IP z drugiej linii, używamy pierwszej
if [ -z "$IP_ADDRESS" ]; then
 IP_ADDRESS="$HOSTNAME"
fi

# Zapis nagłówka do logu
echo "==========================================" >> "$LOG_FILE"
echo "Data i czas : $DATE_TIME" >> "$LOG_FILE"
echo "Nazwa hosta : $HOSTNAME" >> "$LOG_FILE"
echo "Adres IP : $IP_ADDRESS" >> "$LOG_FILE"
echo "Zawartość pułapki:" >> "$LOG_FILE"

# Wczytujemy całą resztę danych (zmienne/OID przesłane w pułapce)
while read -r OID VALUE; do
 echo " $OID -> $VALUE" >> "$LOG_FILE"
done

echo "==========================================" >> "$LOG_FILE"
echo "" >> "$LOG_FILE"
# === KONIEC =============================================================================

Ponieważ odbędą się zapisy do pliku logu trzeba go utworzyć oraz ustawić uprawnienia:

sudo touch /var/log/trap_test1.log
sudo chmod 666 /var/log/trap_test1.log

Ponownie otwieramy plik /etc/snmpd/snmptrapd.conf i na końcu wpisujemy zlecenie uruchomienia skryptu:

#
# =========================================================================================================
# EXAMPLE-trap.conf:
# An example configuration file for configuring the Net-SNMP snmptrapd agent.
#
###############################################################################
#
# This file is intended to only be an example.
# When the snmptrapd agent starts up, this is where it will look for it.
#
# All lines beginning with a '#' are comments and are intended for you
# to read. All other lines are configuration commands for the agent.

#
# PLEASE: read the snmptrapd.conf(5) manual page as well!
#
#authCommunity log,execute,net private 
authCommunity log,execute,net public

doNotLogTraps no

#
## send mail when get any events
#traphandle default /usr/bin/traptoemail -s smtp.example.org foobar@example.org
#
## send mail when get linkDown
#traphandle .1.3.6.1.6.3.1.1.5.3 /usr/bin/traptoemail -s smtp.example.org foobar@example.org
# Jesli chcemy lapac wiecej pulapek o konkretnych OID to trzeba je wpsiac w osobnych liniach 
# w formacie: traphandle NUMER_OID /katalog/ze/skryptem.sh
# gdzie NUMER_OID to numer np: .1.3.6.1.4.1.999.1
# przyklad z RouterOS: traphandle .1.3.6.1.4.1.14988.2 /bin/bash /etc/snmp/trap_RouterOS.sh
# ale PRZED linia lapiaca wszystko czyli ponizsza:
traphandle default /etc/snmp/trap_handler1.sh
# =========================================================================================================

Kolejno po zapisaniu zmian trzeba przeładować demona:

# sudo systemctl reload snmptrapd.service

Od tego momentu nasz system przyjmuje pułapki i reaguje zgodnie z zadanym scenariuszem. Czy komunikacja SNMP dociera to sprawdzimy tak:

  • Na hoście z ‚snmptrapd’ włączamy przechwytywanie ruchu za pomocą tcpdump:
# sudo tcpdump -i enp2s0 -n -v | grep "192.168.53.110.162"

Adres 192.168.53.110 jest przykładowy i to jest adres IP interfejsu na jakim host nasłuchuje pułapek – ustaw właściwy adres swojego hosta! Ostatnia wartość w adresie IP to port (.162) na których host nasłuchuje pułapek.

  • Z innego hosta wysyłamy pułapkę:
# sudo snmptrap -v 2c -c public 192.168.53.110 '' 1.3.6.1.4.1.999.1 1.3.6.1.4.1.999.1.1 s "Test pulapki SNMP"

Po wysłaniu pułapki przenosimy się na hosta nasłuchującego i powinniśmy zobaczyć tam coś jak niżej:

SNMP – test pułapki

To na razie oznacza tylko tyle, że pułapka jest wysłana. Jeśli została odebrana przez snmptrapd i przetworzona to w katalogu ‚/var/log’ pojawi się plik ‚trap_test1.log’. Stan działania sprawdzimy też za pomocą polecenia:

# sudo journalctl -u snmptrapd --since "10 minutes ago"

Pokaże to wszelkie logi z ostatnich 10 minut. Zawartość pliku trap_test1.log:

==========================================
Data i czas : 2026-07-20 18:17:10
Nazwa hosta : <UNKNOWN>
Adres IP : 192.168.53.97
Zawartość pułapki:
 DISMAN-EVENT-MIB::sysUpTimeInstance -> 2:12:50:35.33
 SNMPv2-MIB::snmpTrapOID.0 -> SNMPv2-SMI::enterprises.14988.2
 SNMPv2-SMI::enterprises.14988.2.1.1 -> "Router rebooted due to power failure"
==========================================

==========================================
Data i czas : 2026-07-20 18:19:49
Nazwa hosta : <UNKNOWN>
Adres IP : 192.168.53.97
Zawartość pułapki:
 DISMAN-EVENT-MIB::sysUpTimeInstance -> 2:12:53:31.30
 SNMPv2-MIB::snmpTrapOID.0 -> IF-MIB::linkDown
 IF-MIB::ifIndex.1 -> 1
==========================================

Zaletą jest to, że powyższe umożliwia nam logowanie do plików pułapek przesyłanych z różnych urządzeń ale wadą, że loguje wszystko do jednego pliku. W innym wpisie zostanie pokazane jak różne typu urządzeń logować do różnych plików.

Windows

Instalacja

W tym systemie można zainstalować agenta SNMP (z którego będzie mogło korzystać Observium) na kilka sposobów. Tutaj pokazano instalację za pomocą PowerShell.

  • uruchamiamy powłokę PowerShell jako administrator
  • Wpisujemy poniższe polecenie i zatwierdzamy:
c:\> Add-WindowsCapability -Online -Name "SNMP.Client~~~~0.0.1.0"
  • Lub otwórz Menu Start i w polu wyszukiwania wpisz „funkcje” i wybierz „Włącz lub wyłącz funkcje systemu Windows”
  • Kiedy pojawi się okno z funkcjami zaznacz „”Protokół SNMP…” i checkbox zawarty w nim

Dodanie funkcji agenta SNMP w Windows

  • Zatwierdź i czekany na instalację, co chwilę może potrwać
  • Jak instalacja się zakończy to sprawdzamy czy działa uruchamiając okno usług systemowych: (z okna konsoli z uprawnieniami administratora wpisujemy ‚services.msc’ lub w menu Start w polu wyszukiwania wpisujemy ‚Usługi’ i potem klikamy prawym klawiszem myszki i wybieramy ‚Uruchom jako administrator’)
c:\> services.msc

SNMP – na liście usług systemowych

  • Jeśli widać, że działa idziemy dalej, jak nie skontroluj czy poprzednie kroki wykonano poprawnie
  • Można to także wykonać z konsoli administratora PowerShell poleceniem:
c:\> Get-Service | Where-Object {$_.Status -eq "Running"}

Konfiguracja

  • Dwukrotnie kliknij w nazwę usługi SNMP i powinna być zaznaczona opcje ‚Typ uruchomienia: automatyczny’ oraz ‚Stan usługi: Działa’

SNMP – konfiguracja usługi w Windows

  • Przechodzimy na zakładkę ‚Zabezpieczenia’ i tam dodajemy nazwę wspólnoty klikając przycisk ‚Dodaj’
  • Ustalamy Prawa wspólnoty na tylko do odczytu oraz nazwę wspólnoty na ‚public’

SNMP – ustalenie nazwy wspólnoty

  • W tym samym oknie, poniżej zaznaczamy ” Zaakceptuj pakiety SNMP od dowolnego hosta’ chyba, że wiemy pod jakim adresem jest nasze Observium i ten adres się nie zmieni. Jak się zmieni a zaznaczona będzie druga opcja to Observium czy inny NMS nie będzie mógł odpytywać po SNMP naszego Windowsa. Zaznaczamy i zatwierdzamy.

SNMP – w Windows, nazwa wspólnoty

  • W zakładce ‚Agent’ możemy uzupełnić informacje kontaktowe na temat tej maszyny
  • Zatwierdzamy klikając ‚OK’

SNMP – w Windows, informacje kontaktowe

Konfiguracja zapory ogniowej

Pozostaje jeszcze dodanie wpisu do zapory sieciowej pozwalającego na dostęp Observium do agenta. Protokół SNMP pracuje na porcie 161/UDP i taki tez trzeba otworzyć na zaporze tego systemu Windows w kierunku połączeń przychodzących. Uwaga: jeśli masz zaporę inną niż wbudowana w system (np. od programu AV to sprawdź jak to zrobić w tym programie). Najpierw możemy sprawdzić czy już są wpisy w zaporze zawiązane z SNMP. Najprościej z okna administratora PowerShell jednym z polecen:

c:\> Get-NetFirewallRule -DisplayName "*snmp*" | Format-Table Name, DisplayName, Enabled, Direction, Action

lub

c:\> Get-NetFirewallPortFilter -Protocol UDP | Where-Object {$_.LocalPort -eq 161} | Get-NetFirewallRule | Format-Table DisplayName, Enabled, Direction, Action

Jeśli reguły już są zobaczymy coś jak niżej:

SNMP – reguły firewall

Jeśli reguł brak to możemy taką dodać poleceniem:

c:\> New-NetFirewallRule -DisplayName "Zezwalaj na SNMP (UDP-In)" -Direction Inbound -Protocol UDP -LocalPort 161 -Action Allow

SNMP – dodanie reguły za pomocą PowerShell

Testowanie

Czy podsystem SNMP na naszym Windows działa sprawdzimy z systemu Linux z zainstalowanym pakietem snmp-tools za pomocą polecenia snmpwalk. Trzeba tylko sprawdzić jaki adres IP ma nasz Windows (poleceniem ipconfig)

# snmpwalk -c public -v 2c 192.168.53.121

Powinniśmy zobaczyć coś jak niżej:

SNMP – test Windowsa z Linuxa


RouterOS

Tutaj nic nie trzeba instalować, wystarczy tylko włączyć. Na konsoli wygląda to tak (za pomocą WinBox menu IP/SNMP):

Konfiguracja SNMP w RouterOS

Klikamy w Enabled, ustalamy dane kontaktowe i lokalizacje (opcjonalnie) oraz ustalamy wersje (2 nie obsługuje szyfrowania, 3 już tak). Klikając w Communities jeszcze ustalamy nazwę wspólnoty (domyślnie jest: public). Tyle podstawowej (nieszyfrowanej) komunikacji. Ta opcja pozwala tylko czytać z urządzenia, co nam wystarczy.  Czy działa. Sprawdzimy na Linux poleceniem:

# snmpwalk -v 2c -c public 192.168.55.1

Adres podaj z Twojej sieci. Jak działa przeleci po ekranie masa informacji.

Cisco

…

Nawigacja

← Observium – prosty monitoring naszej sieci (część 1: konfiguracja i uruchomienie + SNMP)
  • Szukaj

  • Kategorie

    • IT ogólnie (149)
      • Bezpieczeństwo (20)
        • Model AAA (7)
        • Szyfrowanie (1)
      • CCTV (3)
      • Hardware (2)
      • Podstawy informatyki (1)
      • Sieci (37)
        • Cisco (4)
          • Obsługa haseł (2)
        • MikroTik (8)
        • Monitorowanie sieci (2)
        • Pomiary w sieciach LAN (6)
          • iptraf-ng (3)
        • Protokół ARP (5)
        • Symulator sieci GNS3 (3)
        • WLAN / WiFi (5)
      • Software (78)
        • Bazy danych (13)
        • Programowanie (21)
        • Systemy operacyjne (21)
          • Linux Debian (18)
        • Windows (8)
      • WiFi (2)
      • Wirtualizacja (26)
  • Ostatnie wpisy

    • Zbieranie danych za pomocą protokołu SNMP
    • Observium – prosty monitoring naszej sieci (część 1: konfiguracja i uruchomienie + SNMP)
    • WinScreen czyli terminal z wirtualnymi oknami
    • Style Mover czyli przenoszenie stylów HTML
    • Generator obrazów AI za pomocą API
  • Strona odwiedzona

    od 11.01.2013

  • Doskonała platforma e-learningowa Uzyskaj certyfikat IT

Proudly powered by WordPress Theme: Parament by Automattic.
7ads6x98y