0%

Windows’ta Açık ve Kullanımdaki Portları Bulma: netstat ve PowerShell Rehberi

“Bu port açık mı?”, “1433’ü kim tutuyor?”, “Sunucuya kim bağlı?” — sahada en sık duyduğumuz sorular bunlar. Windows’ta bu soruların cevabı için ekstra bir araç kurmanıza gerek yok: netstat ve PowerShell’deki Get-NetTCPConnection işin büyük kısmını halleder. Bu yazıda ikisini de bol örnekle, gerçek senaryolar üzerinden anlatıyoruz.

Port “açık” derken neyi kastediyoruz?

Bir port, bilgisayarınızdaki bir programın ağdan gelen bağlantıları beklediği kapı numarasıdır. Web sunucusu 80 ve 443’te bekler, uzak masaüstü 3389’da, SQL Server 1433’te. Bir portun “açık” olması için iki şey aynı anda doğru olmalı:

  • Dinleyen bir program var: Windows tarafında portu tutan bir servis ya da uygulama çalışıyor (netstat’ta LISTENING durumu).
  • Yol açık: Windows Güvenlik Duvarı, antivirüs ve aradaki ağ cihazları bu porta gelen trafiğe izin veriyor.

netstat size ilk maddeyi gösterir. İkinci maddeyi başka bir bilgisayardan test etmeniz gerekir; yazının sonunda ona da geliyoruz.

netstat çıktısındaki durumlar

Komutları çalıştırınca en sağda göreceğiniz State sütunu aslında hikâyenin özeti:

DurumAnlamıNe zaman görürsünüz?
LISTENINGPort açık, bağlantı bekliyor.Çalışan bir servis: SQL Server, IIS, Logo lisans servisi…
ESTABLISHEDKurulu, aktif bir bağlantı var.Açık bir RDP oturumu, tarayıcının bir siteye bağlantısı.
TIME_WAITBağlantı kapandı, Windows kısa süre daha bekliyor.Yoğun web sunucularında yüzlercesi olabilir, normaldir.
CLOSE_WAITKarşı taraf kapattı, buradaki uygulama hâlâ kapatmadı.Çok sayıda birikmişse uygulamada bağlantı sızıntısı olabilir.
SYN_SENTBağlantı isteği gönderildi, cevap bekleniyor.Ulaşılamayan bir sunucuya bağlanmaya çalışan program.

netstat ile başlayalım

Komut İstemi’ni (CMD) açın. Parametre vermeden çalıştırırsanız netstat yalnızca kurulu bağlantıları listeler ve adresleri isme çevirmeye çalışır; bu hem yavaş hem eksiktir. Sahada işe yarayan kombinasyon şu:

CMD
netstat -ano

Harflerin anlamı:

  • -a Tüm bağlantıları ve dinlenen portları göster (yalnızca kurulu olanları değil).
  • -n Adresleri ve portları sayı olarak göster, DNS çözümlemesiyle vakit kaybetme.
  • -o Her satırın sonuna portu kullanan işlemin PID’sini ekle.
  • -b PID yerine doğrudan programın adını (ör. sqlservr.exe) yaz. Yönetici yetkisi ister.
  • -p tcp Yalnızca TCP’yi listele (udp, tcpv6 de olur).

Örnek bir çıktı şöyle görünür:

Kod
Proto  Local Address          Foreign Address        State           PID
TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       956
TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
TCP    0.0.0.0:1433           0.0.0.0:0              LISTENING       3120
TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       1284
TCP    0.0.0.0:32070          0.0.0.0:0              LISTENING       4468
TCP    192.168.1.10:3389      192.168.1.57:51422     ESTABLISHED     1284
TCP    192.168.1.10:1433      192.168.1.23:49811     ESTABLISHED     3120
UDP    0.0.0.0:123            *:*                                    1120

Okuma şekli: Local Address sütunundaki iki noktadan sonrası port numarası. 0.0.0.0:1433 “bu makinenin tüm ağ kartlarında 1433 dinleniyor” demek; 127.0.0.1:1433 görürseniz servis yalnızca kendi içinden bağlantı kabul ediyor, ağdan kimse erişemez. Tam liste için netstat /? yazabilirsiniz.

İşe yarayan netstat filtreleri

Ham liste yüzlerce satır olabilir. CMD’nin find ve findstr komutlarıyla tam istediğiniz satırları süzün.

Yalnızca dinlenen (açık) portlar

CMD
netstat -ano | find /i "listening"

Bir sunucuda “dışarıya hangi kapılar açık?” sorusunun tek satırlık cevabı. Yeni kurduğunuz bir makinede beklemediğiniz bir port görüyorsanız PID’sinden yola çıkıp kim olduğunu bulun.

