PowerShell を使用して開いている (リスニング) ポートを確認する

PowerShell では、テストネット接続コマンドレットを使用して、リモート コンピューター上でポートが使用可能 (開いている) かどうかを確認します。このコマンドレットを使用すると、リモート サーバーまたはネットワーク サービスの応答と可用性を確認したり、TCP ポートがファイアウォールによってブロックされているかどうかをテストしたり、ICMP の可用性とルーティングを確認したりできます。実際には、Test-NetConnectionなどのいくつかの一般的なネットワーク管理ツールを置き換えます。ping,tracert,telnet,pathping、TCP ポート スキャナーなど。

コンテンツ:

Test-NetConnection で開いている TCP ポートを確認する

Test-NetConnection コマンドレットを使用して、TCP ポートのみを確認できます。たとえば、リモート メール サーバーで TCP ポート 25 (SMTP プロトコル) が開いているかどうかを確認するには、次のようにします。

Test-NetConnection -ComputerName ny-msg01 -Port 25

注記。 Test-NetConnection コマンドレットを使用してテストできるのは、TCP ポート接続のみです。ただし、コマンドレットを使用してリモート UDP ポートの可用性を確認することはできません。

Test-NetConnection コマンドには次のエイリアスがあります。TNC。同じコマンドの短縮版は次のようになります。

TNC ny-msg01 -Port 25

コマンドの結果を見てみましょう。

ComputerName           : ny-msg01
RemoteAddress          : 10.20.1.7
RemotePort             : 25
InterfaceAlias         : CORP
SourceAddress          : 10.20.1.79
PingSucceeded          : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded       : True

ご覧のとおり、コマンドレットはサーバー名を IP アドレスに解決し、ICMP 応答をチェックします (次のようなもの)。ping)、TCP ポートからの応答 (ポートの可用性) を確認します。指定されたサーバーは ICMP 経由で応答します (PingSucceeded = True)、TCP ポート 25 が開いています (RemotePort=25, TcpTestSucceeded= True).

注記。コマンドが PingSucceeded=False および TcpTestSucceeded=True を返した場合、これはおそらく ICMP エコー要求 (ping) がリモート コンピューターで無効になっていることを意味します。

を実行すると、パラメーターなしの Test-NetConnection、コンピュータがインターネットに接続されているかどうかを確認します (インターネットが利用可能かどうかを確認します)。internetbeacon.msedge.netホスト)。

–を追加できます情報レベルの詳細リモート TCP ポートをチェックするときに詳細情報を表示するオプション:

TNC 192.168.32.101 -Port 3389 -InformationLevel Detailed

コマンドレットには特別なパラメータがあります。共通TCPポートを使用すると、既知のネットワーク プロトコル (HTTP、RDP、SMB、WINRM) の名前を指定できます。

たとえば、HTTP Web サーバーの可用性を確認するには、次のコマンドを使用できます。

Test-NetConnection -ComputerName woshub.com -CommonTCPPort HTTP

または、デフォルトの RDP ポート (TCP/3389) が利用可能かどうかを確認します。

Test-NetConnection ny-rds1 –CommonTCPPort RDP

Test-NetConnection コマンドレットが返すすべてのパラメーターを一覧表示できます。

Test-NetConnection ny-man01 -port 445|Format-List *

ポートが利用可能かどうかだけを確認する必要がある場合は、より迅速に確認できます。

TNC ny-msg1 -Port 25 -InformationLevel Quiet

コマンドレットが返されますTrueこれは、リモート TCP ポートが開いていることを意味します。

ヒント.Windows PowerShell の以前のバージョン (バージョン 4.0 より前) では、次のコマンドを使用してリモート TCP ポートの可用性を確認できました。

(New-Object System.Net.Sockets.TcpClient).Connect('ny-msg01', 25)

Test-NetConnection コマンドレットを使用すると、次のようにしてリモート サーバーへのルートをトレースできます。トレースルートパラメータ(組み込みのパラメータと同様)tracertWindows のコマンド)。ルート チェック中の最大ホップ数を制限するには、-ホップパラメータ。

