目录

简介

先决条件

要求

使用的组件

CSCvt73723 — 在服务器上放置大量会话后WebRTC服务器会泄漏会话

您如何识别此漏洞？

如何避免此问题？

计划何时修复此问题？

相关信息

简介

本文档介绍在服务器上放置大量会话后，WebRTC服务器泄漏会话的Cisco Bug ID CSCvt73723的检测和解决方法。这可能最终导致用户无法登录或作为访客加入WebBridge。

先决条件

要求

Cisco 建议您了解以下主题：

- 思科会议服务器(CMS)（CallBridge和WebBridge组件）

使用的组件

本文档中的信息基于Cisco Meeting Server，特别是WebBridge 2/CMA WebRTC组件。本文档不适用于版本2.9中引入的新WebBridge 3/CMS Web应用组件。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

CSCvt73723 — 在服务器上放置大量会话后，WebRTC服务器会泄漏会话

您如何识别此漏洞？

从最终用户的角度来看，症状是一旦他们达到硬限制，再有用户就无法加入会议。在日志中，发现Webbridge统计信息(根据此常见问题解答)达到149并不一定意味着这些会话都是泄露的。这只意味着Web Bridge已达到其硬性限制，不允许新连接。

"网桥":信息：[调试]统计信息149, c:3477, d:3170

计算其中有多少会话是泄漏的会话则要复杂一些，如果您不使用CMA桌面客户端或iOS客户端，则可以执行。从2.8版开始， Call Bridge每5分钟报告一次CMA会话数（CMA WebRTC + CMA桌面客户端+ CMA iOS客户端）。 请注意，此报告为“CMA”：“X/Y”，其中X是当前活动CMA会话数，Y是过去5分钟内的峰值。

信息：统计信息：{"callLegsPS":1，“callLegs”：“20/24”、“CMA”：“14/17”、“sip”：{"std":"0/1"、"peer":“6/6”}}

仅仅因为呼叫网桥报告14个当前会话，并不意味着共置的Web网桥也报告14个会话。此映射在单个组合服务器上为1:1，但在群集部署中，Web网桥会话可以实例化不同呼叫网桥上的呼叫（尤其是当启用负载均衡时 — 默认情况下，CMA会启用负载均衡）。

因此，要计算部署中泄漏的会话总数，您确实需要来自所有Web网桥统计信息的合并活动会话，并将其与报告的合并CMA呼叫网桥统计信息进行比较。

如何避免此问题？

根据部署遇到此情况的频率（每隔几天或每隔几周一次），必须建议您重新启动其Web网桥，该网桥会清除所有泄漏的会话并将活动会话计数重置为0。如果这成为每日的繁琐事务，因此可以理解，为什么可以使用代码块中可用的脚本来促进此任务。

################################################################

#### Cisco Meeting Server ####

#### Webbridge restart ####

#### Workaround for CSCvt73723  ####

#### feedback: willwoo@cisco.com ####

################################################################

#--------------------------------------------------------------

# ---------- DISCLAIMER ----------

#--------------------------------------------------------------

# Please note this script is NOT maintained or supported by Cisco.

# This is to be run at entirely your own risk.

# This script is not intended for redistribution

# Tested with python 3.7.4

#--------------------------------------------------------------

#--------------------------------------------------------------

# ---------- Libraries to import ----------

#--------------------------------------------------------------

import paramiko

import time

import datetime

#--------------------------------------------------------------

#--------------------------------------------------------------

# ---------- Deployment parameters to change ----------

#--------------------------------------------------------------

# WB Inventory - just extend or modify the below to match your deployment requirements.

# Enter the MMP IP of the server (can differ from interface webbridge service is running)

webbridges ={1:"127.0.0.1",2:"127.0.0.1",3:"127.0.0.1",4:"127.0.0.1"}

mmp_username = "admin" # MMP username

mmp_password = "password" # MMP password

#--------------------------------------------------------------

def mmp_webbridge_restart(mmp_address,uname,pword):

conn = paramiko.SSHClient()

conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:

conn.connect(mmp_address, 22, uname, pword)

