snmp_skaner/README.md
2025-05-06 11:27:40 +02:00

111 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 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.