# 🔍 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*