环回隔离删除不适用于 UWP 应用程序

Loopback Isolation Removal not working For UWP App

所以我在我的 UWP

中设置了一个简单的 StreamSocketListener
    StreamSocketListener listener = new StreamSocketListener();
    public async void StartServer()
    {
        await listener.BindServiceNameAsync("8282");
        listener.ConnectionReceived +=  async (s, a) =>
        {
            using (var output = a.Socket.OutputStream)
            {
                using (var response = output.AsStreamForWrite())
                {
                    var html = Encoding.UTF8.GetBytes(
                    $"<html><head><title>Background Message</title></head><body>Hello from the background process!<br/></body></html>");
                    using (var bodyStream = new MemoryStream(html))
                    {
                        var header = $"HTTP/1.1 200 OK\r\nContent-Length: {bodyStream.Length}\r\nConnection: close\r\n\r\n";
                        var headerArray = Encoding.UTF8.GetBytes(header);
                        await response.WriteAsync(headerArray,
                                                  0, headerArray.Length);
                        await bodyStream.CopyToAsync(response);
                        await response.FlushAsync();
                    }
                }
            }
        };
    }

然后,我将它添加到我的应用程序清单中,其中包含我从程序包清单的 gui 中获取的程序包系列名称。

  <Extensions>
    <uap4:Extension Category="windows.loopbackAccessRules">
      <uap4:LoopbackAccessRules>
        <uap4:Rule Direction="out" PackageFamilyName="<my package fam name>" />
        <uap4:Rule Direction="in" PackageFamilyName="<my package fam name>" />
      </uap4:LoopbackAccessRules>
    </uap4:Extension>
  </Extensions>

我进去设置了适当的功能

<Capability Name="privateNetworkClientServer"/>
<Capability Name="internetClientServer"/>
<uap3:Capability Name="remoteSystem"/>
<Capability Name="internetClient"/>

最后,我使用 checknetisolation 启用了环回,如此 post

但是,我的网络服务器只能从我网络上的其他设备访问。如果我

它不会连接

我尝试从 Chrome、Firefox、带有代理的 FireFox 连接到它,然后 curl

我运行 netstat -ano | FIND "8282"我可以看到端口是开放的

  TCP    0.0.0.0:8282           0.0.0.0:0              LISTENING       5920
  TCP    [::]:8282              [::]:0                 LISTENING       5920

我也试过 运行 checknetisolation debug -n=<my package fam name> 但输出中没有真实信息

Summary Report

Network Capabilities Status
----------------------------------------------------------------------
    InternetClient                Not Used and Insecure
    InternetClientServer          Not Used and Insecure
    PrivateNetworkClientServer    Not Used and Insecure


Detailed Traffic Report
----------------------------------------------------------------------

    InternetClient                Not Used and Insecure

 ------------------------------------------------------------------


    InternetClientServer          Not Used and Insecure

 ------------------------------------------------------------------


    PrivateNetworkClientServer    Not Used and Insecure

 ------------------------------------------------------------------

OK.

我现在不知道去哪里了

你是对的。为了更清楚地说明这一点,请参阅此 doc for enable loopback part。您将在何处看到以下评论:

"Further, a Windows Runtime app can use an IP loopback only as the target address for a client network request. So a Windows Runtime app that uses a DatagramSocket or StreamSocketListener to listen on an IP loopback address is prevented from receiving any incoming packets."