目次
【PowerShell応用編】pingが通らない?ICMP禁止環境で疎通確認する3つの方法
ネットワークの疎通確認といえば「ping」。
しかし、セキュリティポリシーの厳しい環境では
ICMP(ping通信)がファイアウォールで禁止 されているケースも少なくありません。
この記事では、そんな「pingが通らない環境」で通信確認を行う方法を3つ紹介します。
Test-Connection -Port の活用例を中心に、実務で役立つ切り分けテクニックを解説します。
🚫 なぜpingが通らないのか?
ping は ICMP(Internet Control Message Protocol)を利用して通信確認を行います。
多くのFWやルータでは、セキュリティ上の理由からこのICMP通信が遮断されています。
- ICMPを許可すると、ネットワーク構成の推測(ポートスキャン)に悪用される恐れ
- 外部からのDoS攻撃(ICMP Flood)対策のため
結果として、pingが「Request timed out」になっても、実際はTCP通信が正常に行えている場合があります。
✅ 方法①:PowerShellのTest-Connection -Portを使う
PowerShell 7以降で利用可能な
Test-Connection -Port は、TCPレベルで疎通確認を行えます。
つまり、ping(ICMP)が禁止されていても、
対象ポートが開いていれば通信可能です。
例:Web・DB・SSHなどの確認
|
1 2 3 4 5 |
Test-Connection web01 -Port 80 Test-Connection web01 -Port 443 Test-Connection db01 -Port 1433 Test-Connection server01 -Port 22 |
結果:
|
1 2 3 4 5 |
TcpTestSucceeded : True ComputerName : web01 RemotePort : 443 RoundtripTime : 12 |
| 項目 | 説明 |
|---|---|
| TcpTestSucceeded | Trueなら疎通成功 |
| RemotePort | 指定したTCPポート |
| RoundtripTime | 応答時間(ms) |
🧩 方法②:アプリ層でのHTTP通信テスト(Invoke-WebRequest)
Webサーバの応答を確認したい場合は、HTTPリクエストを送る方法もあります。
|
1 2 |
Invoke-WebRequest https://www.google.com -UseBasicParsing |
- ステータスコード
200 OK→ 正常応答 - ステータスコード
403 / 500→ Webアプリまたは認証エラー
💡 Invoke-WebRequest はAPIやWebシステムの死活確認にも活用できます。
🧠 方法③:特定ポートの開閉を確認(Test-NetConnection)
もう1つの便利なコマンドが
Test-NetConnection (Windows標準搭載)。
PowerShell 5以降で利用でき、ICMPが使えない環境でもポートを指定して通信確認が可能です。
|
1 2 |
Test-NetConnection db01 -Port 1433 |
結果:
|
1 2 3 4 5 |
ComputerName : db01 RemoteAddress : 192.168.1.100 RemotePort : 1433 TcpTestSucceeded : True |
→
TcpTestSucceeded : Trueで疎通成功。
アプリケーション層(DBサーバやAPIサーバなど)との通信可否を簡単に判定できます。
🔍 実務での切り分けシナリオ
| 症状 | 想定原因 | 確認コマンド | 対処 |
|---|---|---|---|
| pingが通らないがWebは見られる | ICMP遮断のみ | Test-Connection -Port 443 |
問題なし(FW仕様) |
| pingもTCPも通らない | FWで全通信遮断 | ネットワーク設定・ACL確認 | 通信ルール修正 |
| ping通るがDB接続不可 | TCPポート閉塞 | Test-Connection -Port 1433 |
ポート開放またはサービス再起動 |
| ICMP禁止環境で死活監視したい | ICMP不可だがTCP許可 | Test-Connection -Port + スクリプト化 |
定期監視バッチを作成 |
💻 自動監視スクリプト例(PowerShell)
以下のスクリプトをタスクスケジューラに登録しておけば、ミドルウェアの死活を定期的チェックできます。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
$targets = @( @{Name="Web"; Host="web01"; Port=443}, @{Name="DB"; Host="db01"; Port=1433}, @{Name="API"; Host="api01"; Port=8080} ) foreach ($t in $targets) { $result = Test-Connection $t.Host -Port $t.Port -Quiet $status = if ($result) { "OK" } else { "NG" } Write-Output "$(Get-Date -Format 'yyyy/MM/dd HH:mm:ss') $($t.Name): $status" } |
出力例:
|
1 2 3 4 |
2025/11/01 08:30:00 Web: OK 2025/11/01 08:30:00 DB: NG 2025/11/01 08:30:00 API: OK |
🔗 関連記事
🧾 まとめ
ファイアウォールでICMPが禁止されている環境でも、
PowerShellの
Test-Connection -PortやTest-NetConnectionを使えば、
TCPレベルでの疎通確認が可能です。
pingが通らない = 通信できない ではない!
TCPポートが開いているかどうかを確認することで、正確な原因切り分けができます。




