Удаление петлевой изоляции не работает для приложения UWP - PullRequest
0 голосов
/ 05 февраля 2019

Итак, я установил простую StreamSocketListener в своем UWP

    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();
                    }
                }
            }
        };
    }

Затем я добавил это в свой манифест приложения с именем семейства пакетов, которое я получил из графического интерфейса для манифеста пакета.

  <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, как показано в этом посте UWP Включение обратной связи по локальной сети

Однако мой веб-сервер доступен только с других устройств в моей сети.Он не подключится, если я

  • подключусь к интрасети ip: 8282
  • подключусь к локальному узлу: 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.

Я не знаю, куда идти

1 Ответ

0 голосов
/ 05 февраля 2019

Вы правы.И чтобы сделать это более ясным, пожалуйста, смотрите этот документ для включения обратной петли .Где вы увидите следующие комментарии:

"Кроме того, приложение времени выполнения Windows может использовать петлю IP-адреса только в качестве целевого адреса для сетевого запроса клиента. Поэтому приложение времени выполнения Windows, которое использует DatagramSocket или StreamSocketListener для прослушиванияна обратном IP-адресе запрещен прием любых входящих пакетов. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...