Kiểm tra kết nối TCP / IP đang hoạt động trên Windows với PowerShell

0
77

Nhiều quản trị viên thường sử dụng công cụ bảng điều khiển netstat TCPView đồ họa để hiển thị thông tin về các kết nối TCP / IP đang hoạt động và mở các cổng TCP trong Windows. Thay vì netstat, bạn có thể sử dụng Get-NetTCPConnection trong PowerShell để nhận thông tin về các kết nối mạng đang hoạt động trong Windows, mở các cổng TCP và chạy các quy trình đang sử dụng giao thức TCP / IP. PowerShell giúp bạn dễ dàng viết các tập lệnh phức tạp để lấy thông tin và giám sát các cổng TCP đang mở, các quy trình và các kết nối mạng đã thiết lập.

Cố gắng chạy lệnh Get-NetTCPConnection mà không có bất kỳ tùy chọn nào.

Get-NetTCPConnection cmdlet: list current TCP connections

Giống như netstat, lệnh đã hiển thị danh sách tất cả các kết nối đang hoạt động với địa chỉ IP cục bộ và từ xa, các cổng, trạng thái kết nối ( Listen , Internet được thành lập , TimeWait , Bound , CloseWait , SynReceive , SynSent ) và ID quá trình (PID) đang sử dụng kết nối TCP này.

Bạn có thể hiển thị danh sách các cổng đang mở (đang nghe) trên máy tính cục bộ của mình:

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

Find Listening Ports on Windows with PowerShell

Get-NetUDPEndpoint được sử dụng để lấy thông tin về các cổng UDP.

Bạn chỉ có thể hiển thị các kết nối bên ngoài (Internet):

Get-NetTCPConnection -AppliedSetting Internet

Bạn có thể hiển thị tên DNS của máy chủ từ xa và tên quá trình cho các kết nối TCP:

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

Tập lệnh PowerShell này đã giải quyết tất cả địa chỉ IP máy chủ thành tên DNS và tên quy trình được chỉ định cho tất cả các kết nối.

Show network connections (remote IP addresses, ports) of Windows process with PowerShell

Theo tên của PID tiến trình mẹ, bạn có thể hiển thị danh sách các dịch vụ Windows có liên quan đang sử dụng mạng:

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

Bạn chỉ có thể xem các kết nối mạng được khởi tạo bởi quá trình cụ thể. Để làm điều đó, bạn có thể sử dụng tập lệnh PowerShell sau:

$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
}
}

Bạn có thể sử dụng lệnh ghép ngắn Get-NetTCPConnection trong nhiều tình huống khác nhau. Ví dụ: bạn có thể tạo một tập lệnh PowerShell đơn giản để theo dõi xem kết nối có được thiết lập từ địa chỉ IP cụ thể đến cổng cục bộ được chỉ định hay không và hiển thị thông báo bật lên cho quản trị viên.

Trong ví dụ sau, tập lệnh PowerShell kiểm tra xem kết nối từ địa chỉ IP được chỉ định có xuất hiện trên cổng RDP mặc định 3389 hay không. Nếu kết nối xuất hiện, tập lệnh sẽ hiển thị thông báo bật lên và ghi lại ngày và giờ kết nối vào một tệp văn bản:

$SourceIP = “192.168.13.125”
$TargetPort =”3389”
$log = "C:PSrdp_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
}
}

Powershell script: show popup message after remote connection to your computer is established

Theo cách tương tự, bạn có thể giám sát và ghi nhật ký các kết nối mạng qua bất kỳ giao thức nào khác, như SSH, SMB, FTP, SMTP, v.v. Tập lệnh PowerShell này có thể được chuyển đổi thành một dịch vụ Windows sẽ tự động khởi động.

Bạn có thể sử dụng script cùng với script mà chúng ta đã thảo luận trước đó: RDP Brute Force Attack Protection with Powershell.

Bạn có thể nhận danh sách các cổng và kết nối TCP đang mở trên các máy tính từ xa bằng cách sử dụng lệnh ghép ngắn xóa PowerShell (Enter-PSSession và Invoke-Command).

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

Lệnh ghép ngắn Get-NetTCPConnection (cũng như Test-NetConnection) có thể rất hữu ích để theo dõi và chẩn đoán các kết nối mạng trong Windows.

Dịch từ: http://woshub.com/get-nettcpconnection-windows-powershell/

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây