PowerShell ile Windows'ta Aktif TCP/IP Bağlantılarını Kontrol Etme


Birçok yönetici genellikle

netstat

konsol aracı veya grafik

TCPView

etkin TCP/IP bağlantıları ve Windows'ta açık TCP bağlantı noktaları hakkında bilgi görüntülemek için. netstat yerine şunu kullanabilirsiniz:

Get-NetTCPConnection

Windows'taki etkin ağ bağlantıları, açık TCP bağlantı noktaları ve TCP/IP protokolünü kullanan çalışan işlemler hakkında bilgi almak için PowerShell'deki cmdlet. PowerShell, bilgi almak ve açık TCP bağlantı noktalarını, işlemleri ve kurulan ağ bağlantılarını izlemek için karmaşık komut dosyaları yazmayı kolaylaştırır.

çalıştırmayı deneyin

Get-NetTCPConnection

herhangi bir seçenek olmadan komut.

Netstat gibi, komut da yerel ve uzak IP adresleri, bağlantı noktaları, bağlantı durumu (Dinle, Kuru İnternet, Bekleme Süresi ile tüm etkin bağlantıların listesini görüntüledi., Bound, CloseWait, SynRequired, SynSent) ve bunu kullanan işlem kimliği (PID) TCP bağlantısı.

Yerel bilgisayarınızda açık (dinlenen) bağlantı noktalarının bir listesini görüntüleyebilirsiniz:

Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, RemoteAddress, RemotePort, State | Sort-Object LocalPort |ft

Bu

Get-NetUDPEndpoint

cmdlet, UDP bağlantı noktaları hakkında bilgi almak için kullanılır.

Yalnızca harici (İnternet) bağlantıları görüntüleyebilirsiniz:

Get-NetTCPConnection -AppliedSetting Internet

Uzak ana bilgisayarların DNS adlarını ve TCP bağlantıları için işlem adlarını görüntüleyebilirsiniz:

Get-NetTCPConnection -State Established |Select-Object -Property LocalAddress, LocalPort,@{name='RemoteHostName';expression={(Resolve-DnsName $_.RemoteAddress).NameHost}},RemoteAddress, RemotePort, State,@{name='ProcessName';expression={(Get-Process -Id $_.OwningProcess). Path}},OffloadState,CreationTime |ft

Bu PowerShell betiği, tüm ana bilgisayar IP adreslerini DNS adlarına ve tüm bağlantılar için belirtilen işlem adlarına çözümledi.

Üst işlem PID'sinin adıyla, ağı kullanan ilgili Windows hizmetlerinin listesini görüntüleyebilirsiniz:

Get-WmiObject Win32_Service | Where-Object -Property ProcessId -In (Get-NetTCPConnection).OwningProcess | Where-Object -Property State -eq Running | Format-Table ProcessId, Name, Caption, StartMode, State, Status, PathName

Yalnızca belirli işlem tarafından başlatılan ağ bağlantılarını görüntüleyebilirsiniz. Bunu yapmak için aşağıdaki PowerShell betiğini kullanabilirsiniz:

$TrackProcessName = "*chrome*"
$EstablishedConnections = Get-NetTCPConnection -State Established |Select-Object -Property LocalAddress, LocalPort,@{name='RemoteHostName';expression={(Resolve-DnsName $_.RemoteAddress).NameHost}},RemoteAddress, RemotePort, State,@{name='ProcessName';expression={(Get-Process -Id $_.OwningProcess). Path}}, OffloadState,CreationTime
Foreach ($Connection in $EstablishedConnections)
{
If ($Connection.ProcessName -like $TrackProcessName)
{
$Connection|ft
}
}

Get-NetTCPConnection cmdlet'ini çeşitli senaryolarda kullanabilirsiniz. Örneğin, belirli bir IP adresinden belirtilen yerel bağlantı noktasına bağlantı kurulup kurulmadığını izlemek ve yöneticiye açılır bir bildirim görüntülemek için basit bir PowerShell betiği oluşturabilirsiniz.

Aşağıdaki örnekte, bir PowerShell betiği, belirtilen IP adresinden bir bağlantının varsayılan RDP bağlantı noktası 3389'da görünüp görünmediğini kontrol eder. Bağlantı görünürse, komut dosyası bir açılır bildirim görüntüler ve bağlantının tarih ve saatini günlüğe kaydeder. Metin dosyası:

$SourceIP = “192.168.13.125”
$TargetPort =”3389”
$log = "C:\PS\rdp_connection_log.txt"
$EstablishedConnections = Get-NetTCPConnection -State Established
Foreach ($Connection in $EstablishedConnections)
{
If (($Connection.RemoteAddress -eq $SourceIP) -and ($Connection.LocalPort -eq $TargetPort))
{
Add-Type -AssemblyName System.Windows.Forms
$global:balmsg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balmsg.BalloonTipText = "New RDP connection to your computer from $($Connection.RemoteAddress)"
$balmsg.BalloonTipTitle = "New RDP connection from ($Connection.RemoteAddress)"
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(10000)
(Get-Date).ToString() + ' ' + $Connection.RemoteAddress + ' an RDP connection is established ' >> $log
}
}

Aynı şekilde, SSH, SMB, FTP, SMTP vb. diğer protokoller üzerinden ağ bağlantılarını izleyebilir ve günlüğe kaydedebilirsiniz. Bu PowerShell betiği, otomatik olarak başlayacak bir Windows hizmetine dönüştürülebilir.

Komut dosyasını daha önce tartıştığımızla birlikte kullanabilirsiniz: Powershell ile RDP Kaba Kuvvet Saldırı Koruması.

PowerShell uzaktan iletişim cmdlet'lerini (Enter-PSSession ve Invoke-Command) kullanarak uzak bilgisayarlardaki açık TCP bağlantı noktalarının ve bağlantılarının bir listesini alabilirsiniz.

Invoke-Command -ComputerName be-dc01 {Get-NetTCPConnection -State Established}

Get-NetTCPConnection cmdlet'i (ayrıca Test-NetConnection), Windows'ta ağ bağlantılarını izlemek ve tanılamak için çok yararlı olabilir.

İlgili makaleler