当前位置: 首页 > news >正文

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析

相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点个关注不迷路!!!

1. 简介:

这款“IP网段扫描工具”是网络管理员和普通用户的必备神器,轻松帮助你检查每个网段下的IP是否在线,避免了手动逐一检查的繁琐。只需要输入网段,它便会自动生成所有IP,快速对每个IP进行Ping检测,实时展示结果并提供详细的在线/掉线统计。工具的并发扫描方式,确保了高效性,让扫描过程变得既快速又流畅。

不仅如此,它还为用户提供了丰富的功能,像是清晰的进度条、动态更新的表格、日志输出以及导出功能,都让整个扫描过程充满了互动感与可视化,数据一目了然。用户还可以随时中止扫描,避免浪费时间。

无论是日常网络维护、设备故障排查,还是批量IP监测,这款工具都能帮助你轻松搞定。简洁、实用、快速,让网络管理变得更智能,更高效。

功能模块介绍:

输入网段与IP扫描:

  • 用户可以通过输入网段(如 192.168.1,192.168.2)来启动扫描。工具会自动生成每个网段下的所有IP,并开始对每个IP进行Ping操作,快速检测其在线状态。

并发Ping操作:

  • 为了提高效率,工具在扫描时采用并发技术,最多同时检测20个IP,通过异步执行的方式提高扫描速度。

进度条:

  • 用户可以清晰看到当前扫描的进度,实时更新的进度条让等待变得更加轻松,不再觉得枯燥。

表格展示:

  • 扫描结果会自动填充到表格中,最多每行显示10个IP地址。在线IP用绿色标记,掉线IP用灰色标记,帮助用户一目了然地看到每个IP的状态。

日志输出与导出:

  • 所有扫描的日志和结果会被记录到文本框中,并且可以选择将“在线IP”或“掉线IP”导出为文本文件,或者导出完整的日志记录,方便后续查看或备份。

停止扫描:

  • 如果扫描过程中需要中断,用户可以随时点击“停止扫描”按钮,立即停止当前的Ping任务,并恢复按钮状态。

导出功能:

用户可以选择导出不同类型的数据(在线IP、掉线IP或日志记录),并将数据保存为文本文件,方便后期分析和记录。

2. 运行效果:

请添加图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.总 结:

这款“IP网段扫描工具”通过图形界面和异步技术,简化了IP扫描的操作流程,提升了扫描效率。它不仅能高效检测每个网段的IP状态,还能实时反馈扫描进度,并提供导出功能,方便用户进一步分析。无论是在家庭网络管理,还是公司网络安全维护中,都能作为得力助手。简单易用的界面和丰富的功能,让网络管理不再是繁琐的工作,反而带来了一些轻松的乐趣!

4. 相关源码:

