Как включить замыкание на себя и устранить неполадки сетевой изоляции (приложения среды выполнения Windows)
[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]
В этом разделе объясняется, как включать замыкание на себя для доступа к сети и как устранять неполадки сетевой изоляции для приложений Магазина Windows в Windows 8.
Что необходимо знать
Технологии
Windows.Networking.BackgroundTransfer
Разрешает расширенные возможности скачивания и отправки.
-
Разрешает передачу данных по сети с помощью сокетов и веб-сокетов.
-
Разрешает доступ к веб-ресурсам с помощью протокола AtomPub.
-
Управляет веб-каналами.
-
Разрешает подключение к веб-службам с помощью современного веб-клиента.
-
Разрешает подключение к веб-службам с помощью веб-клиента.
Необходимые условия
- Следующая информация применима к любому подключенному или поддерживающему работу в сети приложению среды выполнения Windows, которому необходимо сетевое подключение. Это распространяется на приложения, написанные на JavaScript. Также это распространяется на приложения, написанные с использованием .NET Framework 4.5 на C#, VB.NET и C++.
Средство диагностики сетевой изоляции
Встроенное средство диагностики, CheckNetIsolation.exe, помогает разработчикам тестировать приложения, требующие сетевых возможностей, выполнять их диагностику и устранять неполадки. CheckNetIsolation.exe — это программа командной сроки, принимающая входные параметры из командной строки. Она имеет два основных параметра:
LoopbackExempt
Просмотр установленных приложений, которые исключены из петлевых IP-ограничений и которым разрешен доступ к петлевым адресам. Этот параметр также разрешает добавление доступа к петлевым IP-адресам для конкретного приложения во время тестирования.Debug
Определяет разрешенные используемые возможности приложения и разрешенные неиспользуемые возможности. Любые разрешенные неиспользуемые возможности снижают безопасность приложения. Этот параметр предоставляет информацию о пропущенном сетевом трафике.
CheckNetIsolation.exe может отображать справочное сообщение с информацией об использовании. Для вывода справки используйте указанную ниже команду.
CheckNetIsolation -?
Для некоторых параметров CheckNetIsolation.exe требуется указать имя или идентификатор приложения. Когда приложение развернуто на конечном компьютере, имя приложения можно найти в папке c:\Program Files\Applications. Это имя используется для запуска приложения. Это имя семейства пакетов, которое отображается при использовании Microsoft Visual Studio 2013 и представляет контейнер приложения. Идентификатор приложения можно найти в следующем разделе реестра:
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer
Включение петлевого режима для доступа к сети
Передачу данных по сети с помощью петлевого IP-адреса нельзя использовать для межпроцессного взаимодействия (между двумя разными приложениями) в приложении среды выполнения Windows, так как сетевая изоляция ограничивает такое взаимодействие. Сетевое взаимодействие с использованием петлевых IP-адресов разрешено для обеспечения связи в рамках одного приложения и одного процесса.
Разработчику может понадобиться использовать петлевой режим для тестирования или отладки, хотя эта возможность недоступна для пользователей. Рассмотрим для примера такую ситуацию. Какому-нибудь приложению может понадобиться скачать данные из веб-службы из приложения среды выполнения Windows. Разработчик собирается тестировать приложение на одном компьютере, на котором веб-служба настроена на использование адреса 127.0.0.1.
Примечание Замыкание на себя разрешено только в целях разработки. Приложению среды выполнения Windows, установленному за пределами Visual Studio, такое использование запрещено. Более того, приложение среды выполнения Windows может использовать петлевой IP-адрес только в качестве целевого адреса для сетевого запроса клиента. Поэтому приложение среды выполнения Windows, которое использует DatagramSocket или StreamSocketListener для ожидания передачи данных на петлевом IP-адресе, не может получать никакие входящие пакеты.
Для доступа к петлевым адресам разработчику необходимо настроить сетевую изоляцию, чтобы исключить приложение из петлевых ограничений. Чтобы сетевая служба получала пакеты, прослушиватель для порта TCP или UDP должен быть также разрешен в правилах брандмауэра.
Приложения, установленные и запускаемые в Visual Studio, будут автоматически зарегистрированы как исключенные из ограничений замыкания на себя. Разработчик может просмотреть список исключенных приложений с помощью следующей команды:
CheckNetIsolation.exe LoopbackExempt -s
Разработчик также может вручную добавить петлевое исключение для приложения с помощью средства CheckNetIsolation.exe.
Для исключения приложения из петлевых ограничений требуется указание идентификатора приложения для пакета. Следующая команда исключает приложение из петлевых ограничений.
CheckNetIsolation.exe LoopbackExempt –a –p=S-1-15-2-4125766819-3228448775-2449327860-2490758337-1264241865-3581724871-2122349299
Для конкретного приложения можно удалить исключение из петлевых ограничений. Следующая команда удаляет исключение из петлевых ограничений для того же приложения.
CheckNetIsolation.exe LoopbackExempt –d –p=S-1-15-2-4125766819-3228448775-2449327860-2490758337-1264241865-3581724871-2122349299
Средство CheckNetIsolation.exe позволяет разработчику исключить приложение из петлевых ограничений по имени контейнера приложения. Следующая команда исключает приложение из петлевых ограничений по имени контейнера приложения:
CheckNetIsolation.exe LoopbackExempt –a –n=stocks_mw26f2swbd5nr
Для приложения, написанного с помощью платформы .NET Framework, можно удалить исключение из петлевых ограничений по имени контейнера приложения. Следующая команда удаляет исключение из петлевых ограничений для того же приложения.
CheckNetIsolation.exe LoopbackExempt –d –n=stocks_mw26f2swbd5nr
Исключение из петлевых ограничений можно удалить для всех установленных приложений. Следующая команда удаляет исключение из петлевых ограничений для всех установленных на локальном компьютере приложений.
CheckNetIsolation.exe LoopbackExempt –c
Отладка сетевой изоляции
Параметр debug используется для создания отчета о сетевых возможностях, используемых приложением.
С помощью параметра debug можно определить, использует ли приложение все возможности, которые были объявлены в манифесте приложения. При использовании параметра debug система отслеживает, какие объявленные возможности приложения используются, а какие не используются.
Для использования параметра debug разверните приложение на конечном компьютере и определите идентификатор и имя приложения. Затем необходимо открыть окно командной строки с высоким уровнем привилегий (запустите от имени администратора). Следующая команда устанавливает параметр debug для конкретного идентификатора приложения.
CheckNetIsolation.exe Debug –p=S-1-15-2-4125766819-3228448775-2449327860-2490758337-1264241865-3581724871-2122349299
Следующая команда устанавливает параметр Debug для приложения по имени контейнера приложения.
CheckNetIsolation.exe Debug –n=stocks_mw26f2swbd5nr
После установки параметра Debug запустите приложение из командной строки с повышенными привилегиями. Приложение следует протестировать на предмет выполняемых им операций. После завершения тестирования нажмите клавиши CTRL+C при запущенном приложении. В окне командной строки появится сводный отчет, где будет указано состояние сетевых возможностей. Для каждой возможности имеется запись, где указывается, была ли объявлена возможность и была ли она использована. Если были объявлены неиспользуемые возможности, в сводном отчете это будет указано пометкой "Not Used and Insecure" (не используется и небезопасно). В подробном отчете о трафике также указываются исходные и конечные IP-адреса, которые использовались для доступа к сети.
Следующий текст содержит вывод для приложения, которое включало неиспользуемые возможности.
Network Isolation Debug Session started.
Reproduce your scenario, then hit Ctrl-C when done.
Summary Report
Network Capabilities Status
----------------------------------------------------------------------
InternetClient Not Used and Insecure
InternetClientServer Not Used and Insecure
PrivateNetworkClientServer Used and Declared
Detailed Traffic Report
----------------------------------------------------------------------
InternetClient Not Used and Insecure
----------------------------------------------------------------------
InternetClientServer Not Used and Insecure
----------------------------------------------------------------------
PrivateNetworkClientServer Used and Declared
------------------------------------------------------------------
10.195.58.77 10.195.58.78
Следующий текст содержит вывод для приложения, которое не включало неиспользуемые возможности.
Network Isolation Debug Session started.
Reproduce your scenario, then hit Ctrl-C when done.
Summary Report
Network Capabilities Status
----------------------------------------------------------------------
PrivateNetworkClientServer Used and Declared
Detailed Traffic Report
----------------------------------------------------------------------
PrivateNetworkClientServer Used and Declared
------------------------------------------------------------------
10.195.58.77 10.195.58.78