智能建站的优势和不足云尚网络公司
 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"}  
 
 