Windowsのポートスキャン実践ガイド:PortQryからPowerShellまで

PortQryとポートスキャンツール完全ガイド

更新日: 2025年9月8日

はじめに – 2020年からの変化

2020年から2025年にかけて、Windowsのネットワーク診断ツールは大きく進化しました。PortQryは現在も有効なツールですが、Windows 11やWindows Server 2025では、PowerShellのTest-NetConnectionなどの標準機能が充実し、より迅速かつ効率的なポートスキャンが可能になっています。

本記事では、PortQryの最新情報に加え、現代的な代替ツールとセキュリティのベストプラクティスを詳しく解説します。

1. PortQryの現状(2025年版)

1.1 最新バージョン情報

PortQry v2.0は2024年7月15日に最終更新され、現在も以下の環境で動作します:

1.2 コマンドライン版の使用方法(更新版)

# 基本的な使用方法
cd C:\PortQryV2
portqry -n 192.168.1.1 -p tcp -e 443

# 複数ポートの確認
portqry -n example.com -p tcp -r 80:443

# UDPポートの確認
portqry -n 192.168.1.1 -p udp -e 53

# サービス固有のクエリ(例:LDAP)
portqry -n domaincontroller.local -e 389 -p tcp

# 詳細情報の取得(RPC)
portqry -n server.local -e 135 -p tcp

1.3 ポートステータスの解釈

PortQryは以下の3つのステータスを返します:

  • LISTENING: ポートは開いており、サービスが応答している
  • NOT LISTENING: ポートは閉じている(明確な拒否応答)
  • FILTERED: 応答なし(ファイアウォールによるフィルタリングの可能性)

1.4 GUI版(PortQryUI)の特徴

PortQryUIは現在も利用可能で、以下の定義済みサービスセットを提供:

  • Domain and trusts: Active Directoryサービス
  • Exchange Server: メールサーバー関連ポート
  • SQL Server: データベース関連ポート
  • Web Service: HTTP/HTTPS
  • NetBIOS: ファイル共有関連

2. Windows標準ツールによる代替方法(推奨)

2.1 Test-NetConnection(PowerShell 5.0以降)

Windows 8.1以降で利用可能な最も便利なツールです。

# 基本的な接続テスト
Test-NetConnection google.com

# 特定ポートのテスト
Test-NetConnection -ComputerName example.com -Port 443

# 詳細情報の表示
Test-NetConnection -ComputerName 192.168.1.1 -Port 3389 -InformationLevel Detailed

# エイリアス(短縮形)の使用
tnc example.com -Port 80

# 一般的なサービスポートのテスト
Test-NetConnection -ComputerName server.local -CommonTCPPort HTTP
Test-NetConnection -ComputerName server.local -CommonTCPPort RDP
Test-NetConnection -ComputerName server.local -CommonTCPPort SMB

# 複数ポートのスキャン(スクリプト)
$ports = 80,443,3389,445
$ports | ForEach-Object {
    $result = Test-NetConnection -ComputerName server.local -Port $_ -WarningAction SilentlyContinue
    if ($result.TcpTestSucceeded) {
        Write-Host "Port $_ is open" -ForegroundColor Green
    } else {
        Write-Host "Port $_ is closed or filtered" -ForegroundColor Red
    }
}

2.2 Test-Connection(PowerShell 7+)

PowerShell 7では、TCPポート接続テストが追加されました:

# TCP接続テスト(PowerShell 7以降)
Test-Connection bing.com -TCPPort 443 -Count 4

# Tracerouteの実行
Test-Connection google.com -Traceroute

# 詳細情報付きTCP接続テスト
Test-Connection server.local -TCPPort 445 -Detailed

2.3 Get-NetTCPConnection(ローカルポート確認)

# ローカルでリッスンしているポートの確認
Get-NetTCPConnection -State Listen | 
    Select-Object LocalAddress,LocalPort | 
    Sort-Object -Property LocalPort | 
    Format-Table

# 特定ポートの詳細確認
Get-NetTCPConnection -LocalPort 445 | Format-List *

# プロセス情報と合わせて表示
Get-NetTCPConnection -State Listen | 
    Select-Object LocalPort, OwningProcess, @{
        Name="Process";
        Expression={(Get-Process -Id $_.OwningProcess).Name}
    } | Format-Table

2.4 高速ポートスキャンスクリプト

# 非同期処理による高速スキャン
function Fast-PortScan {
    param(
        [string]$Target,
        [int[]]$Ports = @(21,22,23,25,53,80,110,143,443,445,3389,8080)
    )
    
    $jobs = @()
    foreach ($port in $Ports) {
        $jobs += Start-Job -ScriptBlock {
            param($t, $p)
            $tcp = New-Object System.Net.Sockets.TcpClient
            try {
                $result = $tcp.BeginConnect($t, $p, $null, $null)
                $wait = $result.AsyncWaitHandle.WaitOne(1000, $false)
                if ($wait -and $tcp.Connected) {
                    return "$p:Open"
                } else {
                    return "$p:Closed"
                }
            } catch {
                return "$p:Error"
            } finally {
                $tcp.Close()
            }
        } -ArgumentList $Target, $port
    }
    
    $results = $jobs | Wait-Job | Receive-Job
    $jobs | Remove-Job
    return $results
}

# 使用例
Fast-PortScan -Target "192.168.1.1" -Ports (80,443,22,3389)

3. サードパーティツールの活用