import sys
import asyncio
import subprocess
from queue import Queue
from PyQt5.QtCore import QThread, pyqtSignal, QTimer
from PyQt5.QtGui import QColor, QFont
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit, QTextEdit, QProgressBar, QTableWidget, QTableWidgetItem, QMessageBox, QFileDialog, QInputDialogclass PingThread(QThread):# 定义信号result_signal = pyqtSignal(str, str)  # 传递IP和状态progress_signal = pyqtSignal(int)  # 用于更新进度条的信号stop_signal = pyqtSignal()  # 用于停止线程的信号def __init__(self, ip_queue, total_ips, parent=None):super().__init__(parent)self.ip_queue = ip_queueself.total_ips = total_ipsself.pinged_ips = 0  # 已ping的IP数量self.stop_requested = False  # 停止请求标志位self.online_ips = []  # 在线IP列表self.offline_ips = []  # 掉线IP列表def run(self):loop = asyncio.new_event_loop()asyncio.set_event_loop(loop)loop.run_until_complete(self.ping_ips())async def ping_ips(self):tasks = []while not self.ip_queue.empty() and not self.stop_requested:ip = self.ip_queue.get()task = asyncio.create_task(self.ping(ip))tasks.append(task)if len(tasks) >= 20:  # 每次最多并发20个请求await asyncio.gather(*tasks)tasks.clear()if tasks:await asyncio.gather(*tasks)async def ping(self, ip):res = await asyncio.to_thread(self.ping_single, ip)status = "在线" if res == 0 else "掉线"self.result_signal.emit(ip, status)  # 发送IP和状态信号# 根据状态将IP添加到对应的列表if status == "在线":self.online_ips.append(ip)else:self.offline_ips.append(ip)self.pinged_ips += 1progress = int((self.pinged_ips / self.total_ips) * 100)  # 计算当前进度self.progress_signal.emit(progress)  # 发送进度信号def ping_single(self, ip):"""使用subprocess调用ping命令"""return subprocess.call(f'ping -n 1 -w 5 {ip}', stdout=subprocess.PIPE)def stop(self):self.stop_requested = True  # 设置停止标志class PingApp(QWidget):def __init__(self):super().__init__()self.setWindowTitle("IP网络扫描工具")self.setGeometry(200, 200, 800, 600)# 设置最小宽度为1064像素self.setMinimumWidth(1064)# 设置全局字体为Segoe UIfont = QFont("Segoe UI", 10)self.setFont(font)# UI控件self.layout = QVBoxLayout()self.status_label = QLabel("请输入待检测的网段列表 (例如:192.168.1, 192.168.2,支持多网段扫描,网段之间用英文','隔开)", self)self.layout.addWidget(self.status_label)self.input_field = QLineEdit(self)self.layout.addWidget(self.input_field)# 创建水平布局来放置开始、停止和导出按钮self.button_layout = QHBoxLayout()# 修改按钮背景色为淡蓝色self.start_button = QPushButton("开始扫描", self)self.start_button.setStyleSheet("background-color: lightblue;")self.start_button.clicked.connect(self.start_ping)self.button_layout.addWidget(self.start_button)self.stop_button = QPushButton("停止扫描", self)self.stop_button.setStyleSheet("background-color: lightblue;")self.stop_button.clicked.connect(self.stop_ping)self.stop_button.setEnabled(False)  # 初始时不可用self.button_layout.addWidget(self.stop_button)self.export_button = QPushButton("导出数据", self)self.export_button.setStyleSheet("background-color: lightblue;")self.export_button.clicked.connect(self.export_data)self.button_layout.addWidget(self.export_button)# 将按钮布局添加到主布局中self.layout.addLayout(self.button_layout)# 添加文本输出区域self.output_text = QTextEdit(self)self.layout.addWidget(self.output_text)# 设置最大高度来缩减文本显示区域的高度self.output_text.setMaximumHeight(200)  # 设置最大高度为200# 添加进度条self.progress_bar = QProgressBar(self)self.progress_bar.setRange(0, 100)self.layout.addWidget(self.progress_bar)# 添加表格self.table_widget = QTableWidget(self)self.layout.addWidget(self.table_widget)self.setLayout(self.layout)def start_ping(self):user_input = self.input_field.text().strip()if not user_input:self.output_text.append("输入无效,请输入网段列表!")return# 校验输入是否是有效的网段格式if not self.is_valid_ip_prefix(user_input):self.output_text.append("无效的网段格式,请确保输入的是有效网段")returnself.output_text.append(f"开始检测:{user_input}")self.start_button.setEnabled(False)self.stop_button.setEnabled(True)  # 启用停止按钮ip_queue = Queue()ip_prefixes = user_input.split(',')  # 支持多个网段total_ips = len(ip_prefixes) * 256  # 每个网段包含256个IP地址# 遍历多个网段并生成IP地址for prefix in ip_prefixes:prefix = prefix.strip()for i in range(256):ip = f"{prefix}.{i}"  # 生成每个网段对应的IPip_queue.put(ip)# 动态设置表格的行数和列数rows = (total_ips + 9) // 10  # 计算需要的行数,最多每行10个IPself.table_widget.setRowCount(rows)  # 设置表格的行数self.table_widget.setColumnCount(10)  # 每行10个IP# 填充表格ip_index = 0for prefix in ip_prefixes:  # 遍历每个网段prefix = prefix.strip()for i in range(256):if ip_index < total_ips:ip = f"{prefix}.{i}"  # 生成完整的IP地址row = ip_index // 10  # 计算行数col = ip_index % 10  # 计算列数self.table_widget.setItem(row, col, QTableWidgetItem(ip))  # 设置表格单元格的IPip_index += 1# 启动ping线程self.ping_thread = PingThread(ip_queue, total_ips)self.ping_thread.result_signal.connect(self.update_result)self.ping_thread.progress_signal.connect(self.update_progress)  # 连接进度更新信号self.ping_thread.finished.connect(self.on_ping_finished)self.ping_thread.start()def stop_ping(self):if self.ping_thread.isRunning():self.ping_thread.stop()  # 请求停止线程self.output_text.append("检测已停止")self.start_button.setEnabled(True)self.stop_button.setEnabled(False)  # 停止后禁用停止按钮def export_data(self):# 使用 QInputDialog.getItem() 来显示选择框export_type, ok = QInputDialog.getItem(self, "选择导出项", "选择导出数据项", ["在线IP", "掉线IP", "日志记录"], 0, False)if ok:if export_type == "在线IP":self.export_file("在线IP.txt")elif export_type == "掉线IP":self.export_file("掉线IP.txt")elif export_type == "日志记录":self.export_log()def export_file(self, file_name):# 弹出文件保存对话框,选择保存路径file_path, _ = QFileDialog.getSaveFileName(self, f"保存{file_name}", file_name, "文本文件 (*.txt)")if file_path:# 使用内存列表替代读取文件ip_list = self.get_ip_list(file_name)# 排序IP地址(从小到大)ip_list.sort(key=self.ip_to_tuple)# 写入排序后的文件,每个IP地址按行分开with open(file_path, 'w') as f:for ip in ip_list:f.write(f"{ip}\n")  # 每个IP地址后加上换行符QMessageBox.information(self, "导出成功", f"{file_name} 已成功导出到 {file_path}")def export_log(self):# 弹出文件保存对话框,选择保存日志路径file_path, _ = QFileDialog.getSaveFileName(self, "保存日志文件", "日志记录.txt", "文本文件 (*.txt)")if file_path:with open(file_path, 'w') as f:f.write(self.output_text.toPlainText())QMessageBox.information(self, "导出成功", f"日志记录已成功导出到 {file_path}")def get_ip_list(self, file_name):# 根据文件名从内存中获取相应的IP列表ip_list = []if file_name == "在线IP.txt":ip_list = self.ping_thread.online_ips  # 获取在线IP列表elif file_name == "掉线IP.txt":ip_list = self.ping_thread.offline_ips  # 获取掉线IP列表return ip_listdef ip_to_tuple(self, ip):# 将IP地址转换为元组,用于排序return tuple(map(int, ip.split('.')))def is_valid_ip_prefix(self, ip_prefix):# 简单的IP前缀校验(支持多个网段)parts = ip_prefix.split(',')if len(parts) < 1:return Falsefor part in parts:part = part.strip()if not self.is_valid_single_ip_prefix(part):return Falsereturn Truedef is_valid_single_ip_prefix(self, ip_prefix):# 校验单一网段是否有效(例如:192.168.1)parts = ip_prefix.split('.')if len(parts) != 3:return Falsefor part in parts:if not part.isdigit() or not 0 <= int(part) <= 255:return Falsereturn True  # 必须输入三个部分def update_result(self, ip, status):# 更新表格单元格的背景色for row in range(self.table_widget.rowCount()):for col in range(self.table_widget.columnCount()):item = self.table_widget.item(row, col)if item and item.text() == ip:if status == "在线":item.setBackground(QColor('green'))  # 使用QColor类else:item.setBackground(QColor('gray'))  # 使用QColor类# 在文本输出区域显示每个IP的状态self.output_text.append(f"{ip} - {status}")def update_progress(self, progress):self.progress_bar.setValue(progress)  # 更新进度条的值def on_ping_finished(self):# 计算在线和掉线主机数量online_count = len(self.ping_thread.online_ips)offline_count = len(self.ping_thread.offline_ips)# 显示检测完成信息和统计self.output_text.append(f"扫描完成!")self.output_text.append(f"在线主机数: {online_count}")self.output_text.append(f"掉线主机数: {offline_count}")self.start_button.setEnabled(True)self.stop_button.setEnabled(False)  # 禁用停止按钮# 弹出完成提示框QMessageBox.information(self, "提示", "扫描已完成!")if __name__ == "__main__":app = QApplication(sys.argv)window = PingApp()window.show()sys.exit(app.exec_())

