Windows’ta Açık Portları ve Bu Portları Kullanan Uygulamaları Bulma

Windows’ta Hangi Uygulama Hangi Portu Kullanıyor? Port ve PID Bulma Rehberi

Windows üzerinde çalışan bir uygulamanın hangi portu kullandığını bilmek, özellikle sunucu ve istemci sistemlerinde oldukça önemlidir.

ERP uygulamaları, SQL Server, web servisleri, entegrasyon programları veya arka planda çalışan Windows servisleri belirli portları kullanabilir. Aynı portu başka bir uygulamanın kullanması ise bağlantı sorunlarına veya uygulamanın hiç çalışmamasına neden olabilir.

Peki Windows’ta hangi portların dinlendiğini ve bu portları hangi uygulamaların kullandığını nasıl bulabiliriz?

Bu yazıda bunu hem CMD hem de PowerShell üzerinden adım adım inceleyelim.

  1. Neden hangi portun kullanıldığını bilmek gerekir?

Bir sistemde port bilgisi birçok durumda önem kazanabilir.

Örneğin:

  • ERP servislerinin kullandığı portları kontrol etmek,
  • SQL Server’ın hangi port üzerinden bağlantı kabul ettiğini görmek,
  • Web servislerinin dinlediği portu tespit etmek,
  • Entegrasyon uygulamalarının kullandığı portları bulmak,
  • İki uygulamanın aynı portu kullanması nedeniyle oluşan çakışmaları tespit etmek,
  • Bir uygulamanın neden başlatılamadığını araştırmak,
  • Güvenlik açısından sistemde hangi servislerin dış bağlantı kabul ettiğini görmek.

Özellikle bir programın çalışmadığı durumlarda ilk bakılabilecek konulardan biri kullanılmak istenen portun başka bir uygulama tarafından kullanılıp kullanılmadığıdır.

⚠️ Not: Bu yazıdaki komutların bir kısmı (özellikle taskkill ve sistem süreçlerini listeleyen Get-Process çağrıları) için CMD veya PowerShell’i Yönetici olarak çalıştırmanız gerekebilir. Aksi halde bazı PID’lerin uygulama adları boş görünebilir.

  1. Windows’ta açık/dinleyen portları bulma

Windows’un Komut İstemi’nde (CMD) aşağıdaki komutu çalıştırabiliriz:

netstat -ano | findstr LISTENING

Bu komut bize bilgisayar üzerinde bağlantı bekleyen, yani LISTENING durumundaki portları gösterir.

Örneğin şöyle bir sonuç görebiliriz:

TCP    0.0.0.0:8080      0.0.0.0:0      LISTENING      4520

TCP    0.0.0.0:1433      0.0.0.0:0      LISTENING      1234

Burada dikkat etmemiz gereken son sütundur.

4520 ve 1234

değerleri PID (Process ID) değerleridir.

Ancak netstat bize doğrudan uygulamanın adını göstermez.

İşte burada PID bilgisi devreye girer.

  1. PID’den uygulamayı bulma

Örneğimizde 8080 portunu kullanan işlemin PID değeri:

4520 Bu PID’nin hangi uygulamaya ait olduğunu öğrenmek için CMD’de:

tasklist /FI “PID eq 4520” komutunu çalıştırabiliriz.

Windows bize ilgili işlemin adını gösterecektir.

Böylece işlem sırası şu hale gelir:

Port

PID

Uygulama

Örneğin:

8080 → PID 4520 → uygulama.exe

Bu yöntem özellikle bir uygulamanın hangi portu kullandığını tespit etmek için oldukça kullanışlıdır.

  1. Tek komutla Port + PID + Uygulama Adı

Windows PowerShell kullanıyorsak işlemi daha da kolaylaştırabiliriz. Aşağıda ihtiyaca göre üç farklı seviye sunuyoruz.

🔹 Basit kullanım (hızlı bakış)

Günlük kullanımda hızlıca portları listelemek için yeterlidir. Ancak sistem süreçlerinde (System, Idle) veya yetki yetersizliği durumunda ProcessName alanı boş kalabilir.

 

