Computer >> 컴퓨터 >  >> 체계 >> Windows Server

PowerShell을 사용하여 Windows에서 활성 TCP/IP 연결 확인

많은 관리자는 일반적으로 netstat를 사용합니다. 콘솔 도구 또는 그래픽 TCPView 활성 TCP/IP 연결에 대한 정보를 표시하고 Windows에서 TCP 포트를 엽니다. netstat 대신 Get-NetTCPConnection을 사용할 수 있습니다. PowerShell의 cmdlet을 사용하여 Windows의 활성 네트워크 연결, TCP 포트 열기 및 TCP/IP 프로토콜을 사용하는 실행 중인 프로세스에 대한 정보를 얻습니다. PowerShell을 사용하면 정보를 얻고 열린 TCP 포트, 프로세스 및 설정된 네트워크 연결을 모니터링하는 복잡한 스크립트를 쉽게 작성할 수 있습니다.

Get-NetTCPConnection을 실행해 보십시오. 옵션이 없는 명령입니다.

PowerShell을 사용하여 Windows에서 활성 TCP/IP 연결 확인

netstat와 마찬가지로 이 명령은 로컬 및 원격 IP 주소, 포트, 연결 상태(듣기 , 인터넷 구축 , 대기 시간 , 바운드 , 닫기 대기 , SynReceived , SynSent ) 및 이 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 포트에 대한 정보를 가져오는 데 사용됩니다.

외부(인터넷) 연결만 표시할 수 있습니다.

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을 사용할 수 있습니다. 예를 들어, 특정 IP 주소에서 지정된 로컬 포트로 연결이 설정되었는지 추적하는 간단한 PowerShell 스크립트를 만들고 관리자에게 팝업 알림을 표시할 수 있습니다.

다음 예에서 PowerShell 스크립트는 지정된 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
}
}

PowerShell을 사용하여 Windows에서 활성 TCP/IP 연결 확인

같은 방식으로 SSH, SMB, FTP, SMTP 등과 같은 다른 프로토콜을 통해 네트워크 연결을 모니터링하고 기록할 수 있습니다. 이 PowerShell 스크립트는 자동으로 시작되는 Windows 서비스로 변환될 수 있습니다.

앞에서 논의한 것과 함께 스크립트를 사용할 수 있습니다:Powershell을 사용한 RDP 무차별 대입 공격 보호.

PowerShell 원격 cmdlet(Enter-PSSession 및 Invoke-Command)을 사용하여 원격 컴퓨터에서 열린 TCP 포트 및 연결 목록을 가져올 수 있습니다.

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

Get-NetTCPConnection cmdlet(Test-NetConnection 포함)은 Windows에서 네트워크 연결을 추적하고 진단하는 데 매우 유용할 수 있습니다.