1.
概述
使用
HTTP.sys
中的
Net.tcp Port Sharing
服务,配合
WinRM
实现端口复用。
优点:
HTTP.sys
为
windows
原生机制,
WinRM
为
windows
自带功能,动作较小,不易触发主
动防御。
需要管理员权限。
2.
原理
(1) HTTP.sys
HTTP.sys
是
Microsoft Windows
处理
HTTP
请求的内核驱动程序。
为了优化
IIS
服务器性能
从
IIS6.0
引入(即
Windows Server 2003
及以上版本)
IIS
服务进程依赖
HTTP.sys
HTTP.sys
监听
HTTP
流量,然后根据
URL
注册的情况去分发,以实现多个进程在同一个端口监听
HTTP
流
量。微软公开了
HTTP Server API
库,
Httpcfg
、
Netsh
等都是基于它的。
整个过程描述如下:
Step 1.
注册:
IIS
或其他应用使用
HTTP Server API
时,需要先在
HTTP.sys
上面注册
url prefix
,以监听请
求路径。
Step 2.
路由:
HTTP.sys
获取到
request
请求,并分发这个请求给注册当前
url
对应的应用。
(2) Net.tcp Port Sharing
Net.tcp Port Sharing
服务是
WCF
(
Windows Communication Foundation
,微软的一个框架)中的一
个新系统组件,这个服务会开启
Net.tcp
端口共享功能以达到在用户的不同进程之间实现端口共享。这个
机制的最终是在
HTTP.sys
中实现的。目前将许多不同
HTTP
应用程序的流量复用到单个
TCP
端口上的
HTTP.sys
模型已经成为
windows
平台上的标准配置。
在以前的
web
应用中,一个
web
应用绑定一个端口,若有其他应用则需要绑定其他的端口才能实现监
听。如下图所示,
Web Application 1
绑定了
80
端口后,
Web Application 2
再去绑定
80
端口会出错。
现在使用微软提供的
NET.tcp Port Sharing
服务,只要遵循相关的开发接口规则,就可以实现不同的应用
共享相同的
web
服务器端口。如下图中
Web Application 1
和
Web Application 2
同时绑定在
80
端口。
(3) WinRM
WinRM
全称是
Windows Remote Management
,是微软服务器硬件管理功能的一部分,能够对本地或
远程的服务器进行管理。
WinRM
服务能够让管理员远程登录
windows
操作系统,获得一个类似
telnet
的
交互式命令行
shell
,而底层通讯协议使用的正是
HTTP
。
事实上,
WinRM
已经在
HTTP.sys
上注册了名为
wsman
的
url
前缀,默认监听端口
5985
。因此,在安装了
IIS
的边界
windows
服务器上,开启
WinRM
服务后修改默认
listener
端口为
80
或新增一个
80
端口的
listener
即可实现端口复用,可以直接通过
80
端口登录
windows
服务器。
3.
指令速查
查询当前注册
url
前缀:
netsh http show servicestate
(1)
开启
winrm
服务
Windows 2012
及以上:
winrm
默认启动并监听了
5985
端口。
Windows 2008
:需要手动启动
winrm
。
winrm quickconfig
‐
q
(2)
增加
80
端口复用
winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
(3)
更改
winrm
为
80
端口
默认
5985
端口开启,不需要更改端口。
默认
5985
端口不开启,则更改
winrm
为
80
端口,否则会因端口改变而引起管理员关注。
winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}