激活中继器
若要激活中继器连接,通常先启动服务器,然后启动中继器,之后再启动客户端。
也可以先启动中继器,然后再启动服务器。 但是,除非使用 clicon 参数建立反向连接,否则客户端必须始终最后启动。
步骤 1:启动服务器
服务器可以是调试服务器、进程服务器或 KD 连接服务器。 您可以像平常一样启动此操作,但传输协议设置将用于连接到中继器,而不是客户端。 有关详细信息,请参阅激活调试服务器、激活进程服务器或激活 KD 连接 服务器。
如果在创建服务器时使用密码,则在连接客户端时需要此密码,但在创建中继器时不需要。
如果使用隐藏 参数,服务器将照常隐藏。 中继器本身始终处于隐藏状态。
步骤 2:启动中继器
Windows 调试工具中包含的中继器名为 DbEngPrx (dbengprx.exe)。
DbEngPrx 支持以下传输协议:命名管道 (NPIPE)、TCP 和 COM 端口。
如果客户端和服务器使用安全套接字层 (SSL) 协议,则应为中继器使用 TCP 协议。 如果客户端和服务器使用安全管道 (SPIPE) 协议,则应为中继器使用 NPIPE 协议。 中继器将传递它接收的任何数据,它不解释、加密或解密任何信息。 所有加密和解密都将由客户端和服务器完成。
DbEnPrx 命令行的语法如下:
dbengprx [-p] -c ClientTransport -s ServerTransport
上述命令中的参数具有以下可能的值:
-p
即使删除了与 DbEngPrx 的所有连接,DbEngPrx 也会继续存在。
ClientTransport
指定要用于连接到服务器的协议设置。 协议应与创建服务器时使用的协议相匹配。 协议语法如下所示:
npipe:server=Server,pipe=PipeName[,password=Password]
tcp:server=Server,port=Socket[,password=Password][,ipversion=6]
tcp:clicon=Server,port=Socket[,password=Password][,ipversion=6]
com:port=COMPort,baud=BaudRate,channel=COMChannel[,password=Password]
这些协议参数具有以下含义:
服务器
这是在其中创建服务器的计算机的网络名称或 IP 地址。 两个初始反斜杠 (\) 是可选的。
pipe= PipeName
如果使用 NPIPE 或 SPIPE 协议,PipeName 是创建服务器时赋予管道的名称。
port= 插座
如果使用 TCP 或 SSL 协议,Socket 是创建服务器时使用的同一套接字端口号。
clicon
指定服务器将尝试通过反向连接连接到中继器。 当且仅当服务器使用的是 clicon 时,ClientTransport 才必须使用 clicon。 在大多数情况下,当使用反向连接时,中继器会在服务器之前启动。
port= COMPort
如果使用 COM 协议,COMPort 指定要使用的 COM 端口。 前缀“COM”是可选的 -- 例如,“com2”和“2”都可接受。
baud= BaudRate
如果使用 COM 协议,BaudRate 应与创建服务器时选择的波特率匹配。
channel= COMChannel
如果使用 COM 协议,COMChannel 应与创建服务器时选择的通道号匹配。
password= 密码
如果在创建服务器时使用了密码,则必须提供 Password,以便创建调试客户端。 它必须与原始密码匹配。 密码是区分大小写的。 如果提供了错误的密码,错误消息将指定“Error 0x80004005”。
ipversion=6
(仅适用于 Windows 调试工具 6.6.07 及更低版本)使用 TCP 连接到 Internet 时,强制调试器使用 IP 版本 6,而不是版本 4。 在 Windows Vista 和更高版本中,调试器会尝试自动默认为 IP 版本 6,因此不需要此选项。
ServerTransport
指定客户端连接到中继器时将使用的协议设置。 可能的协议语法包括:
npipe:pipe=PipeName[,hidden][,password=Password][,IcfEnable]
tcp:port=Socket[,hidden][,password=Password][,IcfEnable]
tcp:port=Socket,clicon=Client[,password=Password]
com:port=COMPort,baud=BaudRate,channel=COMChannel[,hidden][,password=Password]
这些协议参数具有以下含义:
pipe= PipeName
使用 NPIPE 或 SPIPE 协议时,PipeName 是将用作管道名称的字符串。 每个管道名称应标识唯一的中继器。 如果尝试重用管道名称,将收到一条错误消息。 PipeName 不得包含空格或引号。 PipeName 可以包含数字 printf 样式的格式代码,如 %x 或 %d。 中继器会将其替换为 DbEngPrx 的进程 ID。 第二个此类代码将被替换为 DbEngPrx 的线程 ID。
port= 插座
使用 TCP 或 SSL 协议时,Socket 是套接字端口号。
还可以指定用冒号分隔的端口范围。 DbEngPrx 将检查此范围内的每个端口,以了解是否可用。 如果发现可用端口且未出错,则将创建中继器。 智能客户端必须指定要用于连接到中继器的实际端口。 若要确定实际端口,请搜索中继器;显示此中继器时,端口后跟两个用冒号分隔的数字。 第一个数字将是使用的实际端口;可以忽略第二个数字。 例如,如果将端口指定为 port=51:60,并且实际上使用了端口 53,则搜索结果将显示“port=53:60”。 (如果使用 clicon 参数建立反向连接,客户端可以采用这种方式指定端口范围,而中继器必须指定使用的实际端口。)
clicon=Client
使用 TCP 或 SSL 协议并指定 clicon 参数时,将打开反向连接。 这意味着,中继器将尝试连接到客户端,而不是让客户端启动联系。 如果防火墙阻止了正常方向的连接,这将非常有用。 Client 指定智能客户端所在或将创建客户端的计算机的网络名称或 IP 地址。 两个初始反斜杠 (\) 是可选的。
由于中继器正在查找特定客户端,因此如果使用此方法,则无法将多个客户端连接到中继器。 如果连接被拒绝或已断开,则必须重启中继器。
在使用 clicon 时,最好在创建服务器之前启动中继器,但也允许遵循正常顺序(中继器在客户端之前)。
port= COMPort
使用 COM 协议时,COMPort 指定要使用的 COM 端口。 前缀“COM”是可选的 -- 例如,“com2”和“2”都可接受。 不能在 ClientTransport 和 ServerTransport 中使用同一 COM 端口。
baud= BaudRate
使用 COM 协议时,BaudRate 指定连接运行时的波特率。 允许使用硬件支持的任何波特率。 如果在 ClientTransport 和 ServerTransport 中都使用 COM 协议,则可以指定不同的波特率,但较慢的速率自然会限制客户端和服务器之间的通信速度。
channel= COMChannel
如果使用 COM 协议,COMChannel 指定要用于与客户端通信的 COM 通道。 这可以是 0 和 254 之间(含)的任何值。 可以使用不同的通道号将单个 COM 端口用于多个连接。 (这不同于将 COM 端口用于调试电缆,在那种情况下,不能在 COM 端口中使用通道。)
hidden
当另一个调试器显示所有活动服务器时,阻止服务器显示。
password= 密码
要求客户端提供指定的密码,以便连接到调试会话。 密码可以是任何字母数字字符串。
IcfEnable
促使调试器在 Internet 连接防火墙处于活动状态时启用 TCP 或命名管道通信所需的端口连接。 默认情况下,Internet 连接防火墙会禁用这些协议使用的端口。 将 IcfEnable 与 TCP 连接配合使用时,调试器会导致 Windows 打开 Socket 参数指定的端口。 将 IcfEnable 与命名管道连接配合使用时,调试器会促使 Windows 打开用于命名管道的端口(端口 139 和 445)。 连接终止后,调试器不会关闭这些端口。
步骤 3:启动客户端
客户端应是调试客户端或智能客户端,与服务器类型相对应。 有关详细信息,请参阅激活调试客户端、激活智能客户端或激活智能客户端(内核模式)。
如果服务器拒绝连接(例如,如果提供的密码有误),则中继器和客户端都将关闭。 必须重启它们才能重新建立与服务器的联系。