相关文章:

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析

Python 轻松扫描&#xff0c;快速检测&#xff1a;高效IP网段扫描工具全解析 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着…...

go入门Windows环境搭建

简介 Go 即 Golang&#xff0c;是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。 根据 Go 语言开发者自述&#xff0c;近 10 多年&#xff0c;从单机时代的 C 语言到现在互联网时代的 Java&#xff0c;都没有令人满意的开发语言&#xff0c;而 C往往给人的感觉是&a…...

安装Ubuntu22.04

1.引用教程 如何安装Ubuntu Server 22.04 LTS_ubuntu22.04 server-CSDN博客 2.空间分配 要使用 docker 比较多所以分别的 docker 空间大...

对比OpenAI的AI智能体Operator和智谱的GLM-PC,它们有哪些不同?

OpenAI 的 AI 智能体 Operator 和智谱的 GLM-PC 有以下不同&#xff1a; 功能侧重 Operator&#xff1a;主要侧重于网页操作&#xff0c;能在网页上模拟人类进行点击、输入等操作&#xff0c;完成如预订旅行住宿、餐厅预约、在线购物、在 Arxiv 上进行论文分类搜索等任务123。…...

Git Bash 配置 zsh

博客食用更佳 博客链接 安装 zsh 安装 Zsh 安装 Oh-my-zsh github仓库 sh -c "$(curl -fsSL https://install.ohmyz.sh/)"让 zsh 成为 git bash 默认终端 vi ~/.bashrc写入&#xff1a; if [ -t 1 ]; thenexec zsh fisource ~/.bashrc再重启即可。 更换主题 …...

