我可以听取在一个港口(使用HttpListener或其他。净码)在Vista没有要求管理员priveleges?[重复]
-
05-07-2019 - |
题
这个问题已经有一个答案在这里:
- HttpListener拒绝访问 10答案
我使用的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"
[...]
可以这样帮助任何人发现这个线程。