当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 检查 Windows 上的活动 TCP/IP 连接

作者:精品下载站 日期:2024-12-14 23:05:42 浏览:14 分类:玩电脑

使用 PowerShell 检查 Windows 上的活动 TCP/IP 连接


许多管理员通常使用

netstat

控制台工具或图形

TCPView

显示有关 Windows 中活动 TCP/IP 连接和打开的 TCP 端口的信息。您可以使用以下命令代替 netstat

Get-NetTCPConnection

PowerShell 中的 cmdlet 可获取有关 Windows 中的活动网络连接、打开的 TCP 端口以及正在运行的使用 TCP/IP 协议的进程的信息。 PowerShell 可以轻松编写复杂的脚本来获取信息并监视开放的 TCP 端口、进程和已建立的网络连接。

尝试运行

Get-NetTCPConnection

没有任何选项的命令。

[玩转系统] 使用 PowerShell 检查 Windows 上的活动 TCP/IP 连接

与 netstat 一样,该命令显示了所有活动连接的列表,其中包含本地和远程 IP 地址、端口、连接状态(ListenEstablished InternetTimeWaitBoundCloseWaitSynReceivedSynSent)以及正在使用此 TCP 连接的进程 ID (PID)。

您可以显示本地计算机上打开(侦听)端口的列表:

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

[玩转系统] 使用 PowerShell 检查 Windows 上的活动 TCP/IP 连接

Get-NetUDPEndpoint

cmdlet 用于获取有关 UDP 端口的信息。

您只能显示外部(Internet)连接:

Get-NetTCPConnection -AppliedSetting Internet

您可以显示远程主机的 DNS 名称和 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

此 PowerShell 脚本将所有主机 IP 地址解析为所有连接的 DNS 名称和指定进程名称。

[玩转系统] 使用 PowerShell 检查 Windows 上的活动 TCP/IP 连接

通过父进程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 cmdlet。例如,您可以创建一个简单的 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
}
}

[玩转系统] 使用 PowerShell 检查 Windows 上的活动 TCP/IP 连接

以同样的方式,您可以通过任何其他协议(例如 SSH、SMB、FTP、SMTP 等)监视和记录网络连接。此 PowerShell 脚本可能会转换为自动启动的 Windows 服务。

您可以将该脚本与我们之前讨论的脚本一起使用:RDP Brute Force Attack Protection with Powershell。

您可以使用 PowerShell 远程处理 cmdlet(Enter-PSSession 和 Invoke-Command)获取远程计算机上打开的 TCP 端口和连接的列表。

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

Get-NetTCPConnection cmdlet(以及 Test-NetConnection)对于跟踪和诊断 Windows 中的网络连接可能非常有用。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