NETSH HTTP ADD URLACL与通配符(或httpapi.dll)

时间:2016-07-16 08:53:25

标签: netsh

在NETSH HTTP ADD URLACL中使用+和*的正确语法是什么?

我知道以下Microsoft文章,但我找不到一种方法,这适用于我的情况: https://msdn.microsoft.com/en-us/library/aa364698(v=vs.85).aspx

我想要实现的是只启用某个用户(这不是问题)能够侦听指定的URL但是使用这个通配符。

通常,此用户用于服务帐户。所以我想避免执行额外的netsh http add urlacl url = X://mynewUrl.net:1234 / user = MyUser(本地用户),当我的服务需要支持额外的URL时

我想要的是执行类似这样的事情,这将涵盖我的情况,当然我将始终使用相同的TCP / IP端口:

netsh http add urlacl url = https://+:1234/ user = MyUser 或者用*

因此,当我添加我的服务需要支持的其他URL()时,我不需要每次都执行netsh。

我希望能够使用IP地址。

我尝试了很多不同的组合,但没有成功。当我尝试运行该服务时,我被拒绝访问。

正如笔记一样,Netsh http的行为与httpapi.dll中的API相同,所以我猜它实际上使用的是httpapi.dll。我也使用PlatformInvoke到这个库并具有完全相同的行为。

另一个注意事项是我使用的是Windows 10和Windows Server 2012/2012 R2。

任何想法如何解决这个问题,所以每当我想为我的服务支持额外的URL时,我都不需要添加新的预订?

1 个答案:

答案 0 :(得分:0)

netsh 与 SDDL agrument 一起使用应该可以满足您的需求:

netsh http add urlacl url=http://+:1234/ sddl=D:(A;;GA;;;<process owner sid>)

要获取您的用户 sid:

whoami /user

如果您不确定所有者是否是您在该过程中的用户,此 oneliner 会有所帮助:

Get-WmiObject -Class Win32_Process -Filter 'Name = "powershell.exe"' | % { $_.GetOwner() } | % { (New-Object System.Security.Principal.NTAccount($_.Domain + "\" + $_.User)).Translate([System.Security.Principal.SecurityIdentifier]).Value }