美格智能AIMO智能体+DeepSeek-R1模型,AI应用的iPhone时刻来了

导语&#xff1a; 当AI大模型从云端下沉至终端设备&#xff0c;一场关于效率、隐私与智能化的革命悄然展开。作为全球领先的无线通信模组及解决方案提供商&#xff0c;美格智能凭借其高算力AI模组矩阵与端侧大模型部署经验&#xff0c;结合最新发布的AIMO智能体产品&#xff0…...

Python标准库 - os (1) 环境变量、进程的用户和组

文章目录 1 访问和修改环境变量1.1 访问环境变量1.2 修改环境变量 2 进程的用户和组2.1 进程的ID2.2 进程的用户2.3 进程组 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。 这里整理了环境变量、进程的用户和用户组相关的控制方法。 参考…...

QT 通过ODBC连接数据库的好方法:

效果图&#xff1a; PWD使用自己的&#xff0c;我的这是自己的&#xff0c;所以你用不了。 以下是格式。 // 1. 设置数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QODBC");// 建立和QMYSQL数据库的连接 // 设置数据库连接名称&#xff08;DSN&am…...

机器学习 - 初学者需要弄懂的一些线性代数的概念

一、单位矩阵 在数学中&#xff0c;单位矩阵是一个方阵&#xff0c;其主对角线上的元素全为1&#xff0c;其余元素全为0。单位矩阵在矩阵乘法中起到类似于数字1在数值乘法中的作用&#xff0c;即任何矩阵与单位矩阵相乘&#xff0c;结果仍为原矩阵本身。 单位矩阵的定义&…...

WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据

