3 CORE Python GUI

CORE Python GUI

原文链接:(BETA) Python GUI


1. 概述

GUI 用于在画布上绘制节点和网络设备,将它们链接在一起以创建模拟网络会话。

按下开始按钮后,CORE 将继续执行这些阶段,停留在运行时阶段。会话停止后,CORE 将进入数据收集阶段,然后拆除模拟状态。

可以自定义 CORE 以在每个状态下执行任何操作。

2. 先决条件

除了安装CORE,您还必须运行CORE守护程序。这是在命令行上用 systemd 或 sysv 完成的。

# systemd service
sudo systemctl daemon-reload
sudo systemctl start core-daemon

# sysv service
sudo service core-daemon start

# direct invocation
sudo core-daemon

3. GUI 文件

注意:以前 BETA GUI 将文件放在 ~/.coretk 下,现在已更新为 ~/.coregui。 之前名为 ~/.coretk/gui.yaml 的配置文件现在也称为 ~/.coregui/config.yaml,格式略有不同。

GUI 将在第一次运行时在主目录中创建一个名为 ~/.coregui 的目录。 该目录将帮助布局 GUI 可能使用的各种文件。

  • .coregui/
    • backgrounds/
      • 放置用于在 GUI 中显示的背景
    • custom_emane/
      • 保留自定义 emane 模型以与 CORE 守护程序一起使用的地方
    • custom_services/
      • 保留与 CORE 守护程序一起使用的自定义服务的地方
    • icons/
      • GUI 使用的图标以及所需的自定义图标
    • mobility/
      • 保存自定义移动文件的地方
    • scripts/
      • 存放 CORE 相关脚本的地方
    • xmls/
      • 保存保存的会话 xml 文件的地方
    • gui.log
      • 运行 gui 时的日志文件,当出现异常等问题时查看此处
    • config.yaml
      • 用于保存/加载各种 gui 相关设置(自定义节点、布局、地址等)的配置文件

4. 操作模式

CORE GUI 有两种主要的操作模式,即编辑模式和执行模式。 通过键入不带任何选项的 core-pygui 运行 GUI,以编辑模式启动。使用左侧的工具栏在空白画布上绘制节点,并通过右键单击菜单或双击它们进行配置。GUI 不需要以 root 身份运行。

编辑完成后,按绿色开始按钮实例化拓扑并进入执行模式。在执行模式下,用户可以通过双击或右键单击来与正在运行的仿真机器进行交互。编辑工具栏消失,取而代之的是执行工具栏,它在运行仿真时提供工具。按红色停止按钮将破坏正在运行的仿真并使 CORE 返回到编辑模式。

仿真运行后,可以关闭 GUI,并会出现询问是否应终止仿真的提示。仿真可能会继续运行,并且 GUI 可以稍后重新连接到现有会话。

GUI 可以在 Linux 上以普通用户身份运行。

Python 图形用户界面目前在启动时提供以下选项。

