# SNMP Multi-Subnet Scanner ## Opis Ten skrypt w Pythonie umożliwia **skanowanie wielu podsieci IPv4** oraz pobieranie informacji SNMP (v2c) z urządzeń sieciowych, takich jak Mikrotik, Cisco itp. Obsługuje **podział dużych sieci na mniejsze**, **równoległe skanowanie wielu podsieci**, **zapis wyników do pliku CSV** oraz opcjonalny **import podsieci z pliku tekstowego**. ## Funkcje - Obsługa wielu podsieci w formacie CIDR (z linii poleceń lub pliku) - Wsparcie dla standardowych OID-ów (domyślnie tylko `sysName`, inne opcjonalnie) - Możliwość podania niestandardowych OID-ów w formacie JSON - Wydajne skanowanie z użyciem `ThreadPoolExecutor` - Dzieli duże sieci na mniejsze (domyślnie /24) - Obsługa timeoutów oraz pomijanie hostów bez odpowiedzi - Eksport wyników do pliku CSV (z możliwością nazwania pliku) - Czytelna tabela wyników w terminalu ## Wymagania - Python 3.6+ - Zainstalowane narzędzie `snmpget` (część pakietu `net-snmp`) **Na Debian/Ubuntu:** ```bash sudo apt install snmp ``` ## Użycie ```bash python snmp_scan.py [subnet2 subnet3 ...] [opcje] ``` ### Opcje - `-c`, `--community` – SNMP community (domyślnie: `public`) - `-o`, `--oids` – własne OID-y w formacie JSON (np. `'{"sysDescr":"1.3.6.1.2.1.1.1.0"}'`) - `-w`, `--workers` – liczba równoległych wątków (domyślnie: 10) - `-p`, `--prefix` – prefiks do podziału dużych sieci (domyślnie: 24) - `-f`, `--file` – nazwa pliku CSV do zapisu wyników (domyślnie: `wyniki.csv`) - `-s`, `--subnet-file` – plik z listą podsieci (jedna na linię) ## Przykłady ### Skan jednej podsieci ```bash python scan.py 172.16.0.0/24 -c public -f wynik.csv -w 10 -p 32 ``` ### Skan wielu podsieci z niestandardowym community ```bash python scan.py 10.87.2.0/24 10.88.1.0/24 -c moje_community ``` ### Skan dużej sieci z podziałem na /24, 20 wątków i zapisem do pliku ```bash python scan.py 172.16.0.0/16 -w 20 -p 24 -f wynik.csv ``` ### Wczytywanie listy podsieci z pliku Zawartość `subnets.txt`: ``` 10.0.0.0/24 192.168.100.0/24 ``` Uruchomienie: ```bash python scan.py -s subnets.txt -c public -f wynik.csv ``` ## Przykładowy wynik ``` IP sysName sysDescr sysLocation sysContact ----------------------------------------------------------------------------------------------- 10.87.2.1 cisco-router Cisco IOS Software... Serwerownia admin@example.com 10.87.2.2 rb750 RouterOS RB750Gr3 ... Rack1 noc@firma.pl ``` ## Dostosowanie Aby dodać więcej OID-ów do zapytań, możesz: - Podać je w linii poleceń: ```bash -o '{"sysName":"1.3.6.1.2.1.1.5.0","sysDescr":"1.3.6.1.2.1.1.1.0"}' ``` - Lub zmodyfikować domyślny słownik w kodzie: ```python default_oids = { "sysName": "1.3.6.1.2.1.1.5.0", "sysDescr": "1.3.6.1.2.1.1.1.0", ... } ``` ## Licencja Autor Mateusz Gruszczyński @linuxiarz.pl (https://www.linuxiarz.pl) Projekt open-source przeznaczony do użytku wewnętrznego lub edukacyjnego. Dalsza dystrybucja zgodna z zasadami Twojej organizacji.