Kurulu bağlantılar: şu an kim bağlı?

CMD
netstat -ano | find /i "established"

Foreign Address sütunu karşı tarafın IP’sini verir. Terminal sunucuda “kaç kişi bağlı?” diye bakmak için 3389 ile birleştirin:

CMD
netstat -ano | findstr :3389 | find /i "established"

Belirli bir port kim tarafından kullanılıyor?

En klasik soru. Port numarasının başına iki nokta koyarak arayın; böylece 80 ararken 8080 ya da 1800’ü de yakalamazsınız:

CMD
netstat -ano | findstr :80
netstat -ano | findstr :443

Satırın sonundaki PID’yi Görev Yöneticisi → Ayrıntılar sekmesinde bulabilirsiniz; ama komut satırından çıkmadan bakmak daha hızlı:

CMD
tasklist /FI "PID eq 3120"
CMD
Görüntü Adı                    PID Oturum Adı      Oturum#    Bellek Kullanımı
========================= ======== ================ =========== ============
sqlservr.exe                  3120 Services                   0    412.560 K

Ya da yönetici CMD’de -b ekleyip program adını netstat’ın kendisinden alın:

CMD
netstat -abno | findstr :1433

Bir portu canlı izlemek

Komutun sonuna saniye yazarsanız netstat o aralıkla yeniden çalışır. Servis ayağa kalkarken ya da bağlantı kopmalarını izlerken çok işe yarar; Ctrl+C ile çıkarsınız:

CMD
netstat -ano 5 | findstr :32070

Sonucu dosyaya yazdırmak

Uzaktan destek verirken ya da bir sorunu kayda geçirmek için çıktıyı dosyaya yönlendirin:

CMD
netstat -abno > C:\portlar.txt
netstat -ano | find /i "listening" > C:\dinlenen-portlar.txt

PowerShell ile daha okunaklı liste

Windows 8 / Server 2012 ve sonrasında PowerShell’in Get-NetTCPConnection komutu aynı bilgiyi nesne olarak verir; sıralamak, süzmek ve işlem adını yanına yazmak çok daha kolay.

Dinlenen portları port numarasına göre sıralı listeleyin:

PowerShell
Get-NetTCPConnection -State Listen |
    Sort-Object LocalPort |
    Format-Table LocalAddress, LocalPort, OwningProcess -AutoSize

PID yerine doğrudan işlem adını görmek isterseniz küçük bir hesaplanmış sütun ekleyin:

PowerShell
Get-NetTCPConnection -State Listen |
    Select-Object LocalAddress, LocalPort,
        @{Name = 'Process'; Expression = { (Get-Process -Id $_.OwningProcess).ProcessName }} |
    Sort-Object LocalPort |
    Format-Table -AutoSize

Tek bir port için “kim tutuyor?” sorusu:

PowerShell
Get-NetTCPConnection -LocalPort 1433 |
    Select-Object LocalAddress, LocalPort, State, RemoteAddress,
        @{Name = 'Process'; Expression = { (Get-Process -Id $_.OwningProcess).ProcessName }}

Kurulu bağlantıları karşı IP’ye göre gruplayıp “en çok kim bağlı?” diye bakmak:

PowerShell
Get-NetTCPConnection -State Established |
    Group-Object RemoteAddress |
    Sort-Object Count -Descending |
    Select-Object Count, Name -First 10

UDP tarafı için komut ayrı: Get-NetUDPEndpoint. DNS (53), NTP (123) ya da UniFi keşif (10001) gibi UDP servisleri burada görünür:

PowerShell
Get-NetUDPEndpoint | Sort-Object LocalPort | Format-Table LocalAddress, LocalPort, OwningProcess -AutoSize

Sahadan dört senaryo

1. “Logo açılmıyor: Can not connect to LOGO SERVER at 32070”

Logo lisans servisi 32070 portunu dinler. Sunucuda önce servisin gerçekten ayakta olup olmadığına bakın:

CMD
netstat -ano | findstr :32070

Satır hiç yoksa servis çalışmıyor demektir; services.msc’den başlatın. 0.0.0.0:32070 LISTENING görüyorsanız servis sağlam, sorun büyük ihtimalle güvenlik duvarında ya da istemcinin sunucu adını çözememesinde. Bu hatanın adım adım çözümünü ayrı bir yazıda anlattık.

2. “SQL Server’a ağdan bağlanamıyorum”

CMD
netstat -ano | findstr :1433

