कई एडमिनिस्ट्रेटर आमतौर पर Windows में सक्रिय TCP/IP कनेक्शन और खुले TCP पोर्ट के बारे में जानकारी प्रदर्शित करने के लिए netstat कंसोल टूल या ग्राफिकल TCPView का उपयोग करते हैं। netstat के बजाय, आप PowerShell में Get-NetTCPConnection कमांडलेट का उपयोग करके Windows में सक्रिय नेटवर्क कनेक्शन, खुले TCP पोर्ट, और TCP/IP प्रोटोकॉल का उपयोग करने वाले चल रहे प्रोसेस के बारे में जानकारी प्राप्त कर सकते हैं। PowerShell खुले TCP पोर्ट, प्रोसेस, और स्थापित नेटवर्क कनेक्शन की जानकारी प्राप्त करने और मॉनिटर करने के लिए जटिल स्क्रिप्ट लिखना आसान बनाता है।
Get-NetTCPConnection कमांड को बिना किसी ऑप्शन के चलाने का प्रयास करें।
netstat की तरह, कमांड ने लोकल और रिमोट IP एड्रेस, पोर्ट, कनेक्शन स्टेट (Listen, Established Internet, TimeWait, Bound, CloseWait, SynReceived, SynSent), और प्रोसेस ID (PID) की सूची प्रदर्शित की है जो इस TCP कनेक्शन का उपयोग कर रहा है।
आप अपने लोकल कंप्यूटर पर खुले (सुनने वाले) पोर्ट की सूची प्रदर्शित कर सकते हैं:
Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, RemoteAddress, RemotePort, State | Sort-Object LocalPort | ft
Get-NetUDPEndpoint कमांडलेट का उपयोग UDP पोर्ट के बारे में जानकारी प्राप्त करने के लिए किया जाता है।
आप केवल बाहरी (इंटरनेट) कनेक्शन प्रदर्शित कर सकते हैं:
Get-NetTCPConnection -AppliedSetting Internet
आप TCP कनेक्शन के लिए रिमोट होस्ट के DNS नाम और प्रोसेस नाम प्रदर्शित कर सकते हैं:
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
यह PowerShell स्क्रिप्ट सभी होस्ट IP एड्रेस को DNS नामों में रिजॉल्व करती है और सभी कनेक्शन के लिए प्रोसेस नाम स्पेसिफाई करती है।
पैरेंट प्रोसेस PID के नाम से, आप उन Windows सेवाओं की सूची प्रदर्शित कर सकते हैं जो नेटवर्क का उपयोग कर रही हैं:
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
आप केवल विशिष्ट प्रोसेस द्वारा शुरू किए गए नेटवर्क कनेक्शन देख सकते हैं। ऐसा करने के लिए, आप निम्न PowerShell स्क्रिप्ट का उपयोग कर सकते हैं:
$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 कमांडलेट का उपयोग विभिन्न परिदृश्यों में कर सकते हैं। उदाहरण के लिए, आप एक साधारण PowerShell स्क्रिप्ट बना सकते हैं जो ट्रैक करती है कि क्या निर्दिष्ट लोकल पोर्ट पर विशिष्ट IP एड्रेस से कनेक्शन स्थापित हुआ है और एडमिनिस्ट्रेटर को पॉप-अप नोटिफिकेशन प्रदर्शित करती है।
निम्न उदाहरण में, एक PowerShell स्क्रिप्ट चेक करती है कि क्या डिफ़ॉल्ट RDP पोर्ट 3389 पर निर्दिष्ट IP एड्रेस से कनेक्शन दिखाई देता है। यदि कनेक्शन दिखाई देता है, तो स्क्रिप्ट पॉप-अप नोटिफिकेशन प्रदर्शित करेगी और कनेक्शन की तारीख और समय को टेक्स्ट फाइल में लॉग करेगी:
$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
}
}
इसी तरह, आप SSH, SMB, FTP, SMTP आदि जैसे किसी अन्य प्रोटोकॉल पर नेटवर्क कनेक्शन को मॉनिटर और लॉग कर सकते हैं। इस PowerShell स्क्रिप्ट को Windows सर्विस में बदला जा सकता है जो ऑटोमैटिकली शुरू होगी।
आप इस स्क्रिप्ट का उपयोग उस स्क्रिप्ट के साथ कर सकते हैं जिस पर हमने पहले चर्चा की थी: PowerShell के साथ RDP ब्रूट फोर्स अटैक सुरक्षा।
आप PowerShell रिमोटिंग कमांडलेट (Enter-PSSession और Invoke-Command) का उपयोग करके रिमोट कंप्यूटर पर खुले TCP पोर्ट और कनेक्शन की सूची प्राप्त कर सकते हैं।
Invoke-Command -ComputerName be-dc01 {Get-NetTCPConnection -State Established}
Get-NetTCPConnection कमांडलेट (साथ ही Test-NetConnection) Windows में नेटवर्क कनेक्शन को ट्रैक और डायग्नोज करने के लिए बहुत उपयोगी हो सकता है।