Назад | Перейти на главную страницу

urlacl и брандмауэр Windows

Обычно я использую серверы Linux для своих приложений. Поэтому я новичок в системе брандмауэра серверов Windows.

У меня есть приложение C #, которое должно действовать как HTTP-сервер. Есть несколько способов реализовать это с помощью разных уровней абстракции: Конечно, есть Socket библиотека, обеспечивающая очень фундаментальную функциональность. Для TCP-трафика есть также TcpClient. Оба прослушивают определенный порт, и для доступа к ним с другого компьютера требуются «правила для входящих подключений», определенные в брандмауэре Windows (правила не требуются, если вам нужен доступ только с вашего компьютера).

Тогда есть HttpListener. Он не работает для каждого порта, использует префиксы URI для соответствия запросам. Например, префикс «http: // *: 80 /» будет обрабатывать весь http-трафик порта 80.

Что меня действительно беспокоит, так это то, что HttpListener для работы нет правила в брандмауэре Windows, но требуется запись в urlacl:

netsh http add urlacl url=http://*:80/ user=DOMAIN\user

(Это резервирование пространства имен URL)

Все три метода реализации http-сервера одинаково полезны. Разница в том, что при использовании HttpListener требуется гораздо меньше кода.

Мой вопрос: почему существует концепция резервирования пространства имен URL-адресов, но, тем не менее, не зарегистрированные URL-адреса могут прослушиваться сервером. И почему зарегистрированные URL-адреса могут обходить правила брандмауэра? Почему вообще существует такая система?

AFAIK, net http показывает / редактирует конфигурацию для http.sys, части драйвера режима ядра IIS, которая вместе с серверами активации Windows (WAS) также может использоваться приложениями, не относящимися к IIS. Им просто нужно зарегистрировать свой URL-адрес, чтобы http.sys / WAS мог направлять запросы правильному клиенту и избегать конфликтов.

Если вы решите реализовать низкоуровневое прослушивание порта самостоятельно, вы не используете http.sys и не должны регистрировать URL-адрес в netsh, но вам все равно нужно быть осторожным, чтобы не возникло никаких конфликтов с другими программами.

Сеть httpListener класс также использует http.sys

Что касается правил брандмауэра, я не вижу, чтобы зарегистрированные URL-адреса не нуждались в правиле брандмауэра. Ваш пример http://*:80/ покрывается World Wide Web Services правило filewall.