我可以听取在一个港口(使用HttpListener或其他。净码)在Vista没有要求管理员priveleges?[重复]

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

  •  05-07-2019
  •  | 
  •  

这个问题已经有一个答案在这里:

我使用的HttpListener允许用户建立代理关于用户定义的港口。当我开始的HttpListener,我得到一个例外,如果应用不下运行的管理员权限。

从我读, 这是预期的行为 -管理员权限的都需要开始听上的一个端口。但我敢肯定有办法绕过这一点,因为我运行很多的项目(如Skype),这听上的一个港口而不需要提升到管理员。

有没有一种方法来这样做HttpListener?如果没有,我可以使其他API调。净码设立的港口?

有帮助吗?

解决方案

我从来没有使用HttpListener,但从你的描述听起来更像你想听定期TCP port,而不是嵌入你的应用程序服务器的URL名称空间(这是什么HttpListener似乎做)。你应该能够利用正规的座功能(系统。网。插座。TcpListener)开听上TCP港口而不需要有管理员权限。我几乎可以肯定Skype不使用HttpListener.

其他提示

而你可以写你自己HTTP服务器的使用正常的TCP/IP(这是比较简单的),它是更容易使用HttpListener,这需要优点HTTP.SYS 功能加在Windows XP sp2。

但是,HTTP.SYS 增加了这一概念的URL Acl。这部分是因为HTTP.SYS 让你绑子名字空间港口的80。使用TCP/IP直接避免了这一要求,但意味着你不可以结合到一个港口,已经在使用。

在Windows XP,可以使用HttpCfg.exe 程序设立一个URL ACL给予你的用户帐户的权结合到一个特别网址。它是在平台SDK样本。

在Windows Vista,HTTPCFG仍然是支持的,但其功能已被吸收到统:

netsh http show urlacl

...将显示一系列现有的URL Acl。Acl表示SDDL.

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

...将配置MyURI名字空间,以便域\用户可以听到请求。

如果你需要处理的请求只能从你自己的计算机(通常为测试目的),可以写信 "localhost" 而不是*在前缀。

例如,代替"http://*:9669/"你可以写"http://localhost:9669/".这个作品的现有HttpListener并不需要行政权限(至少在Windows7).

嗯,我不得不处理类似的东西。我的电脑是在受限制的领域,所以我没有管理员权限。经过一些研究和阅读我发现这个线程和统一暗示让我使用临时acl绑定只对发展中测试。我的电脑上的这些规则的存在。

有个条目:

行统http显示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