PowerShellを使用したWindowsでのアクティブなTCP/IP接続の確認
多くの管理者は通常、netstat
を使用します コンソールツールまたはグラフィックTCPView
アクティブなTCP/IP接続に関する情報を表示し、WindowsでTCPポートを開きます。 netstatの代わりに、Get-NetTCPConnection
を使用できます。 PowerShellのコマンドレットを使用して、Windowsでアクティブなネットワーク接続に関する情報を取得し、TCPポートを開き、TCP/IPプロトコルを使用しているプロセスを実行します。 PowerShellを使用すると、複雑なスクリプトを簡単に記述して、情報を取得し、開いているTCPポート、プロセス、および確立されたネットワーク接続を監視できます。
Get-NetTCPConnection
を実行してみてください オプションなしのコマンド。
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
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名に解決し、すべての接続にプロセス名を指定しました。
親プロセス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
}
}
同様に、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のネットワーク接続を追跡および診断するのに非常に役立つ場合があります。
-
PowerShellまたはWevtutilを使用してWindowsイベントログをクリアする方法
場合によっては、コンピューターまたはサーバー上のWindowsイベントログからすべてのエントリを削除する必要があります。もちろん、イベントビューアのコンソールGUIからシステムログをクリアすることもできます— Eventvwr.msc (クリアするログを右クリックして、ログのクリアを選択します。 )。ただし、Vista以降、Windowsはさまざまなシステムコンポーネントに数十のログを使用しており、イベントビューアでそれらすべてを手動でクリアするには時間がかかります。コマンドプロンプトからログをクリアする方がはるかに簡単です: PowerShellを使用する または組み込みのコンソールツー
-
WindowsPowerShellスクリプトで生産性を向上させる
Linuxの生産性をWindowsに持ち込むことができたらどうでしょうか。 WindowsとLinuxの主な違いの1つは、ほとんどのLinuxディストリビューションに強力なBashシェルがパッケージ化されていることです。比較すると、Windowsのコマンドプロンプトは必要最低限のものです。 Windowsに同様に強力な端末がある場合はどうなりますか? PowerShellを使用すると、その夢が現実になる可能性があります。 免責事項:PowerShellは「Bashfor Windows」ではなく、またそうなることを意図したものでもありません。はい、どちらも生産性を大幅に向上させることが