246 lines
6.5 KiB
Markdown
246 lines
6.5 KiB
Markdown
# 🔍 Network Switch Discovery Tool
|
||
|
||
PowerShell tabanlı, SSH + SNMP destekli, çoklu marka ağ switch keşif aracı.
|
||
Cisco, HP/Aruba, Ubiquiti/UniFi, Huawei, TP-Link ve diğer markaları otomatik olarak tespit eder.
|
||
|
||
---
|
||
|
||
## 📁 Dosya Yapısı
|
||
|
||
```
|
||
NetworkSwitchDiscovery\
|
||
├── Start-SwitchDiscovery.ps1 ← İnteraktif menü (buradan başla)
|
||
├── Invoke-SwitchDiscovery.ps1 ← Ana keşif motoru
|
||
├── discovery_config.json ← Otomatik kaydedilen ayarlar (ilk çalıştırmada oluşur)
|
||
├── lib\
|
||
│ └── SharpSnmpLib.dll ← (İsteğe bağlı) Gelişmiş SNMP desteği
|
||
└── README.md
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ Gereksinimler
|
||
|
||
| Gereksinim | Açıklama |
|
||
|---|---|
|
||
| PowerShell 5.1+ | Windows 10/11 ile birlikte gelir |
|
||
| [Posh-SSH](https://github.com/darkoperator/Posh-SSH) | SSH bağlantısı için (otomatik kurulum menüde mevcut) |
|
||
| .NET Framework 4.7+ | SNMP UDP soketi için |
|
||
| SharpSnmpLib.dll | İsteğe bağlı, gelişmiş SNMP v3 desteği için |
|
||
|
||
---
|
||
|
||
## 🚀 Hızlı Başlangıç
|
||
|
||
### 1. PowerShell'i Yönetici Olarak Aç
|
||
|
||
```powershell
|
||
# Execution Policy (bir kez gerekli)
|
||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||
```
|
||
|
||
### 2. Menüyü Başlat
|
||
|
||
```powershell
|
||
cd C:\Tools\NetworkSwitchDiscovery
|
||
.\Start-SwitchDiscovery.ps1
|
||
```
|
||
|
||
### 3. Veya Doğrudan Parametreli Çalıştır
|
||
|
||
```powershell
|
||
# CIDR aralığı, SSH + SNMP birlikte
|
||
.\Invoke-SwitchDiscovery.ps1 -IPRange "192.168.1.0/24" -Username admin -Method Both
|
||
|
||
# Sadece SNMP, farklı community
|
||
.\Invoke-SwitchDiscovery.ps1 -IPRange "10.0.0.1-10.0.0.50" -Method SNMP -SNMPCommunity private
|
||
|
||
# Tek IP, sadece SSH
|
||
.\Invoke-SwitchDiscovery.ps1 -IPRange "172.16.0.1" -Username admin -Password "sifre123" -Method SSH
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 Parametreler
|
||
|
||
| Parametre | Varsayılan | Açıklama |
|
||
|---|---|---|
|
||
| `-IPRange` | *(zorunlu)* | CIDR, tire veya tekil IP |
|
||
| `-Username` | — | SSH kullanıcı adı |
|
||
| `-Password` | — | SSH şifre (girilmezse güvenli prompt açılır) |
|
||
| `-SNMPCommunity` | `public` | SNMP community string |
|
||
| `-SNMPVersion` | `v2c` | v1, v2c veya v3 |
|
||
| `-Method` | `Both` | SSH, SNMP veya Both |
|
||
| `-OutputPath` | Script dizini | CSV/HTML çıktı klasörü |
|
||
| `-MaxThreads` | `20` | Paralel tarama thread sayısı |
|
||
| `-SSHPort` | `22` | SSH port numarası |
|
||
| `-Timeout` | `5` | Bağlantı zaman aşımı (saniye) |
|
||
|
||
---
|
||
|
||
## 🏷️ Desteklenen Markalar ve SSH Komutları
|
||
|
||
### Cisco IOS / IOS-XE
|
||
```
|
||
terminal length 0
|
||
show version
|
||
show running-config | include hostname
|
||
```
|
||
Tespit: Banner'da `Cisco` ifadesi veya SNMP sysDescr
|
||
|
||
### HP / Aruba ProCurve
|
||
```
|
||
no page
|
||
show system information
|
||
show version
|
||
```
|
||
Tespit: `HP`, `ProCurve`, `Aruba` ifadeleri
|
||
|
||
### Ubiquiti EdgeSwitch / UniFi
|
||
```
|
||
show version
|
||
show system
|
||
```
|
||
Tespit: `Ubiquiti`, `EdgeOS`, `UniFi` ifadeleri
|
||
|
||
### MikroTik RouterOS
|
||
```
|
||
/system identity print
|
||
/system resource print
|
||
/system routerboard print
|
||
```
|
||
Tespit: `MikroTik` ifadesi
|
||
|
||
### Huawei VRP
|
||
```
|
||
screen-length 0 temporary
|
||
display version
|
||
display sysname
|
||
```
|
||
Tespit: `Huawei` ifadesi
|
||
|
||
### TP-Link / Diğer
|
||
```
|
||
show version
|
||
show system
|
||
```
|
||
Tespit: `TL-`, model kodu deseni
|
||
|
||
---
|
||
|
||
## 📡 SNMP OID Referansı
|
||
|
||
| OID | Açıklama |
|
||
|---|---|
|
||
| `1.3.6.1.2.1.1.1.0` | sysDescr — Cihaz tam açıklaması |
|
||
| `1.3.6.1.2.1.1.5.0` | sysName — Hostname |
|
||
| `1.3.6.1.2.1.1.4.0` | sysContact — İletişim bilgisi |
|
||
| `1.3.6.1.2.1.1.6.0` | sysLocation — Fiziksel konum |
|
||
| `1.3.6.1.2.1.1.3.0` | sysUpTime — Çalışma süresi |
|
||
|
||
SNMP community string varsayılan olarak `public` kullanılır.
|
||
Cihazda SNMP devre dışıysa veya community yanlışsa SNMP sütunu `Başarısız` gösterir.
|
||
|
||
---
|
||
|
||
## 📤 Çıktı Dosyaları
|
||
|
||
Her tarama sonunda iki dosya oluşturulur:
|
||
|
||
### CSV (`SwitchDiscovery_YYYYMMDD_HHmmss.csv`)
|
||
Excel veya başka araçlarda açılabilir, UTF-8 kodlamalı.
|
||
|
||
| Alan | Açıklama |
|
||
|---|---|
|
||
| IP | Cihaz IP adresi |
|
||
| Hostname | Switch hostname (SNMP/SSH'dan) |
|
||
| DNSName | DNS çözümlemesi |
|
||
| Vendor | Tespit edilen marka |
|
||
| Model | Cihaz modeli |
|
||
| FirmwareVer | IOS/Firmware versiyonu |
|
||
| SysLocation | SNMP konum bilgisi |
|
||
| SysContact | SNMP iletişim bilgisi |
|
||
| Uptime | Cihaz çalışma süresi |
|
||
| SSHStatus | Başarılı / Başarısız / Atlandı |
|
||
| SNMPStatus | Başarılı / Başarısız / Atlandı |
|
||
| SysDescr | Ham sysDescr verisi |
|
||
|
||
### HTML (`SwitchDiscovery_YYYYMMDD_HHmmss.html`)
|
||
Tarayıcıda açılan interaktif rapor:
|
||
- Anlık arama/filtreleme
|
||
- Marka renkli rozet gösterimi
|
||
- SSH/SNMP durum badgeleri
|
||
- Özet istatistik kartları
|
||
|
||
---
|
||
|
||
## 💡 Pratik Kullanım Örnekleri
|
||
|
||
```powershell
|
||
# Tüm /24 ağı tara, sonucu masaüstüne kaydet
|
||
.\Invoke-SwitchDiscovery.ps1 `
|
||
-IPRange "192.168.10.0/24" `
|
||
-Username netadmin `
|
||
-SNMPCommunity mycompany `
|
||
-Method Both `
|
||
-OutputPath "$env:USERPROFILE\Desktop" `
|
||
-MaxThreads 30
|
||
|
||
# Birden fazla switch IP'si — tire formatıyla
|
||
.\Invoke-SwitchDiscovery.ps1 `
|
||
-IPRange "10.1.1.1-10.1.1.20" `
|
||
-Username cisco `
|
||
-Method SSH `
|
||
-SSHPort 2222
|
||
|
||
# Sadece SNMP, hızlı envanter
|
||
.\Invoke-SwitchDiscovery.ps1 `
|
||
-IPRange "172.20.0.0/22" `
|
||
-Method SNMP `
|
||
-SNMPCommunity readonly `
|
||
-MaxThreads 50 `
|
||
-Timeout 3
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 Sorun Giderme
|
||
|
||
| Sorun | Çözüm |
|
||
|---|---|
|
||
| `Posh-SSH bulunamadı` | Menüden [8] seçerek otomatik kurulum yap |
|
||
| SSH bağlantı hatası | Firewall port 22'yi açık, cihazda SSH aktif mi kontrol et |
|
||
| SNMP yanıt vermiyor | Community string'i doğrula, cihazda SNMP v2c aktif mi kontrol et |
|
||
| `execution policy` hatası | `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser` çalıştır |
|
||
| Thread hatası | `-MaxThreads` değerini düşür (örn. 5) |
|
||
| Şifre prompt açılmıyor | `-Password` parametresini doğrudan ver |
|
||
|
||
---
|
||
|
||
## 🔒 Güvenlik Notları
|
||
|
||
- Şifreler `discovery_config.json` dosyasına **kaydedilmez**, her oturumda sorulur.
|
||
- SSH host anahtarları `Posh-SSH` tarafından otomatik kabul edilir (`-AcceptKey`).
|
||
Üretim ortamında host key doğrulama etkinleştirilmesi önerilir.
|
||
- SNMP v1/v2c community string düz metin iletilir. Mümkünse SNMP v3 kullan.
|
||
- Tarama yalnızca yetkili ağlarda yapılmalıdır.
|
||
|
||
---
|
||
|
||
## 📦 İsteğe Bağlı: SharpSnmpLib Kurulumu (Gelişmiş SNMP)
|
||
|
||
```powershell
|
||
# NuGet ile indir
|
||
Install-Package SharpSnmpLib -Destination .\lib
|
||
|
||
# Veya dotnet CLI
|
||
dotnet add package SharpSnmpLib
|
||
# Ardından bin\Debug\net*\SharpSnmpLib.dll dosyasını .\lib\ klasörüne kopyala
|
||
```
|
||
|
||
SharpSnmpLib olmadan araç yerleşik UDP SNMP implementasyonu kullanır (v1/v2c destekli).
|
||
|
||
---
|
||
|
||
*Mustafa Özkaya — NetworkSwitchDiscovery v1.0*
|