Get-NetTCPConnection -State Listen | Select-Object LocalPort,OwningProcess,@{N=”ProcessName”;E={(Get-Process -Id $_.OwningProcess).ProcessName}}

 

🔹 Raporlama / düzenli çıktı için

LocalAddress sütunu eklenir, port numarasına göre sıralanır ve sütunlar otomatik hizalanır. Sunucu raporlarında okunması kolaydır.

 

Get-NetTCPConnection -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess,@{N=”ProcessName”;E={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}} | Sort-Object LocalPort | Format-Table -AutoSize

 

🔹 Script içinde güvenilir çıktı için (önerilen)

try/catch ile hata yakalanır; işlem bulunamazsa ProcessName alanına — yazılır. Böylece çıktı hiçbir zaman bozulmaz ve Export-Csv, ConvertTo-Json gibi komutlarla rahatça birleştirilebilir.

 

Get-NetTCPConnection -State Listen | ForEach-Object { $procName = try { (Get-Process -Id $_.OwningProcess -ErrorAction Stop).ProcessName } catch { “—” }; [PSCustomObject]@{ LocalAddress = $_.LocalAddress; LocalPort = $_.LocalPort; PID = $_.OwningProcess; ProcessName = $procName } } | Sort-Object LocalPort | Format-Table -AutoSize

 

Örnek çıktı:

LocalAddress   LocalPort   PID    ProcessName

————   ———   —    ———–

0.0.0.0             1433   1234   sqlservr

0.0.0.0             8080   4520   uygulama

127.0.0.1           5432   3320   postgres

::                   445      4   System

::                  5357      4   System

Burada artık ayrıca tasklist çalıştırmamıza gerek kalmaz. Tek komutta Port + PID + uygulama adı bilgisine ulaşabiliriz. Bu nedenle özellikle çok sayıda portun bulunduğu sunucularda PowerShell yöntemi daha pratiktir.

⚠️ Not: Get-Process -Id $_.OwningProcess bazı sistem süreçleri (System, Idle) veya yetki yetersizliği durumunda hata verebilir. Bu yüzden -ErrorAction SilentlyContinue eklemek veya try/catch kullanmak daha sağlam bir çıktı almanızı sağlar.

  1. Belirli bir portu arama

Eğer yalnızca belirli bir portu kontrol etmek istiyorsak tüm listeyi incelememize gerek yoktur.

Örneğin 8080 portunu aramak için:

netstat -ano | findstr :8080

komutunu kullanabiliriz.

Sonuç örneğin:

TCP    0.0.0.0:8080    0.0.0.0:0    LISTENING    4520

şeklindeyse 8080 portunu kullanan işlemin PID’si: 4520 demektir.

Ardından:

tasklist /FI “PID eq 4520”

ile uygulamayı bulabiliriz.

PowerShell tarafında ise doğrudan port filtresiyle çalışabiliriz:

Get-NetTCPConnection -LocalPort 8080 -State Listen |
Select-Object LocalAddress, LocalPort, OwningProcess,
@{N=”ProcessName”;E={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}}

  1. Portu kullanan işlemi sonlandırmak

Bazen bir uygulamayı kapatmamıza rağmen portun hâlâ kullanıldığını görebiliriz.

Bu durumda işlemin PID’sini tespit ettikten sonra Windows’un taskkill komutu kullanılabilir.

Örneğin:

taskkill /PID 4520 /F

Burada 4520 ilgili işlemin PID’sidir.

Ancak bu komut dikkatli kullanılmalıdır.

PID’nin hangi uygulamaya ait olduğunu doğrulamadan bir işlemi sonlandırmak doğru değildir.

Özellikle sunucu bilgisayarlarında SQL Server, ERP servisleri, Windows servisleri veya başka kritik uygulamalar çalışıyor olabilir.

Bu nedenle doğru sıra:

Portu bul

PID’yi tespit et

PID’nin uygulamasını kontrol et

Gerekliyse işlemi sonlandır

şeklinde olmalıdır.