3.1 Nmap(最も強力なオプション)

Nmapは2025年現在も最も包括的なポートスキャナーです。

インストール方法

  1. Nmap公式サイトからダウンロード
  2. Windows版にはNpcapドライバーが含まれる
  3. GUI版のZenmapも同梱

基本コマンド

# 基本スキャン
nmap 192.168.1.0/24

# 特定ポートのスキャン
nmap -p 80,443 example.com

# サービスバージョン検出
nmap -sV example.com

# OSフィンガープリンティング
nmap -O example.com

# 高速スキャン(トップ100ポート)
nmap --top-ports 100 192.168.1.0/24

# UDPスキャン
nmap -sU -p 53,161 example.com

3.2 その他の推奨ツール

Advanced IP Scanner(無料・Windows専用)

  • GUIベースで初心者にも使いやすい
  • リモートデスクトップ統合
  • MACアドレス検出機能

Angry IP Scanner(オープンソース・クロスプラットフォーム)

  • 軽量で高速
  • プラグイン対応
  • CSVエクスポート機能

Masscan(超高速スキャン)

  • 最大1000万パケット/秒
  • 大規模ネットワーク向け
  • Nmap互換の出力形式

4. セキュリティベストプラクティス(2025年版)

4.1 ポートスキャンの法的・倫理的考慮事項

⚠️ 重要な注意事項

  • 自分が管理するネットワークのみをスキャン
  • 企業ネットワークでは必ず管理者の許可を取得
  • 第三者のシステムの無許可スキャンは違法行為

4.2 Windows 11/Server 2025のセキュリティ強化

推奨設定

# Windows Defender Firewallの確認
Get-NetFirewallProfile | Select Name, Enabled

# 不要なポートのブロック
New-NetFirewallRule -DisplayName "Block Port 135" `
    -Direction Inbound -Protocol TCP -LocalPort 135 -Action Block

# SMBの最小バージョン設定(3.0以上推奨)
Set-SmbServerConfiguration -RequireSecuritySignature $true `
    -EncryptData $true -Force

# ポート監査の有効化
auditpol /set /subcategory:"Filtering Platform Connection" /success:enable /failure:enable

4.3 定期的な監査の実装

# 自動化されたポート監査スクリプト
$schedule = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 3am
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
    -Argument "-File C:\Scripts\PortAudit.ps1"
Register-ScheduledTask -TaskName "Weekly Port Audit" `
    -Trigger $schedule -Action $action -RunLevel Highest

5. トラブルシューティングガイド

5.1 一般的な問題と解決策

問題: Test-NetConnectionが遅い 解決策:

# ICMPテストをスキップして高速化
$tcp = New-Object System.Net.Sockets.TcpClient
$tcp.Connect("example.com", 443)
$tcp.Connected  # True/False
$tcp.Close()

問題: UDPポートのテストができない 解決策: PortQryまたはNmapを使用

問題: ファイアウォールで誤検知される 解決策:

  • 一時的な除外ルールの追加
  • 認証済みスキャンの使用
  • 段階的なスキャン速度の調整

5.2 パフォーマンス最適化

# 並列処理による高速化
workflow Test-MultipleHosts {
    param([string[]]$Hosts, [int]$Port)
    
    foreach -parallel ($host in $Hosts) {
        Test-NetConnection -ComputerName $host -Port $Port
    }
}

# 使用例
Test-MultipleHosts -Hosts @("server1","server2","server3") -Port 443

6. まとめと推奨事項

2025年のベストプラクティス

  1. 日常的な確認: PowerShellのTest-NetConnectionを使用
  2. 詳細な診断: PortQryまたはNmapを使用
  3. 大規模スキャン: Masscanやカスタムスクリプトを使用
  4. GUI操作: PortQryUI、Zenmap、Advanced IP Scannerを使用

今後の展望

  • Windows 12(予定)では更なるPowerShell統合が期待される
  • クラウドベースのポートスキャンサービスの普及
  • AI/MLを活用した異常検知の統合

付録: よく使うポート番号リファレンス

ポートプロトコルサービス
22TCPSSH
53TCP/UDPDNS
80TCPHTTP
443TCPHTTPS
445TCPSMB
3389TCPRDP
5985TCPWinRM HTTP
5986TCPWinRM HTTPS

【以下、2020年の元記事】

進化の過程を把握するため、古い記事は残しておくつもりです。

PortQryとはポートスキャンが可能なMicrosoft が提供するフリーツールです。
WEB検索すれば見つかります。開放状態を確認させてくれるサイトもありますし、またTELNETコマンドで確認もできます。ただしTCPにしか対応しておらず、UDPの確認をしたいならPortQryがおすすめとなります。
コマンドプロンプトを起動します。コマンドの例を下記に示します。
まずはツールが存在するフォルダに移動します。そしてコマンドを入力します。IPアドレスの所を変更することさえ覚えておけば事足りると思います。

cd C:\Users\minok\OneDrive - ja\PortQryV2
portqry -n 132.145.170.16 -p tcp -e 443

tcpをudpに変えればUDPポートの確認ができます。

次にGUI版もあるので紹介いたします。
下記のサイトからダウンロードできます。
https://www.microsoft.com/en-us/download/details.aspx?id=24009

ダウンロードしたファイルを解凍すると数ファイルありますが、portqueryui.exeを実行しましょう。

コメント

タイトルとURLをコピーしました