TCPView ile Açık Bağlantıları ve Portları İzleme
Bir gün ofiste her şey yolunda giderken ağ trafiğinizin aniden yavaşladığını fark ettiniz. Firewall logları bir şeyler söylüyor ama tam olarak hangi uygulamanın ne yaptığını göremiyorsunuz. İşte tam bu noktada TCPView devreye giriyor. Sysinternals ailesinin bu güçlü üyesi, Windows üzerindeki tüm TCP ve UDP bağlantılarını gerçek zamanlı olarak izlemenizi sağlıyor. Netstat’ın grafiksel ve çok daha yetenekli versiyonu olarak düşünebilirsiniz.
TCPView Nedir ve Neden Kullanmalısınız?
TCPView, Microsoft Sysinternals takımı tarafından geliştirilen ücretsiz bir ağ izleme aracıdır. Windows üzerinde çalışan her process’in hangi portları kullandığını, hangi uzak adreslerle bağlantı kurduğunu ve bu bağlantıların durumunu (ESTABLISHED, LISTENING, TIME_WAIT vb.) anlık olarak gösterir.
Klasik netstat komutunun temel sorunlarından biri, anlık bir fotoğraf çekmesidir. Sürekli yenilemeniz gerekir ve çıktı okunması zor ham metindir. TCPView ise bağlantıları renkli olarak işaretler, yeni açılan bağlantıları yeşil, kapanan bağlantıları kırmızı gösterir ve saniyede birden fazla kez otomatik yeniler.
Bir sysadmin olarak benim için en değerli özelliği şu: hangi process’in hangi bağlantıyı açtığını net bir şekilde görmesi. Şüpheli bir port açık olduğunda “bu portu kim açtı?” sorusunun cevabını 2 saniyede bulabiliyorsunuz.
İndirme ve Kurulum
TCPView kurulum gerektirmez, taşınabilir (portable) bir uygulamadır. Microsoft’un resmi Sysinternals sayfasından veya doğrudan aşağıdaki komutla indirebilirsiniz.
PowerShell ile indirme:
Invoke-WebRequest -Uri "https://download.sysinternals.com/files/TCPView.zip" -OutFile "$env:TEMPTCPView.zip"
Expand-Archive -Path "$env:TEMPTCPView.zip" -DestinationPath "C:ToolsTCPView"
Alternatif olarak winget ile de yükleyebilirsiniz:
winget install Microsoft.Sysinternals.TCPView
Kurulum sonrası tcpview.exe dosyasını yönetici (Administrator) olarak çalıştırmanız önemli. Aksi halde bazı sistem process’lerinin PID bilgilerini ve detaylarını göremezsiniz. Sağ tıklayıp “Run as administrator” demeniz yeterli.
Eğer kurumsal ortamda çalışıyorsanız ve internete erişim kısıtlıysa, Sysinternals Suite’i bir kez indirip internal bir paylaşım klasörüne koyabilirsiniz. Bu şekilde tüm adminler oradan erişebilir.
Arayüzü Tanıyalım
TCPView açıldığında sizi sütunlardan oluşan bir liste karşılar. Bu sütunları anlamak, aracı etkin kullanmanın temelidir.
- Process: Bağlantıyı oluşturan sürecin adı ve PID numarası
- PID: Process ID, ileri analiz için kritik
- Protocol: TCP mi UDP mi olduğu
- Local Address: Yerel IP adresi ve port
- Remote Address: Bağlantının karşı tarafındaki IP ve port
- State: Bağlantının durumu (ESTABLISHED, LISTENING, TIME_WAIT, CLOSE_WAIT vs.)
- Sent Packets / Rcvd Packets: Gönderilen ve alınan paket sayısı
- Sent Bytes / Rcvd Bytes: Veri transfer miktarı
Renk kodlaması ise şöyle çalışır: Yeni oluşan bağlantılar yeşil renkte yanıp söner. Kapanan veya sonlandırılan bağlantılar kırmızı renkte görünür. Stabil durumdaki bağlantılar ise beyaz arka planla listelenir.
Komut Satırı Muadili: tcpvcon
TCPView’in komut satırı versiyonu olan tcpvcon.exe de aynı pakette gelir. Script’lere entegre etmek veya uzak bir sunucuda GUI olmadan analiz yapmak istediğinizde bu araç hayat kurtarır.
# Tüm TCP bağlantılarını listele
tcpvcon.exe -a
# Sadece ESTABLISHED bağlantıları göster
tcpvcon.exe -a | findstr "ESTABLISHED"
# Belirli bir process adına göre filtrele
tcpvcon.exe -a | findstr "chrome"
# Çıktıyı CSV formatında kaydet
tcpvcon.exe -a -c > C:Logsconnections.csv
Bu CSV çıktısını Excel’e aktararak analiz yapabilir ya da bir log yönetim sistemine besleyebilirsiniz. Özellikle olay müdahale (incident response) senaryolarında anlık bir snapshot almak için idealdir.
Gerçek Dünya Senaryosu 1: Şüpheli Outbound Bağlantı Tespiti
Şöyle bir durum düşünelim: Güvenlik ekibinden “bu sunucudan Rusya IP bloklarına giden trafik var” şeklinde bir alarm geldi. IDS sistemi alarm verdi ama hangi process olduğu belli değil.
TCPView’i açıp Remote Address sütununa tıklayarak sıralama yapın. Şüpheli IP aralığını hemen görebilirsiniz. Buradan ilgili satıra sağ tıklayıp “Process Properties” diyerek process hakkında detaylı bilgi alabilirsiniz.
Ardından bu process’i daha derinlemesine incelemek için şu PowerShell komutunu kullanabilirsiniz:
# Şüpheli PID'in detaylarını al
$pid = 4832
Get-Process -Id $pid | Select-Object Name, Path, StartTime, CPU, WorkingSet
# Process'in hangi DLL'leri yüklediğini gör
(Get-Process -Id $pid).Modules | Select-Object ModuleName, FileName | Sort-Object ModuleName
Eğer TCPView’de gördüğünüz process adı svchost.exe ise paniklemeden devam edin. Windows’ta pek çok servis svchost altında çalışır. Şu komutla hangi servisin bu PID’i kullandığını öğrenebilirsiniz:
# Belirli svchost PID'inin hangi servisi çalıştırdığını bul
tasklist /svc /fi "PID eq 4832"
# Alternatif PowerShell yöntemi
Get-WmiObject Win32_Service | Where-Object {$_.ProcessId -eq 4832} | Select-Object Name, DisplayName, State
Gerçek Dünya Senaryosu 2: Port Çakışması Sorununu Çözme
Bir uygulama deploy etmeye çalışıyorsunuz ama “Address already in use” veya “Port 8080 is already in use” hatası alıyorsunuz. TCPView’i açın, Local Address sütunundaki port numarasına bakın.
Komut satırından yapmak isterseniz:
# 8080 portunu hangi process kullanıyor?
netstat -ano | findstr ":8080"
# Çıkan PID ile process adını bul
tasklist /fi "PID eq 3456"
# Veya tek satırda PowerShell ile
Get-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
Ama TCPView’de bu işlem çok daha hızlı: Filtre kutusuna “8080” yazın, saniyeler içinde görürsünüz. Sağ tıklayıp “End Process” diyerek de direkt o process’i sonlandırabilirsiniz (tabii ne yaptığınızı biliyorsanız!).
Gerçek Dünya Senaryosu 3: Malware Analizi İçin TCPView Kullanımı
Bir iş istasyonunda şüpheli davranış var. Kullanıcı “bilgisayarım çok yavaş” diyor ama antivirüs temiz gösteriyor. Klasik bir senaryo.
TCPView’i açın ve şunlara dikkat edin:
- Tanımadığınız process adları ile ESTABLISHED bağlantılar
- Olağandışı portlar üzerinden iletişim kuran uygulamalar (örneğin notepad.exe’nin dışarıya bağlantı kurması)
- Sürekli değişen Remote Address‘ler (C2 sunucularıyla iletişim belirtisi olabilir)
- Yüksek byte/paket sayısı olan ama tanımadığınız process’ler
Şüpheli bir durumla karşılaşırsanız anlık snapshot almak için:
# Tüm bağlantıları timestampli olarak kaydet
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
tcpvcon.exe -a -c > "C:Forensicsconnections_$timestamp.csv"
# Aynı anda çalışan process listesini de al
Get-Process | Export-Csv -Path "C:Forensicsprocesses_$timestamp.csv" -NoTypeInformation
# Netstat çıktısını da yedekle
netstat -ano > "C:Forensicsnetstat_$timestamp.txt"
Bu üç dosyayı birlikte incelediğinizde çok daha kapsamlı bir tablo ortaya çıkar.
Bağlantı Durumlarını Anlamak
TCPView’in en önemli özelliklerinden biri bağlantı durumlarını göstermesi. Bu durumları anlamak, sorun tespitinde büyük fark yaratır.
- LISTENING: Uygulama gelen bağlantıları bekliyor, bu normal bir durum
- ESTABLISHED: Aktif bir bağlantı var, iki taraf haberleşiyor
- TIME_WAIT: Bağlantı kapandı ama OS henüz kaynakları serbest bırakmadı, genellikle 60-120 saniye sürer
- CLOSE_WAIT: Karşı taraf bağlantıyı kapattı ama uygulama henüz kapanmadı, uzun sürerse sorun var demektir
- SYN_SENT: Bağlantı kurulmaya çalışılıyor, kabul bekleniyor
- FIN_WAIT: Bağlantı kapatma süreci başladı
Özellikle CLOSE_WAIT durumundaki çok sayıda bağlantı görüyorsanız bu bir uygulama bug’ına işaret eder. Uygulama socket’leri düzgün kapatmıyor demektir. Bu bilgiyi geliştirici ekiple paylaşmak için kanıt olarak kullanabilirsiniz.
# CLOSE_WAIT durumundaki bağlantıları say
netstat -ano | findstr "CLOSE_WAIT" | Measure-Object -Line
# Hangi process'lerin CLOSE_WAIT bağlantısı var?
Get-NetTCPConnection -State CloseWait | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, OwningProcess |
ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
ProcessName = $proc.Name
PID = $_.OwningProcess
LocalPort = $_.LocalPort
RemoteAddress = $_.RemoteAddress
}
}
TCPView ile Güvenlik Denetimi Otomasyonu
Rutin güvenlik denetimleri için TCPView’i script’lerle birleştirmek çok işe yarıyor. Örneğin her gece çalışarak bağlantı durumunu kaydeden ve beklenmedik portları rapor eden bir script:
# Scheduled Task olarak çalıştırılabilecek monitoring scripti
$allowedPorts = @(80, 443, 3389, 445, 135, 53)
$logPath = "C:SecurityLogsPortMonitor"
if (-not (Test-Path $logPath)) {
New-Item -ItemType Directory -Path $logPath | Out-Null
}
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$connections = Get-NetTCPConnection -State Listen
$suspiciousPorts = $connections | Where-Object {
$_.LocalPort -notin $allowedPorts -and $_.LocalPort -gt 1024
}
if ($suspiciousPorts) {
$report = $suspiciousPorts | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
"Port: $($_.LocalPort) | Process: $($proc.Name) | PID: $($_.OwningProcess) | Path: $($proc.Path)"
}
$report | Out-File -FilePath "$logPathsuspicious_$timestamp.txt"
# Event Log'a yaz
Write-EventLog -LogName Application -Source "PortMonitor" -EventId 9001 `
-EntryType Warning -Message ($report -join "`n")
}
Bu script’i Windows Task Scheduler ile saatlik çalıştırarak otomatik bir izleme sistemi kurabilirsiniz.
Filtre ve Arama Özellikleri
TCPView 4.x sürümüyle birlikte gelişmiş filtreleme özellikleri eklendi. View menüsünden veya toolbar’daki filtre kutusundan arama yapabilirsiniz.
Pratik filtre kullanımları:
- Process adına göre filtrelemek için process adını yazın:
chrome - Belirli bir IP’yi aramak için:
192.168.1. - Port numarasına göre:
:443 - Sadece ESTABLISHED bağlantıları görmek için View menüsünden ayarlayabilirsiniz
Options menüsünde dikkat etmeniz gereken önemli bir ayar var: “Resolve Addresses” seçeneği. Bu seçenek açık olduğunda TCPView IP adreslerini hostname’e çevirmeye çalışır. Bu kullanışlı görünse de DNS sorguları nedeniyle performansı yavaşlatabilir ve hatta bazı durumlarda DNS önbelleğinizi etkileyebilir. Hızlı analiz için bu seçeneği kapalı tutmanızı öneririm, gerektiğinde açarsınız.
Uzak Sistemlerde Analiz
TCPView her ne kadar local sistem için tasarlanmış olsa da uzak sistemlerde analiz için birkaç yaklaşım mevcuttur.
PsExec ile uzak sistemde tcpvcon çalıştırma:
# Uzak sistemde tcpvcon çalıştır ve sonucu al
psexec.exe \RemotePC -c tcpvcon.exe -a -c > C:Remote_Connections.csv
# Powershell ile uzaktan bağlantı analizi
Invoke-Command -ComputerName "RemotePC" -ScriptBlock {
Get-NetTCPConnection | Where-Object State -eq "Established" |
Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort,
@{Name="ProcessName"; Expression={(Get-Process -Id $_.OwningProcess).Name}},
OwningProcess
} | Export-Csv -Path "C:LogsRemoteConnections.csv" -NoTypeInformation
Birden fazla sunucuyu aynı anda kontrol etmek için:
$servers = @("Server01", "Server02", "Server03")
$results = @()
foreach ($server in $servers) {
$connections = Invoke-Command -ComputerName $server -ScriptBlock {
Get-NetTCPConnection -State Established | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
Server = $env:COMPUTERNAME
ProcessName = $proc.Name
LocalPort = $_.LocalPort
RemoteAddress = $_.RemoteAddress
RemotePort = $_.RemotePort
}
}
}
$results += $connections
}
$results | Export-Csv -Path "C:LogsAllServers_Connections.csv" -NoTypeInformation
Sık Yapılan Hatalar ve İpuçları
Yıllar içinde TCPView kullanırken öğrendiğim bazı önemli noktalara değineyim.
Administrator yetkisi şart: Yönetici olarak çalıştırmadığınızda bazı sistem process’lerinin PID’ini “0” veya bilinmeyen olarak görebilirsiniz. Bu yanıltıcı olabilir.
Yenileme hızını ayarlayın: Options menüsünden refresh rate’i değiştirebilirsiniz. Varsayılan genellikle 1 saniyedir. Çok aktif sistemlerde bu değeri 2-3 saniyeye çıkarmak arayüzün daha stabil görünmesini sağlar.
Bağlantıları loglayın: Options altında “Log Changes” özelliğini etkinleştirirseniz TCPView tüm bağlantı değişikliklerini bir dosyaya yazar. Şüpheli bir sistem üzerinde bunu açık bırakmak değerli kanıt toplamanızı sağlar.
Process Properties kullanın: Bir satıra çift tıkladığınızda veya sağ tıklayıp “Process Properties” dediğinizde o process hakkında çok detaylı bilgi alırsınız. Image path, komut satırı argümanları ve diğer detaylar burada görünür.
Whois entegrasyonu: Şüpheli bir Remote Address’e sağ tıklayıp “Whois” seçeneğiyle direkt whois sorgusu yapabilirsiniz. Bu özellik IP’nin hangi ülkede ve hangi organizasyona ait olduğunu hızlıca gösterir.
Benzer Araçlarla Karşılaştırma
TCPView harika bir araç ama tek seçenek değil. Diğer alternatifler şunlar:
- CurrPorts (NirSoft): Benzer işlevi görür, ek olarak HTTP başlıklarını da gösterebilir
- Wireshark: Çok daha derin paket analizi için, ama TCPView’den çok daha karmaşık
- Process Monitor (Procmon): Ağ bağlantılarının yanı sıra dosya ve registry işlemlerini de izler, tam forensic analiz için
- netstat -b: Yerleşik Windows aracı, process adlarını gösterir ama yavaş ve kullanımı zor
- Get-NetTCPConnection: PowerShell native çözüm, script entegrasyonu için ideal
TCPView’in bu alternatiflere göre avantajı gerçek zamanlı görsel geri bildirim ve kullanım kolaylığıdır. Özellikle stres altında hızlı analiz yapmanız gerektiğinde değerini kanıtlar.
Sonuç
TCPView, her Windows sysadmin’in araç kutusunda bulunması gereken küçük ama güçlü bir yazılım. Kurulum gerektirmemesi, tamamen ücretsiz olması ve Sysinternals’ın güvenilir kalitesiyle gelmesi onu vazgeçilmez kılıyor.
Günlük kullanımda bağlantı sorunlarını teşhis etmek, port çakışmalarını çözmek ve şüpheli ağ aktivitelerini tespit etmek için ideal. Ancak bunu PowerShell’in Get-NetTCPConnection cmdlet’iyle ve gerektiğinde Wireshark gibi derin analiz araçlarıyla birlikte kullanmak en sağlıklı yaklaşım.
Güvenlik açısından değerlendirecek olursak, TCPView reaktif bir araçtır. Bir şeyler olduğunda analiz etmenizi sağlar. Proaktif güvenlik için bu araçtan alınan verileri SIEM sistemlerine beslemek, baseline oluşturmak ve anomali tespiti yapmak gerekir. Ama bu kadar pratik ve kullanışlı bir araçla başlamak, ağ güvenliği yolculuğunuzu doğru temeller üzerine oturtmanızı sağlar.
Son olarak şunu söyleyeyim: En iyi araç, kullanmayı bildiğiniz araçtır. TCPView’i bugün indirin, kendi makinenizde çalıştırın ve hangi process’lerin hangi bağlantıları açtığına bakın. Çoğu zaman gördükleriniz sizi şaşırtacak.