usage: core-pygui [-h] [-l {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [-p]

CORE Python GUI

optional arguments:
  -h, --help            show this help message and exit
  -l {DEBUG,INFO,WARNING,ERROR,CRITICAL}, --level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
                        logging level
  -p, --proxy           enable proxy

5. 工具栏

工具栏是一排按钮,沿着 CORE GUI 窗口的左侧垂直排列。工具栏根据操作模式而变化。

5.1. 编辑工具栏

当 CORE 处于编辑模式(默认)时,垂直编辑工具栏存在于 CORE 窗口的左侧。下面是每个工具栏项目的简要说明,从顶部开始。大多数工具都分组到相关的子菜单中,当单击它们的组图标时会出现这些子菜单。

在这里插入图片描述

5.2. CORE 节点

这些节点将创建一个新的节点容器并运行相关的服务。

在这里插入图片描述

5.3. 网络节点

这些节点主要用于创建满足下述目的的 Linux 网桥。

在这里插入图片描述

5.4. 注释工具

在这里插入图片描述

5.5. 执行工具栏

当按下 Start 按钮时,CORE 切换到 Execute 模式,CORE 窗口左侧的 Edit 工具栏被替换为 Execution 工具栏。下面是这个工具栏上的项目,从顶部开始。
在这里插入图片描述

6. 菜单

菜单栏沿着核心图形用户界面窗口的顶部运行,并提供对各种功能的访问。通过单击顶部的虚线,一些菜单是可分离的,例如 Widgets 菜单。

6.1. 文件菜单

File 菜单包含用于操作 .imn 配置文件的选项。通常,这些菜单项不应在执行模式下使用。

选项描述
New Session这将开始一个带有空画布的新会话。
Save保存当前拓扑。 如果尚未指定文件名,则会调用另存为对话框。
Save As调用另存为对话框以选择新的 .xml 文件以将当前配置保存在 XML 文件中。
Open调用“文件打开”对话框以选择要打开的新 XML 文件。
Recently used files在退出菜单命令上方是最近使用的文件列表(如果有的话)。 可以在“首选项”对话框中清除此列表。可以从“首选项”对话框中指定要保留在此列表中的文件数。单击列出的文件名之一以打开该配置文件。
Execute Python Script调用文件打开对话框以选择要运行和自动连接的 Python 脚本。做出选择后,将调用 Python 脚本选项对话框以允许添加命令行选项。Python 脚本必须创建一个新的 CORE 会话并将此会话添加到守护进程的会话列表中才能使其工作。
QuitQuit 命令应该用于退出 CORE GUI。如果当前处于执行模式,CORE 可能会提示终止。首选项和最近使用的文件列表被保存。

6.2. 编辑菜单

选项描述
Preferences调用首选项对话框。
Custom Nodes自定义节点创建对话框。
Undo(已禁用)尝试在编辑模式下撤消上一次编辑。
Redo(已禁用)尝试重做已撤消的编辑。
Cut, Copy, Paste, Delete用于剪切、复制、粘贴和删除选择。粘贴节点时,它们的节点编号会自动增加,并且现有链接会保留并分配新的 IP 地址。服务及其定制被复制到新节点,但应注意节点 IP 地址已更改,任何定制服务配置中都可能保留旧地址。 注释也可以被复制和粘贴。

6.3. 画布菜单

画布菜单提供与编辑画布相关的命令。

选项描述
Size/scale调用 Canvas Size 和 Scale 对话框,允许配置画布大小、比例和地理参考点。大小控件允许更改当前画布的宽度和高度,以像素或米为单位。该比例允许指定多少米相当于 100 像素。参考点控件指定用于在地理坐标系和笛卡尔坐标系之间转换的纬度、经度和高度参考点。通过单击 Save as default 选项,将使用这些属性创建所有新画布。默认画布大小也可以在“首选项”对话框中更改。
Wallpaper用于设置画布背景图像。

6.4. 查看菜单

“查看”菜单具有用于在画布上打开和关闭其显示的项目。

选项描述
Interface Names在链接上显示接口名称。
IPv4 Addresses在链接上显示 IPv4 地址。
IPv6 Addresses在链接上显示 IPv6 地址。
Node Labels显示节点名称。
Link Labels显示链接标签。
Annotations显示注释。
Canvas Grid显示画布网格。

6.5. 工具菜单

工具菜单列出了不同的实用程序功能。

选项描述
Find显示用于突出显示画布上节点的查找对话框。
Auto Grid自动在网格中布局节点。
IP addresses调用 IP 地址对话框以配置在自动寻址新接口时使用哪些 IPv4/IPv6 前缀。
MAC addresses调用 MAC 地址对话框以配置生成每个接口 MAC 地址时用作最低字节的起始编号。在 CORE 仿真之间建立隧道以防止 MAC 地址冲突时,应更改此值。

6.6. 小工具菜单

小部件是允许与正在运行的仿真进行交互的 GUI 元素。小部件通常会在模拟节点上自动运行命令,以报告某种类型的状态信息并将其显示在屏幕上。

6.6.1. 周期性小部件

这些小部件是从主小部件菜单中可用的小部件。可以同时运行多个这些小部件。事件循环在模拟运行时每秒触发一次。如果启用了这些 Widget 之一,则此时将调用其定期例程。 每个 Widget 都可能有一个配置对话框,也可以从 Widgets 菜单访问该对话框。

以下是一些标准小部件:

  • Adjacency 显示 Quagga 的 OSPFv2 和 OSPFv3 路由协议的路由器邻接状态。从每个路由器到相邻路由器的路由器 ID 中间画一条线。线的颜色基于 OSPF 邻接状态,例如双向或完整。vtysh 命令用于转储 OSPF 邻居信息。只绘制了一半的线,因为每个路由器相对于另一个路由器可能处于不同的邻接状态。

  • 吞吐量 使用从实现每个链路的 ng_pipe 网络图节点收集的统计数据,显示每个链路上每秒的千比特吞吐量。如果吞吐量超过某个阈值,链接将突出显示。对于向范围内所有节点广播数据的无线节点,吞吐率显示在节点旁边,如果超过阈值,节点将被圈起来。

6.6.2. 观察者小部件

这些小部件可以从小部件菜单的观察小部件子菜单和工具栏上的小部件工具中获得。一次只能使用一个 Observer Widget。在会话运行时将鼠标悬停在节点上以弹出有关该节点的信息显示。

可用的观察器小部件包括 IPv4 和 IPv6 路由表、套接字信息、正在运行的进程列表和 OSPFv2/v3 邻居信息。

观察者小部件可以由用户编辑和重新排列。从 Observer Widget 菜单中选择 Widgets->Observer Widgets->Edit Observers 将调用 Observer Widgets 对话框。将显示观察器小部件列表以及用于重新排列列表的向上和向下箭头。控件可用于重命名每个小部件、更改鼠标悬停期间运行的命令以及从列表中添加和删除项目。请注意,指定的命令应立即返回以避免 GUI 显示延迟。更改将保存到 CORE 配置目录中的 config.yaml 文件中。

6.7. 会话菜单

除了节点类型、注释、挂钩、服务器和选项等全局选项之外,会话菜单还有用于启动、停止和管理会话的条目。

选项描述
Sessions调用包含守护进程中活动 CORE 会话列表的 CORE Sessions 对话框。显示基本会话信息,例如名称、节点数、开始时间和缩略图。此对话框允许连接到不同的会话、关闭它们或启动新会话。
Servers调用 CORE 仿真服务器对话框进行配置。
Options提供每个会话的选项,例如要使用的 IPv4 前缀(如果有),用于控制网络保留会话目录的能力;和一个用于 SDT3D 支持的开/关开关。
Hooks调用 CORE Session Hooks 窗口,其中可以为特定会话状态配置脚本。会话状态在下表中定义。窗口顶部有一个已配置的钩子列表,左下方的按钮允许添加、编辑和删除钩子脚本。新建或编辑按钮将打开一个钩子脚本编辑窗口。钩子脚本是在主机上(不在虚拟节点内)调用的 shell 脚本。
6.7.1. 会话状态
状态描述
DefinitionGUI 使用它来告诉后端清除任何状态。
Configuration当用户按下开始按钮时,节点、链接和其他配置数据被发送到后端。 当用户自定义服务时也会达到此状态。
Instantiation在发送配置数据之后,就在创建节点之前。
Runtime所有节点和网络都已构建并正在运行。(这与运行先前命名的全局实验脚本的状态相同。)
Datacollect用户按下了停止按钮,但在服务停止和节点关闭之前。这是从节点收集日志文件和其他数据的好时机。
Shutdown所有节点和网络都已关闭并销毁。

6.8. 帮助菜单

7. 连接物理网络

CORE 的仿真网络实时运行,因此它们可以连接到实时物理网络。RJ45 工具和隧道工具有助于连接到现实世界。这些工具可从链路层节点菜单中获得。

将两个或多个 CORE 仿真连接在一起时,应避免 MAC 地址冲突。启动仿真时,CORE 会自动为接口分配 MAC 地址,从 00:00:00:aa:00:00 开始并递增底部字节。应使用菜单中的 Tools->MAC Addresses 选项在第二台 CORE 机器上更改起始字节。

7.1. RJ45 工具

CORE 中的 RJ45 节点代表真实 CORE 机器上的物理接口。任何现实世界的网络设备都可以连接到该接口并与 CORE 节点实时通信。

主要缺点是每个连接都需要一个物理接口。当物理接口分配给 CORE 时,它可能不会用于其他任何事情。另一个考虑因素是要连接的计算机或网络必须与 CORE 计算机位于同一位置。

要放置 RJ45 连接,请单击链路层节点工具栏上并从子菜单中选择 RJ45 工具。单击要连接到的节点附近的画布。例如,这可以是路由器、集线器、交换机或 WLAN。现在单击链接工具并在 RJ45 和其他节点之间绘制链接。RJ45 节点将显示“未分配”。双击 RJ45 节点以分配物理接口。将显示可用接口列表,可以通过双击列表中的名称来选择一个,或者可以在文本框中输入接口名称。

注意:当按下 Start 按钮来实例化拓扑时,分配给 RJ45 的接口将连接到 CORE 拓扑。 系统无法再使用该接口。

如果使用 802.1x VLAN,则可以在 CORE 内使用多个 RJ45 节点并分配到同一个物理接口。这允许使用比物理端口更多的 RJ45 节点,但连接到物理端口的(例如交换)硬件必须支持 VLAN 标记,并且可用带宽将被共享。

需要在 Linux 主机上创建单独的 VLAN 虚拟设备,然后将这些设备分配给 CORE 内部的 RJ45 节点。VLANning 实际上是在 CORE 之外执行的,所以当 CORE 仿真节点收到数据包时,VLAN 标记已经被移除。

下面是在 Linux 下创建 VLAN 设备的示例命令:

ip link add link eth0 name eth0.1 type vlan id 1
ip link add link eth0 name eth0.2 type vlan id 2
ip link add link eth0 name eth0.3 type vlan id 3

7.2. 隧道工具

隧道工具在 CORE 仿真或其他主机之间构建 GRE 隧道。当物理接口的数量有限或对等体位于不同的网络时,隧道会很有帮助。此外,物理接口不需要像 RJ45 工具那样专用于 CORE。

对等 GRE 隧道端点可能是另一台 CORE 机器或另一台支持 GRE 隧道的主机。放置隧道节点时,最初节点将显示“未分配”。此文本应替换为隧道对等方的 IP 地址。这是另一个 CORE 机器或物理机器的 IP 地址,而不是另一个虚拟节点的 IP 地址。

注意:注意 GRE 设备可能存在的 MTU(最大传输单元)问题。gretap 设备的接口 MTU 为 1,458 字节;当加入 Linux 网桥时,网桥的 MTU 变为 1,458 字节。如果其他网桥端口具有更高的 MTU(例如 1,500 字节),Linux 网桥将不会对大数据包执行分片。

GRE 密钥用于通过 GRE 隧道识别流。这允许在同一对隧道对等点之间存在多个 GRE 隧道。当多个隧道用于同一对等体时,应使用唯一编号。配置隧道对端时,请确保使用匹配的密钥。

以下是在 Linux 机器上构建隧道另一端的示例命令。在此示例中,CORE 中的路由器的虚拟地址为 10.0.0.1/24,CORE 主机的(真实)地址为 198.51.100.34/24。将与 CORE 机器连接的 Linux 机器可通过(真实)网络 198.51.100.76/24 访问。仿真路由器与隧道节点链接。在隧道节点配置对话框中,输入地址 198.51.100.76,键设置为 1。Linux 机器上的 gretap 接口将从虚拟路由器节点的子网中分配一个地址,10.0.0.2/24。

# these commands are run on the tunnel peer
sudo ip link add gt0 type gretap remote 198.51.100.34 local 198.51.100.76 key 1
sudo ip addr add 10.0.0.2/24 dev gt0
sudo ip link set dev gt0 up

现在虚拟路由器应该可以 ping Linux 机器了:

# from the CORE router node
ping 10.0.0.2

Linux 机器应该能够在 CORE 仿真中 ping 通:

# 2. from the tunnel peer
ping 10.0.0.1

要调试此配置,可以在 gretap 设备或 CORE 或 Linux 机器上的物理接口上运行 tcpdump。 确保防火墙没有阻止 GRE 流量。

7.3. 与主机通信

不一定可以从节点访问运行 CORE GUI 或守护程序的主机。例如,在节点上运行 X11 应用程序需要一些通信通道,以便应用程序与 X 服务器连接以进行图形显示。 有几种不同的方法可以从节点连接到主机,反之亦然。

7.3.1. 控制网络

通过主控制网络与主机连接的最快方式。

通过控制网络,主机可以在节点上启动 X11 应用程序。 要在节点上运行 X11 应用程序,可以在节点上启用 SSH 服务,从主机到节点可以使用带有 X11 转发的 SSH。

# SSH from host to node n5 to run an X11 app
ssh -X 172.16.0.5 xclock

请注意,coresendmsg 实用程序可用于节点向在主机上运行的 CORE 守护进程发送消息(如果在 /etc/core/core.conf 文件中设置了 listenaddr = 0.0.0.0)以与正在运行的仿真进行交互。例如,一个节点可能会移动自己或其他节点,或者根据某个节点状态更改其图标。

7.3.2. 其他网络

还有其他方法可以将主机与节点连接。 RJ45 工具可与虚拟接口结合使用以访问节点:

sudo modprobe dummy numdummies=1

主机上应出现一个 dummy0 接口。 使用分配给 dummy0 的 RJ45 工具,并将其链接到场景中的节点。 启动会话后,在主机上配置一个地址。

sudo ip link show type bridge
# determine bridge name from the above command
# assign an IP address on the same network as the linked node
sudo ip addr add 10.0.1.2/24 dev b.48304.34658

在上面显示的示例中,主机的地址为 10.0.1.2,链接到 RJ45 的节点的地址可能为 10.0.1.1。

8. 构建示例网络

8.1. 有线网络

使用链接工具创建有线网络以在两个节点之间绘制链接。 这会自动绘制一条代表以太网链路的红线,并在网络层节点上创建新接口。

双击链接以调用链接配置对话框。 可以在此处更改该链路的带宽、延迟、损耗和重复率参数。 您还可以修改链接的颜色和宽度,从而影响其显示。

提供链路层节点以对有线网络进行建模。 这些在实例化时不会创建单独的网络堆栈,而是使用 Linux 桥接实现。 它们是集线器、交换机和无线 LAN 节点。集线器将每个数据包从传入链路复制到每个连接的链路,而交换机的行为更像以太网交换机并跟踪连接的对等方的以太网地址,仅将单播流量转发到适当的端口。

8.2. 无线网络

无线 LAN 节点允许构建无线网络,其中移动节点会影响它们之间的连接。节点越近,节点对之间的连接越强,而节点越远,连接越弱。无线 LAN 或 WLAN 节点显示为小云。 WLAN 提供多个级别的无线仿真保真度,具体取决于建模需求。

WLAN 工具可以通过插件进行扩展,以获得不同级别的无线保真度。基本开/关范围是所有平台上可用的默认设置。其他插件以更高的复杂性和 CPU 使用率为代价提供更高的保真度。某些插件的可用性因平台而异。 有关无线型号类型的简要概述,请参阅下表。

模型类型支持平台保真度描述
基础on/offLinux以太网桥接与 ebtables
EMANEPlug-inLinux使用可插拔 MAC 和 PHY 无线电类型连接到 EMANE 仿真器的 TAP 设备

要快速构建无线网络,可以先在画布上放置几个路由器节点。如果安装了 Quagga MDR 软件,建议使用 mdr 节点类型以减少路由开销。接下来从链路层节点子菜单中选择 WLAN。首先通过双击云图标设置所需的 WLAN 参数。然后,可以在 WLAN 上单击鼠标右键并选择 Link to Selected 来链接所有选定的内容。

将路由器链接到 WLAN 会导致出现一个小天线,但没有绘制红色链接线。路由器可以有多个无线链路以及无线和有线链路(但是,需要手动配置路由重新分配。)mdr 节点类型将生成一个路由配置,该配置支持 OSPFv3 和 MANET 扩展。这是波音公司开发的 Quagga OSPFv3 扩展,可减少泛洪开销并优化移动自组织 (MANET) 网络的泛洪程序。

WLAN 的默认配置设置为使用基本范围模型。选择此模型会导致 CORE 守护程序根据屏幕像素计算节点之间的距离。使用范围滑块为无线网络设置屏幕像素的数字范围。当两个无线节点在彼此的范围内时,它们之间会画一条绿线并链接起来。比距离像素更远的两个无线节点没有链接。在执行模式下,用户可以通过点击和拖动无线节点来移动无线节点,无线链接将动态建立或断开。

EMANE 节点利用可用的 EMANE 模型用于无线网络。有关使用 EMANE 的详细信息,请参阅 EMANE 章节。

8.3. 移动脚本

CORE 有几种方法来编写移动性脚本。

选项描述
ns-2 script该脚本指定绝对位置或具有速度的航路点。位置由笛卡尔坐标给出。
CORE API外部实体可以通过发送带有更新的 X、Y 坐标的 CORE API 节点消息来移动节点; coresendmsg 实用程序允许 shell 脚本生成这些消息。
EMANE 事件有关使用 EMANE 脚本移动节点的详细信息,请参阅 EMANE。 位置信息通常以纬度、经度和海拔高度给出。

对于第一种方法,可以使用文本编辑器或 BonnMotion 等工具创建移动脚本,并使用 WLAN 配置对话框将脚本与其中一个无线设备关联。单击 ns-2 移动脚本按钮,然后在生成的 ns2script 配置对话框中设置移动脚本文件字段。

以下是为 10 个节点创建 BonnMotion 脚本的示例:

bm -f sample RandomWaypoint -n 10 -d 60 -x 1000 -y 750
bm NSFile -f sample
# use the resulting 'sample.ns_movements' file in CORE

当执行模式启动并且 WLAN 节点之一具有移动性脚本时,将出现移动性脚本窗口。 此窗口包含用于启动、停止和重置移动性脚本运行时间的控件。 循环复选框使脚本连续播放。 分辨率文本框包含每个计时器事件之间的毫秒数; 较低的值会使移动性看起来更平滑,但会消耗更多的 CPU 时间。

ns-2 移动性脚本的格式如下所示:

# nodes: 3, max time: 35.000000, max x: 600.00, max y: 600.00
$node_(2) set X_ 144.0
$node_(2) set Y_ 240.0
$node_(2) set Z_ 0.00
$ns_ at 1.00 "$node_(2) setdest 130.0 280.0 15.0"

前三行设置节点 2 的初始位置。上例中的最后一行使节点 2 以速度 15 向目的地 (130, 280) 移动。所有单位均为屏幕坐标,速度单位为每秒单位。在所有节点都到达其航路点后学习总脚本时间。最初,移动性脚本对话框中的时间滑块将不准确。

可以在 configs/ 目录中找到示例移动脚本(及其相关的拓扑文件)。

9. 警报

警报按钮位于 CORE GUI 状态栏的右下角。这将改变颜色以指示运行仿真的一个或多个问题。单击警报按钮将调用警报对话框。

警报对话框包含从 CORE 守护程序接收到的警报列表。警报具有时间、严重性级别、可选节点号和来源。当警报按钮为红色时,这表示一个或多个致命异常。具有致命严重性级别的警报表示无法创建一个或多个基本模拟部分,例如无法创建网桥或命名空间,或者无法为基于 EMANE 的网络启动 EMANE 进程。

单击警报会显示该异常的详细信息。异常源是一个文本字符串,用于帮助跟踪异常发生的位置;例如,“service:UserDefined”会出现在带有 UserDefined 服务的失败验证命令中。

对话框底部有一个按钮可用于清除例外列表。

10. 自定义拓扑外观

提供了多种注释工具来更改拓扑的呈现方式。可以使用文本工具添加字幕。椭圆和矩形可以在背景中绘制,有助于在视觉上将节点分组在一起。

在现场演示期间,标记工具可能有助于在画布上绘制可以快速擦除的临时注释。选择标记工具后,工具栏底部会出现一个大小和颜色调色板。标记只是临时的,不会保存在拓扑文件中。

基本节点图标可以替换为您选择的自定义图像。当图标使用具有透明背景的 GIF 或 PNG 格式时,图标显示效果最佳。要更改节点的图标,请双击该节点以调用其配置对话框,然后单击显示该节点当前图标的节点名称右侧的按钮。

可以使用“画布”菜单中的“墙纸…”选项设置画布的背景图像。图像可以居中、平铺或缩放以适合画布大小。现有的地形、地图或网络图可以用作背景,例如,在顶部绘制 CORE 节点。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值