Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

PowerShellを使用したWindowsでのアクティブなTCP/IP接続の確認

多くの管理者は通常、netstatを使用します コンソールツールまたはグラフィックTCPView アクティブなTCP/IP接続に関する情報を表示し、WindowsでTCPポートを開きます。 netstatの代わりに、Get-NetTCPConnectionを使用できます。 PowerShellのコマンドレットを使用して、Windowsでアクティブなネットワーク接続に関する情報を取得し、TCPポートを開き、TCP/IPプロトコルを使用しているプロセスを実行します。 PowerShellを使用すると、複雑なスクリプトを簡単に記述して、情報を取得し、開いているTCPポート、プロセス、および確立されたネットワーク接続を監視できます。

Get-NetTCPConnectionを実行してみてください オプションなしのコマンド。

PowerShellを使用したWindowsでのアクティブなTCP/IP接続の確認

netstatと同様に、このコマンドは、ローカルおよびリモートのIPアドレス、ポート、接続状態( Listen )を持つすべてのアクティブな接続のリストを表示します。 、確立されたインターネット TimeWait バウンド CloseWait 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 コマンドレットは、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コマンドレットは、さまざまなシナリオで使用できます。たとえば、特定の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リモートコマンドレット(Enter-PSSessionおよびInvoke-Command)を使用して、リモートコンピューターで開いているTCPポートと接続のリストを取得できます。

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

Get-NetTCPConnectionコマンドレット(およびTest-NetConnection)は、Windowsのネットワーク接続を追跡および診断するのに非常に役立つ場合があります。


  1. PowerShellまたはWevtutilを使用してWindowsイベントログをクリアする方法

    場合によっては、コンピューターまたはサーバー上のWindowsイベントログからすべてのエントリを削除する必要があります。もちろん、イベントビューアのコンソールGUIからシステムログをクリアすることもできます— Eventvwr.msc (クリアするログを右クリックして、ログのクリアを選択します。 )。ただし、Vista以降、Windowsはさまざまなシステムコンポーネントに数十のログを使用しており、イベントビューアでそれらすべてを手動でクリアするには時間がかかります。コマンドプロンプトからログをクリアする方がはるかに簡単です: PowerShellを使用する または組み込みのコンソールツー

  2. WindowsPowerShellスクリプトで生産性を向上させる

    Linuxの生産性をWindowsに持ち込むことができたらどうでしょうか。 WindowsとLinuxの主な違いの1つは、ほとんどのLinuxディストリビューションに強力なBashシェルがパッケージ化されていることです。比較すると、Windowsのコマンドプロンプトは必要最低限​​のものです。 Windowsに同様に強力な端末がある場合はどうなりますか? PowerShellを使用すると、その夢が現実になる可能性があります。 免責事項:PowerShellは「Bashfor Windows」ではなく、またそうなることを意図したものでもありません。はい、どちらも生産性を大幅に向上させることが