কম্পিউটার টিউটোরিয়াল

PowerShell দিয়ে উইন্ডোজে এক্টিভ TCP/IP কানেকশন চেক করা

অনেক অ্যাডমিনিস্ট্রেটর সাধারণত netstat কনসোল টুল বা গ্রাফিক্যাল TCPView ব্যবহার করে উইন্ডোজে এক্টিভ TCP/IP কানেকশন ও ওপেন TCP পোর্টের তথ্য দেখান। netstat-এর পরিবর্তে PowerShell-এ Get-NetTCPConnection কমান্ডলেট ব্যবহার করে উইন্ডোজে এক্টিভ নেটওয়ার্ক কানেকশন, ওপেন TCP পোর্ট, এবং TCP/IP প্রোটোকল ব্যবহার করা চলমান প্রসেসের তথ্য পাওয়া যায়। PowerShell জটিল স্ক্রিপ্ট লিখে ওপেন TCP পোর্ট, প্রসেস, এবং প্রতিষ্ঠিত নেটওয়ার্ক কানেকশন মনিটর করা সহজ করে দেয়।

Get-NetTCPConnection কমান্ড কোনো অপশন ছাড়া চালানোর চেষ্টা করুন।

netstat-এর মতো, কমান্ডটি লোকাল ও রিমোট IP অ্যাড্রেস, পোর্ট, কানেকশন স্টেট (Listen, Established Internet, TimeWait, Bound, CloseWait, SynReceived, SynSent), এবং এই TCP কানেকশন ব্যবহার করা প্রসেস আইডি (PID) সহ সকল এক্টিভ কানেকশনের তালিকা দেখিয়েছে।

আপনার লোকাল কম্পিউটারের ওপেন (লিসেনিং) পোর্টের তালিকা দেখান:

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

এই পাওয়ারশেল স্ক্রিপ্ট সকল হোস্ট IP অ্যাড্রেস DNS নেমে রেজলভ করে এবং সকল কানেকশনের জন্য প্রসেস নাম স্পেসিফাই করে।

প্যারেন্ট প্রসেস PID-র নাম দিয়ে, নেটওয়ার্ক ব্যবহার করে সম্পর্কিত উইন্ডোজ সার্ভিসের তালিকা দেখান:

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

নির্দিষ্ট প্রসেস দ্বারা শুরু করা নেটওয়ার্ক কানেকশন মাত্র দেখাতে পারেন। এর জন্য নিচের পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করুন:

$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 কমান্ডলেট বিভিন্ন সিনেরিওতে ব্যবহার করা যায়। উদাহরণস্বরূপ, নির্দিষ্ট IP অ্যাড্রেস থেকে নির্দিষ্ট লোকাল পোর্টে কানেকশন 설립 হলে অ্যাডমিনিস্ট্রেটরকে পপ-আপ নোটিফিকেশন দেখাতে একটি সহজ পাওয়ারশেল স্ক্রিপ্ট তৈরি করা যায়।

নিচের উদাহরণে, একটি পাওয়ারশেল স্ক্রিপ্ট চেক করে নির্দিষ্ট IP অ্যাড্রেস থেকে ডিফল্ট RDP পোর্ট 3389-এ কানেকশন করলে পপ-আপ নোটিফিকেশন দেখাবে এবং কানেকশনের তারিখ ও সময় টেক্সট ফাইলে লগ করবে:

$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 ইত্যাদি যেকোনো প্রোটোকলের ওপর নেটওয়ার্ক কানেকশন মনিটর ও লগ করতে পারেন। এই পাওয়ারশেল স্ক্রিপ্টটি একটি উইন্ডোজ সার্ভিসে কনভার্ট করা যায় যা অটোমেটিক্যালি শুরু হবে।

আপনি এই স্ক্রিপ্টটি আগে আলোচনা করা সкриপ্টের সাথে ব্যবহার করতে পারেন: RDP Brute Force Attack Protection with Powershell।

PowerShell রিমোটিং কমান্ডলেট (Enter-PSSession এবং Invoke-Command) ব্যবহার করে রিমোট কম্পিউটারের ওপেন TCP পোর্ট ও কানেকশনের তালিকা পাওয়া যায়।

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

Get-NetTCPConnection কমান্ডলেট (সহ Test-NetConnection) উইন্ডোজে নেটওয়ার্ক কানেকশন ট্র্যাক ও ডায়গনোজ করার জন্য খুব উপকারী হতে পারে।

  1. পাওয়ারশেল ব্যবহার করে VMWare-এ উইন্ডোজ VM টেমপ্লেট আপডেট করা

  2. PowerShell দিয়ে উইন্ডোজ প্রসেস ম্যানেজমেন্ট

  3. পাওয়ারশেল বা Wevtutil ব্যবহার করে উইন্ডোজ ইভেন্ট লগ ক্লিয়ার করার পদ্ধতি

  4. Windows PowerShell স্ক্রিপ্ট দিয়ে প্রোডাক্টিভিটি বাড়ান