Могу ли я прослушивать порт (используя HttpListener или другой .NET-код) в Vista, не требуя прав администратора?[дубликат]

StackOverflow https://stackoverflow.com/questions/169904

  •  05-07-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

Я использую HttpListener, чтобы разрешить пользователю настраивать прокси-сервер на определяемом пользователем порту.Когда я запускаю HttpListener, я получаю исключение, если приложение не запущено с правами администратора в Vista.

Из того, что я прочитал, это ожидаемое поведение - для начала прослушивания порта требуются права администратора.Но я уверен, что есть способы обойти это, поскольку я запускаю множество программ (например, Skype), которые прослушивают порт, не требуя прав администратора.

Есть ли способ сделать это с помощью HttpListener?Если нет, могу ли я выполнить другие вызовы API в .NET-коде для настройки порта?

Это было полезно?

Решение

Я никогда не использовал HttpListener, но из вашего описания это больше похоже на то, что вы хотите прослушивать обычный TCP-порт, вместо того, чтобы встраивать свое приложение в пространство имен URL сервера (что, по-видимому, и делает HttpListener).Вы должны иметь возможность использовать обычные функции сокета (System.Net.Sockets.TcpListener) для открытия и прослушивания TCP-порта, не требуя прав администратора.Я почти уверен, что Skype не использует HttpListener .

Другие советы

Хотя вы можете написать свой собственный HTTP-сервер, используя обычный TCP / IP (это относительно просто), проще использовать HttpListener, который использует преимущества HTTP.SYS функциональности, добавленной в Windows XP SP2.

Однако, HTTP.SYS добавляет концепцию списков управления доступом URL.Отчасти это связано с тем, что HTTP.SYS позволяет вам привязываться к подпространствам имен на порту 80.Прямое использование TCP / IP позволяет избежать этого требования, но означает, что вы не можете привязаться к порту, который уже используется.

В Windows XP вы можете использовать HttpCfg.exe программу для настройки ACL URL, предоставляющую вашей учетной записи пользователя право привязки к определенному URL.Это есть в примерах Platform SDK.

В Windows Vista HTTPCFG по-прежнему поддерживается, но функциональность была перенесена в NETSH:

netsh http show urlacl

...покажет список существующих ACL URL-адресов.Списки управления доступом выражены в SDDL.

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\User listen=yes

...настроит пространство имен MyURI таким образом, чтобы ДОМЕН \ Пользователь мог прослушивать запросы.

Если вам нужно обрабатывать запросы только с вашего собственного компьютера (обычно в целях тестирования), вы можете написать локальный хост вместо * в префиксе.

Например, вместо "http://*:9669/" вы можете написать "http://localhost:9669/".Это прекрасно работает с HttpListener и не требует прав администратора (по крайней мере, в Windows 7).

Что ж, мне приходилось сталкиваться с чем-то подобным.Мой компьютер находится в домене с ограниченным доступом, поэтому у меня нет прав администратора.После некоторых исследований и чтения я нашел эту тему, и подсказки netsh заставили меня использовать временные привязки acl только для разработки тестов.На моем компьютере это правило существует.

Там есть такая запись:

Запустите 'netsh http show urlacl' (как показано выше).

    [...]
        Reservierte URL            : http://+:80/Temporary_Listen_Addresses/
            Benutzer: \Jeder
                Abhören: Yes
                Delegieren: No
                SDDL: D:(A;;GX;;;WD)
    [...]

Таким образом, я могу использовать HttpListener как не-администратор (Jeder):

    [...]
    HttpListener l = new HttpListener();
    string prefix = "http://+:80/Temporary_Listen_Addresses/";
    l.Prefixes.Add(prefix);
    l.Start(); // does not throw any "Permission Denied/Access Denied/Zugriff verweigert"
    [...]

Пусть это поможет кому-нибудь найти эту тему.

В XP вам приходилось использовать командную строку (httpcfg), чтобы сначала открыть порт, иначе это не сработало бы для не-администраторов.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top