110 lines
3.0 KiB
Markdown
110 lines
3.0 KiB
Markdown
# 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 <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
|
||
|
||
```bash
|
||
python snmp_scan.py 10.87.2.0/24
|
||
```
|
||
|
||
### Skan wielu podsieci z niestandardowym community
|
||
|
||
```bash
|
||
python snmp_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 snmp_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 snmp_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
|
||
|
||
Projekt open-source przeznaczony do użytku wewnętrznego lub edukacyjnego. Dalsza dystrybucja zgodna z zasadami Twojej organizacji. |