⚠️ Not: taskkill komutu çoğu zaman Yönetici yetkisi gerektirir. Ayrıca /F parametresi işlemi zorla sonlandırır; kaydedilmemiş veri kaybına yol açabilir.

  1. Örnek senaryo

Bir uygulamayı çalıştırmaya çalışıyoruz ve uygulama 8080 portunu kullanmak istiyor.

Ancak uygulama başlatılamıyor.

Öncelikle 8080 portunu kontrol ediyoruz:

netstat -ano | findstr :8080

Sonuç:

TCP    0.0.0.0:8080    0.0.0.0:0    LISTENING    4520

8080 portunun kullanımda olduğunu görüyoruz.

Şimdi PID 4520’nin hangi uygulamaya ait olduğunu buluyoruz:

tasklist /FI “PID eq 4520”

Böylece portu hangi uygulamanın kullandığını öğreniyoruz.

Yani aslında birkaç saniyede:

8080

4520

Uygulama

şeklinde ilerleyerek port çakışmasının kaynağını tespit etmiş oluyoruz.

  1. UDP portları

Buraya kadarki tüm komutlar TCP portlarını listeler. Ancak DNS (53), DHCP (67/68), SNMP (161), Syslog (514) ve bazı oyun sunucuları gibi servisler UDP kullanır.

CMD’de UDP portları için:

cmd

netstat -ano -p UDP

PowerShell’de UDP uç noktaları için:

Get-NetUDPEndpoint |
Select-Object LocalAddress, LocalPort, OwningProcess,
@{N=”ProcessName”;E={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}} |
Sort-Object LocalPort |
Format-Table -AutoSize

💡 İpucu: Bir portun hem TCP hem UDP tarafında dinlenip dinlenmediğini kontrol etmek için iki komutu ayrı ayrı çalıştırmanız gerekir.

  1. Hangi komut ne işe yarıyor?
Komut Ne gösterir?
netstat -ano Aktif TCP bağlantılarını ve PID bilgilerini
netstat -ano | findstr LISTENING Dinleyen TCP portlarını ve PID bilgilerini
netstat -ano -p UDP Yalnızca UDP bağlantılarını
tasklist /FI “PID eq 4520” Belirli PID’nin hangi uygulamaya ait olduğunu
Get-NetTCPConnection PowerShell üzerinden TCP bağlantı bilgilerini
Get-NetTCPConnection -LocalPort 8080 Belirli bir TCP portunu doğrudan
Get-NetUDPEndpoint PowerShell üzerinden UDP uç noktalarını
Get-Process Çalışan işlemler hakkında bilgi

Sonuç

Windows üzerinde bir portun hangi uygulama tarafından kullanıldığını bulmak için aslında birkaç temel komutu bilmek yeterlidir.

CMD tarafında en temel yöntem:

netstat -ano | findstr LISTENING

Ardından PID’yi uygulama adına çevirmek için:

tasklist /FI “PID eq 4520”

PowerShell tarafında ise işi tek komutta ve güvenilir şekilde yapmak mümkündür:

Get-NetTCPConnection -State Listen | ForEach-Object {

$procName = try {

(Get-Process -Id $_.OwningProcess -ErrorAction Stop).ProcessName

} catch { “—” }

[PSCustomObject]@{

LocalAddress = $_.LocalAddress

LocalPort    = $_.LocalPort

PID          = $_.OwningProcess

ProcessName  = $procName

}

} | Sort-Object LocalPort | Format-Table -AutoSize

UDP portlarını da görmek isterseniz:

Get-NetUDPEndpoint | Select-Object LocalAddress, LocalPort, OwningProcess, @{N=”ProcessName”;E={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}} | Sort-Object LocalPort | Format-Table -AutoSize

Özellikle ERP, SQL Server, web servisleri ve entegrasyon uygulamalarının bulunduğu bilgisayarlarda bu birkaç komut, bağlantı ve port sorunlarının kaynağını bulmak için oldukça kullanışlıdır.

Bir sonraki sorun yaşandığında akılda tutulabilecek en basit zincir ise şudur:

PORT → PID → UYGULAMA

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir