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ęść pakietunet-snmp
)
Na Debian/Ubuntu:
sudo apt install snmp
Użycie
python snmp_scan.py <subnet1> [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
python scan.py -s subnets.txt -c public -f wynik.csv -w 10 -p 32
Skan wielu podsieci z niestandardowym community
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
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:
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ń:
-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:
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.
Description
Languages
Python
100%