无法访问localhost怎么办? Window解决UWP应用本地回环限制
<p>关于 Window 的 UWP 应用本地回环限制以及限制解除方案</p><h3>1. UWP 应用默认禁止本地回环</h3>
<p>UWP 应用在默认的情况下,禁止访问本地的 Localhost(这被称做本地回环 Loopback)。</p>
<p>然而我们在开发、调试、正向代理等场景下,又不得不让 UWP 突破这一个限制。</p>
<h3>2. 官方限制解除工具 <code>CheckNetIsolation.exe</code></h3>
<p>这个工具位于 <code>C:/Windows/System32/CheckNetIsolation.exe</code>,它的功能为解除 UWP 的本地 Loopback 限制或者调试应用(本文仅介绍解除 Loopback 限制)。</p>
<div class="jb51code"><pre>./CheckNetIsolation.exe LoopbackExempt [-n=] [-p=]</pre></div>
<p>常见用法:</p>
<ul><li><code>-s</code>: 查看已经取得 Loopback 豁免的应用列表</li><li><code>-a -p= or -a -n=</code>: 添加应用豁免</li><li><code>-d -p= or -d -n=</code>: 移除应用豁免</li><li><code>-c</code>: 移除所有安装的应用的豁免</li></ul>
<h3>3. 如何获取所有安装应用的 SID</h3>
<p>在注册表目录 <code>HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings</code> 即可取得所有 App 的 SID 列表。</p>
<p>通过结合 CMD 或者 Pwsh 的循环命令,即可自动化为所有已安装应用添加豁免:</p>
<p><strong>CMD 命令:</strong></p>
<div class="jb51code"><pre>FOR /F "tokens=11 delims=\" %p IN ('REG QUERY "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings"') DO CheckNetIsolation.exe LoopbackExempt -a -p=%p</pre></div>
<p><strong>Powershell 命令:</strong></p>
<div class="jb51code"><pre>Get-ChildItem -Path Registry::"HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings\" -name | ForEach-Object {CheckNetIsolation.exe LoopbackExempt -a -p="$_"}</pre></div>
<p><strong>New Powershell Core:</strong></p>
<div class="jb51code"><pre>(Get-AppxPackage -AllUsers).PackageFamilyName | ForEach-Object {CheckNetIsolation.exe LoopbackExempt -a -n="$_"}</pre></div>
<h3>4. 其他便捷工具以及深层次分析</h3>
<p>来自 Fiddler 的 Enable Loopback Utility 或开源项目 Loopback Exemption Manager 的这两个工具提供了很方便的图形化方式来对安装的 UWP 应用进行 Loopback 豁免。</p>
<p>深入研究后者工具以及类似工具的源代码,并参考作者提到的:</p>
<p>我们可以知道,开源工具的作者从 Fiddler 那里借鉴了 P/Invokes 的方式获取 API,而所 Invoke 的 API 主要来自于 <code>FirewallAPI.dll</code>,这个 dll 提供了很多与 UWP Loopback 豁免相关的实用方法。</p>
<p>我们继续使用 VS2022 的 Dev Shell 对官方的 <code>CheckNetIsolation.exe</code> 进行 dll 依赖分析(需要安装 VS 2022):</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202408/202408120909559.jpg" /></p>
<p>到这里我们便可以得知,无论是官方工具还是第三方工具的实现,都是调用 <code>FirewallAPI.dll</code> 提供的 API 来进行 Loopback 豁免的。</p>
頁:
[1]