stdin, stdout, stderr = conn.exec_command('webbridge restart')

time.sleep(1)

conn.close()

print_log_message('Webbridge on server: ' + mmp_address + ' restarted successfully')

except Exception as error:

print_log_message('Failed to restart webbridge on server ' + mmp_address + '. Error:')

print_log_message(str(error))

pass

def print_log_message(message):

time_stamp = datetime.datetime.now(datetime.timezone.utc)

time_stamp = str(time_stamp)

file = open('webbridge_restart_logs.txt', 'a')

file.write(time_stamp + " " + message + "\n")

file.close()

if __name__ == '__main__':

for wb in webbridges:

mmp_webbridge_restart(webbridges[wb], mmp_username, mmp_password)

################################################################

脚本需要进行一些小编辑（第29-30行的凭据和第27行部署中Web网桥的IP地址），并且必须仅在没有预期负载或在维护窗口期间运行。脚本不检查活动会话，只是在列出的所有服务器上执行“webbridge restart”命令，终止任何活动WebRTC会话。

要自动执行此脚本，可以通过设置cron作业或在Windows 10 PC上使用“任务调度程序”来完成。假设Win 10 PC已安装Python 3.4+，则可以执行以下步骤：

1.打开任务计划程序

2.选择“创建基本任务……”

2.1为此任务输入名称/说明

2.2选择要运行此任务的频率和时间（建议仅在非高峰时段运行，此处显示的每周六凌晨2点）

2.3要执行的操作，请选择：'启动程序'

2.4操作：

*计划/脚本：  C:\<python.exe的路径>

(如果您不知道python.exe的路径，可以转到cmd并键入： python -c "导入系统；print(sys.executable)

*添加参数（可选）：webbridge_restart.py（或python脚本的名称）

*起始位置（可选）：C:\<webbridge_restart.py的路径

请注意，运行cron作业的计算机必须能够访问配置的CMS服务器的MMP。运行脚本后，它会创建webbridge_restart_logs.txt文件，该文件包含有关不同WebBridge的重新启动以及任何潜在故障的详细信息。示例中，一个连接成功到10.48.79.194，另一个连接失败到127.0.0.1（实际上是PC的环回地址）。

2020-06-08 14:53:18.149915+00:00 Webbridge on server: 10.48.79.194 restarted successfully 2020-06-08 14:53:19.165543+00:00 Failed to restart webbridge on server 127.0.0.1. Error: 2020-06-08 14:53:19.165543+00:00 [Errno None] Unable to connect to port 22 on 127.0.0.1

如何测试脚本是否正常？

如果已安装Python以从中运行脚本的PC，则可以先手动运行该PC，然后执行以下步骤：

1. 使用“cd”命令打开cmd并浏览到脚本的位置

2. 使用命令“python webbridge_restart.py”运行python文件

3. 如果您看到指示未安装“paramiko”模块的错误，您需要使用命令“pip install paramiko”安装一些额外的库。

4. 完成后，可以使用“python webbridge_restart.py”再次运行脚本(注：这将重新启动Webbridge并导致当前正在进行的WebRTC连接断开)

如果运行成功，可以在webbridge_restart_logs.txt文件中检查其结果。

计划何时修复此问题？

这不是新的Bug，在Web Bridge 2 / CMA WebRTC上没有修复此漏洞的计划。新的Web Bridge 3/CMS Web应用（从2.9开始提供）不受此漏洞的影响，因为它已完全重新设计。受此影响严重的客户必须考虑迁移到新的CMS Web应用(但请注意，此功能与2.9版中的Web Bridge 2功能不相同。有关此项的完整详细信息，请查看CMS 2.9和cms Web应用版本说明。)

相关信息

- 缺陷注释：https://bst.cloudapps.cisco.com/bugsearch/bug/CSCvt73723

- 版本说明:https://www.cisco.com/c/en/us/support/conferencing/meeting-server/products-release-notes-list.html

- 常见问题

- https://meeting-infohub.cisco.com/faq/content/43/450/en/how-do-you-check-the-number-of-active-sessions-on-a-web-bridge.html