# 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 -s subnets.txt -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.