Test-NetConnection ny-man01 –TraceRoute

コマンドレットは、ネットワーク アクセス遅延の概要をミリ秒単位で返しました (PingReplyDetails (RTT): 41 ms) と、宛先ホストに到達する途中のルーターのすべての IP アドレス。

PowerShell を使用して、多数のリモート コンピューター上の特定のポートが利用可能かどうかを確認できます。ホスト名または IP アドレスのリストを次の名前でプレーン テキスト ファイルに保存します。servers.txt.

たとえば、あなたのタスクは、TCP/25 ポートが応答していないか、サーバーのリストで閉じられているホストを見つけることです。

Get-Content c:PSlist_servers.txt |  where { -NOT (Test-Netconnection $_ -Port 25  -InformationLevel Quiet)}| Format-Table -AutoSize

リモート サーバーの可用性をチェックし、使用できないサーバーがある場合はポップアップ通知を表示する、簡単な監視 PowerShell スクリプトを使用できます。

たとえば、AD の健全性チェック中に、すべてのドメイン コントローラー上の基本サービスの可用性を確認できます (DC リストは Get-ADDomainController コマンドレットで取得できます)。 DC 上の次のサービスを確認してみましょう (PortQry ツールにも同様の「ドメインと信頼」ルールがあります)。

  • RPC – TCP/135
  • LDAP – TCP/389
  • LDAP – TCP/3268
  • DNS – TCP/53
  • ケルベロス – TCP/88
  • SMB – TCP/445

$Ports = "135","389","636","3268","53","88","445","3269", "80", "443"
$AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address
ForEach($DC in $AllDCs){
Foreach ($P in $Ports){
$check=Test-NetConnection $DC.Ipv4address -Port $P -WarningAction SilentlyContinue
If ($check.tcpTestSucceeded -eq $true)
{Write-Host $DC.hostname $P -ForegroundColor Green -Separator " => "}
else
{Write-Host $DC.hostname $P -Separator " => " -ForegroundColor Red}
}
}

このスクリプトは、ドメイン コントローラー上の指定された TCP ポートをチェックし、使用できないポートがある場合は、そのポートを赤色で強調表示します (この PowerShell スクリプトは Windows サービスとして実行できます)。

PowerShell のシンプルな TCP/IP ポート スキャナー

PowerShell を使用して、リモート ホストまたは IP サブネットをスキャンして開いている/閉じている TCP ポートを確認する単純な IP スキャナーを実装できます。

192.168.1.100 ~ 192.168.1.150 の範囲の IP アドレスをスキャンし、ポート 3389 が開いているコンピュータを表示するには、次の手順を実行します。

foreach ($ip in 100..150) {Test-NetConnection -Port 3389 -InformationLevel "Detailed" 192.168.1.$ip}

リモート ホスト上の TCP ポートの範囲 (1 ~ 1024) をスキャンします。

foreach ($port in 1..1024) {If (($a=Test-NetConnection srvfs01 -Port $port -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true){ "TCP port $port is open!"}}

PowerShell を使用して Windows で開いているポートを一覧表示する方法

を使用します。Get-NetTCPConnectionローカル コンピューターで開いているポートを一覧表示するコマンドレット (これは、PowerShell でのコマンドレットに相当します)NETSTAT)。コンピューター上で開いているすべての TCP ポートのリストは、次のようにして表示できます。

もっと詳しく知る:Windows ファイアウォールでポートを開いたりブロックしたりする方法

Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort| Sort-Object -Property LocalPort | Format-Table

Get-NetTCPConnection コマンドレットを使用して、アクティブな TCP/IP 接続を一覧表示することもできます。

コンピュータ上の特定のポートでリッスンしているプログラム (プロセス) を調べたい場合は、次のコマンドを使用します (443 は確認したいポート番号です)。

Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess | ft Id, ProcessName, UserName, Path

Related Posts