Üç olası sonuç var ve her biri farklı bir yere işaret eder:

  • Satır yok: SQL Server TCP/IP protokolü kapalı ya da servis durmuş. SQL Server Configuration Manager → Network Configuration → TCP/IP’yi etkinleştirip servisi yeniden başlatın.
  • 127.0.0.1:1433: Yalnızca yerel bağlantı kabul ediyor. TCP/IP özelliklerinde IP adreslerinin “Active/Enabled” olduğuna bakın.
  • 0.0.0.0:1433 LISTENING: SQL tarafı hazır; engel güvenlik duvarında. 1433/TCP için gelen kuralı açın.

3. “IIS başlamıyor: 80 portu kullanımda”

CMD
netstat -abno | findstr :80

Genellikle karşınıza Skype, httpd.exe (XAMPP/Apache) ya da System (HTTP.sys üzerinden çalışan başka bir servis, ör. SQL Reporting Services) çıkar. Çakışan uygulamayı durdurun ya da portunu değiştirin.

4. “Sunucu yavaş, dışarıya sürekli bağlantı var”

CMD
netstat -abno | find /i "established"

Tanımadığınız bir programın onlarca dış IP’ye bağlantı kurduğunu görüyorsanız durumu ciddiye alın: madencilik yazılımı, uzaktan erişim truva atı ya da şifrelenmiş veri sızdıran bir zararlı olabilir. Program adını ve dış IP’leri not edin, makineyi ağdan ayırın, güvenlik ekibinizle paylaşın.

Karşı taraftan test: port açık ama ulaşamıyorum

netstat sunucuda LISTENING gösteriyor ama istemci bağlanamıyorsa sorun yolda bir yerdedir. İstemciden şu komutla kapıyı çalın:

PowerShell
Test-NetConnection sunucu01 -Port 1433
Kod
ComputerName     : sunucu01
RemoteAddress    : 192.168.1.10
RemotePort       : 1433
InterfaceAlias   : Ethernet
SourceAddress    : 192.168.1.57
TcpTestSucceeded : True

TcpTestSucceeded : False dönüyorsa ve sunucuda port dinleniyorsa sırayla şunlara bakın: sunucudaki Windows Güvenlik Duvarı gelen kuralı, üçüncü parti antivirüsün kendi duvarı, aradaki switch/firewall kuralları ve istemcinin doğru IP’ye gittiği (ping -a ya da nslookup sunucu01). Eski alışkanlıkla telnet sunucu01 1433 kullanacaksanız Telnet istemcisinin önce kurulması gerekir.

Grafik arayüz isteyenler için

  • Kaynak İzleyicisi (resmon): Windows’un içinde gelir. Ağ sekmesindeki “Dinleme Bağlantı Noktaları” bölümü netstat -abno’nun tablo hâli; güvenlik duvarı durumunu da yanına yazar.
  • TCPView (Sysinternals): Microsoft’un ücretsiz aracı. Canlı liste, renkli değişiklik takibi ve sağ tık ile işlemi sonlandırma. Kurulum gerektirmez.
  • CurrPorts (NirSoft): Benzer işlev, şüpheli bağlantıları pembe işaretler, listeyi HTML/CSV olarak dışa aktarır.

Sık karşılaşılan portlar

Listede gördüğünüz numarayı hızlı eşleştirmek için sahada en çok rastladığımız portlar:

PortServisNot
80 / 443HTTP / HTTPSWeb sunucuları, birçok yönetim paneli.
135, 445RPC, SMB dosya paylaşımıHer Windows’ta açıktır; internete asla açılmaz.
3389Uzak Masaüstü (RDP)Dışa açılacaksa VPN arkasında olmalı.
1433 / 1434SQL Server / SQL Browser (UDP)Adlandırılmış örnekler dinamik port kullanabilir.
32070Logo lisans servisiLogo GO / Tiger istemcileri bu porta bağlanır.
25, 587, 993SMTP, SMTP gönderim, IMAPSPosta sunucuları ve istemcileri.
53, 123 (UDP)DNS, NTPDomain Controller’larda görmek normaldir.
8080, 8443Alternatif HTTP/HTTPSUniFi, Tomcat, proxy gibi uygulamalar.

Kısa özet

  • Hızlı bakış: netstat -ano; yalnızca açık portlar için | find /i "listening" ekleyin.
  • Portu kim tutuyor: netstat -abno | findstr :PORT (yönetici CMD) ya da PID’yi tasklist /FI "PID eq N" ile eşleştirin.
  • Okunaklı liste: PowerShell’de Get-NetTCPConnection -State Listen.
  • Dinleniyor ama ulaşılmıyor: İstemciden Test-NetConnection sunucu -Port N; sonra güvenlik duvarına bakın.
  • 0.0.0.0 mı 127.0.0.1 mi: İkincisi servisin ağa kapalı olduğunu söyler; netstat’ı okumanın en çok atlanan kısmı.