环回隔离删除不适用于 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
但是,我的网络服务器只能从我网络上的其他设备访问。如果我
它不会连接
- 连接到我的 int运行et ip:8282
- 连接到 localhost:8282
- 连接到 127.0.0.1:8282
我尝试从 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."
所以我在我的 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
但是,我的网络服务器只能从我网络上的其他设备访问。如果我
它不会连接- 连接到我的 int运行et ip:8282
- 连接到 localhost:8282
- 连接到 127.0.0.1:8282
我尝试从 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."