💻
任意のポート番号で待ち受けるPowerShellスクリプト
はじめに
サーバへの疎通確認用として、簡易的に特定のポートで待ち受けるPowerShellスクリプトを作りました。
スクリプト
SimpleServer.ps1
param (
[int]$Port = 12345 # デフォルトポート番号を指定
)
try {
# ポートでリスナーを作成(全インターフェースにバインド)
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Any, $Port)
$listener.Start()
Write-Host "Listening on all interfaces on port ${Port}... Press Ctrl+C to stop."
while ($true) {
# クライアントの接続を非同期で待機
if ($listener.Pending()) {
$client = $listener.AcceptTcpClient()
Write-Host "Client connected from $($client.Client.RemoteEndPoint.Address):$($client.Client.RemoteEndPoint.Port)!"
# クライアントからの接続をクローズ
$client.Close()
Write-Host "Client connection closed."
}
# サーバが過負荷にならないように短い休止を追加
Start-Sleep -Milliseconds 100
}
} catch {
Write-Error "An error occurred: $_"
} finally {
# Ctrl+Cが押された場合のクリーンアップ
$listener.Stop()
Write-Host "Server stopped."
}
使い方
サーバ側
オプション-Port
で、対象のポート番号を指定します。指定しない場合は12345になります。
.\SimpleServer.ps1 -Port 9898
複数のポートで待ち受けたい場合は、複数実行します。
停止する場合は、Ctrl+C
を入力します。
クライアント側
PowerShell標準のTest-NetConnection
で確認できます。
Test-NetConnection -ComputerName [IPまたはホスト名など] -Port 9898
結果は以下のようになります。
おわりに
今回は、ncコマンドの代わりになるようなPowerShellスクリプトを作りました。
ncコマンドのEXEを使おうとしたのですが脅威検知され使えなかったので、簡易的なものですが作ってみました。
PowerShellスクリプトなので、社内のセキュリティでも検知されず問題なく使えそうです。
この記事がどなたかのお役に立てれば幸いです。
Discussion