简介 在这个系列的上一篇文章中&#xff0c;我们介绍了ESP32 I2S音频总线的相关知识&#xff0c;简要了解了什么是I2S总线、它的通信格式&#xff0c;以及相关的底层API函数。没有看过上篇文章的可以点击文章进行回顾&#xff1a; ESP32 I2S音频总线学习笔记&#xff08;一&a…...

本地大模型编程实战(03)语义检索(2)

文章目录 准备按批次嵌入加载csv文件&#xff0c;分割文档并嵌入测试嵌入效果总结代码 上一篇文章&#xff1a; 本地大模型编程实战(02)语义检索(1) 详细介绍了如何使用 langchain 实现语义检索&#xff0c;为了演示方便&#xff0c;使用的是 langchain 提供的内存数据库。 在实…...

LabVIEW橡胶动态特性测试系统

本文介绍了一个利用LabVIEW软件和NI高速数据采集设备构建的橡胶动态特性测试系统。该系统实现了橡胶材料动态性能的精确测量&#xff0c;并通过虚拟仪器技术&#xff0c;提高了测试数据的处理效率和准确性。系统支持实时数据处理和多种信号的动态分析&#xff0c;适用于工业和科…...

SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识

1. Spring Boot项目构建 1.1. 简介 基于官方网站https://start.spring.io进行项目的创建. 1.1.1. 简介 Spring Boot是基于Spring4框架开发的全新框架&#xff0c;设计目的是简化搭建及开发过程&#xff0c;并不是对Spring功能上的增强&#xff0c;而是提供了一种快速使用Spr…...

使用 Vue 3 的 watchEffect 和 watch 进行响应式监视

Vue 3 的 Composition API 引入了 <script setup> 语法&#xff0c;这是一种更简洁、更直观的方式来编写组件逻辑。结合 watchEffect 和 watch&#xff0c;我们可以轻松地监视响应式数据的变化。本文将介绍如何使用 <script setup> 语法结合 watchEffect 和 watch&…...

Vue.js 高级组件开发

Vue.js 高级组件开发&#xff1a;构建一个智能动态表单生成器 ——从可复用架构到性能优化的全链路实践 引言&#xff1a;为什么需要高级组件&#xff1f; 在现代前端开发中&#xff0c;组件不仅是UI的封装&#xff0c;更是业务逻辑的载体。一个“高级”Vue组件应当具备&…...

React应用深度优化与调试实战指南

一、渲染性能优化进阶 1.1 精细化渲染控制 typescript 复制 // components/HeavyComponent.tsx import React, { memo, useMemo } from react;interface Item {id: string;complexData: {// 复杂嵌套结构}; }const HeavyComponent memo(({ items }: { items: Item[] }) &g…...

Linux 内核学习(4) --- devfreq 动态调频框架

目录 Linux devfreq 简介核心数据结构devfreq_dev_profile 结构体devfreq_governor 结构体devfreq 结构体 工作流程devFreq framework 初始化governor 初始化devfreq Device 注册动态变频的实现device_unregister 流程 用户空间节点参考文章 Linux devfreq 简介 现在的 Soc 由…...

Spring Boot 无缝集成SpringAI的函数调用模块

这是一个 完整的 Spring AI 函数调用实例&#xff0c;涵盖从函数定义、注册到实际调用的全流程&#xff0c;以「天气查询」功能为例&#xff0c;结合代码详细说明&#xff1a; 1. 环境准备 1.1 添加依赖 <!-- Spring AI OpenAI --> <dependency><groupId>o…...

Ansible自动化运维实战--yaml的使用和配置(7/8)

文章目录 一、YAML 基本语法1.1. 缩进1.2. 注释1.3. 列表1.4. 字典 二、Ansible 中 YAML 的应用2.1. Ansible 剧本&#xff08;Playbooks&#xff09;2.2. 变量定义2.3. 角色&#xff08;Roles&#xff09;2.4. Inventory 文件2.5. 数据类型2.6. 引用变量 在 Ansible 里&#x…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...