dirsearch报告输出:多格式结果导出指南
本文全面介绍了dirsearch工具支持的各种报告输出格式,包括文件格式报告(Simple、Plain Text)、结构化数据报告(JSON、XML、CSV)、可视化报告(HTML、Markdown)以及数据库集成报告(SQLite、MySQL、PostgreSQL)。文章详细解析了每种格式的特点、适用场景、技术实现和性能影响,并提供了格式选择指南、高级使用技巧和性能优化建议,帮助用户根据不同需求选择合适的报告格式。
支持的报告格式全面解析
dirsearch提供了丰富多样的报告输出格式,从简单的文本格式到复杂的数据库集成,满足不同场景下的需求。这些报告格式可以分为三大类:文件格式报告、结构化数据报告和数据库报告。
文件格式报告
1. Simple格式(简单格式)
Simple格式是dirsearch的默认输出格式,提供简洁明了的扫描结果展示:
# SimpleReport类实现核心功能
class SimpleReport(FileReportMixin, BaseReport):
__format__ = "simple"
__extension__ = "txt"
def new(self):
return ""
@locked
def save(self, file, result):
content = self.parse(file)
content += f"{result.status} {result.length:7} {result.type:20} {result.url}\n"
self.write(file, content)
特点:
- 单行显示每个发现的结果
- 包含状态码、响应大小、内容类型和URL
- 适合快速查看和简单分析
2. Plain Text格式(纯文本格式)
Plain Text格式提供更详细的文本输出,包含完整的扫描信息:
class PlainTextReport(FileReportMixin, BaseReport):
__format__ = "plain"
__extension__ = "txt"
def new(self):
return f"Dirsearch Scan Report\n{'='*50}\n\n"
输出示例:
[200] 1.2KB text/html http://example.com/admin/
[301] 178B text/html http://example.com/login -> http://example.com/login/
[403] 1.5KB text/html http://example.com/config/
结构化数据报告
3. JSON格式
JSON格式提供机器可读的结构化数据,便于自动化处理和集成:
class JSONReport(FileReportMixin, BaseReport):
__format__ = "json"
__extension__ = "json"
def new(self):
return {
"info": {
"args": "dirsearch -u http://example.com -e php,html",
"time": "2024-01-15 10:30:45"
},
"results": []
}
数据结构:
{
"info": {
"args": "扫描命令参数",
"time": "扫描时间"
},
"results": [
{
"url": "http://example.com/admin.php",
"status": 200,
"contentLength": 1250,
"contentType": "text/html",
"redirect": null
}
]
}
优势:
- 完整的元数据信息
- 易于程序化解析
- 支持增量更新
4. XML格式
XML格式提供标准化的数据交换格式:
class XMLReport(FileReportMixin, BaseReport):
__format__ = "xml"
__extension__ = "xml"
def new(self):
return '''<?xml version="1.0" encoding="UTF-8"?>
<dirsearch-report>
<scan-info>
<command>{command}</command>
<timestamp>{time}</timestamp>
</scan-info>
<results>
</results>
</dirsearch-report>'''
5. CSV格式
CSV格式适合电子表格软件和数据分析工具:
class CSVReport(FileReportMixin, BaseReport):
__format__ = "csv"
__extension__ = "csv"
def new(self):
return [["URL", "Status", "Size", "Content Type", "Redirection"]]
CSV结构:
URL,Status,Size,Content Type,Redirection
http://example.com/,200,1250,text/html,
http://example.com/admin,301,178,text/html,http://example.com/admin/
可视化报告
6. HTML格式
HTML格式提供美观的网页可视化报告:
class HTMLReport(FileReportMixin, BaseReport):
__format__ = "html"
__extension__ = "html"
def generate(self, results):
# 使用Jinja2模板引擎生成HTML
return template.render(
metadata={"command": COMMAND, "date": START_TIME},
results=results,
)
HTML报告特性:
- 响应式设计,支持移动设备
- 颜色编码的状态码显示
- 可排序的表格列
- 搜索和过滤功能
7. Markdown格式
Markdown格式适合文档编写和知识库集成:
class MarkdownReport(FileReportMixin, BaseReport):
__format__ = "md"
__extension__ = "md"
def new(self):
return "# Dirsearch Scan Report\n\n"
Markdown输出示例:
## 扫描结果
| URL | 状态码 | 大小 | 内容类型 | 重定向 |
|-----|--------|------|----------|--------|
| http://example.com/ | 200 | 1.2KB | text/html | - |
| http://example.com/admin/ | 403 | 1.5KB | text/html | - |
数据库集成报告
8. SQLite格式
SQLite格式将结果存储到轻量级数据库中:
class SQLiteReport(SQLReportMixin, BaseReport):
__format__ = "sql"
__extension__ = "sqlite"
def get_create_table_query(self, table):
return (f'''CREATE TABLE "{table}" (
time DATETIME,
url TEXT,
status_code INTEGER,
content_length INTEGER,
content_type TEXT,
redirect TEXT
);''',)
数据库结构:
CREATE TABLE "scan_results" (
time DATETIME,
url TEXT,
status_code INTEGER,
content_length INTEGER,
content_type TEXT,
redirect TEXT
);
9. MySQL格式
MySQL格式支持直接写入MySQL数据库:
class MySQLReport(SQLReportMixin, BaseReport):
__format__ = "mysql"
def connect(self, database_url):
# 解析MySQL连接字符串
# scheme://user:password@host:port/database
return mysql.connector.connect(**connection_params)
连接格式:
mysql://username:password@localhost:3306/dirsearch_db
10. PostgreSQL格式
PostgreSQL格式支持PostgreSQL数据库集成:
class PostgreSQLReport(SQLReportMixin, BaseReport):
__format__ = "postgresql"
def connect(self, database_url):
# 使用psycopg2连接PostgreSQL
return psycopg2.connect(database_url)
连接格式:
postgresql://username:password@localhost:5432/dirsearch_db
格式选择指南
以下是各种报告格式的适用场景对比:
| 格式类型 | 文件扩展名 | 适用场景 | 优势 | 局限性 |
|---|---|---|---|---|
| Simple | .txt | 快速查看 | 简洁明了 | 无结构化数据 |
| Plain | .txt | 详细文本分析 | 完整信息 | 不易机器解析 |
| JSON | .json | 自动化处理 | 结构化数据 | 文件较大 |
| XML | .xml | 数据交换 | 标准化格式 | 冗长 |
| CSV | .csv | 电子表格 | 表格友好 | 无层次结构 |
| HTML | .html | 可视化展示 | 美观易读 | 需要浏览器 |
| Markdown | .md | 文档编写 | 格式统一 | 功能有限 |
| SQLite | .sqlite | 本地数据库 | 查询能力强 | 需要SQL知识 |
| MySQL | - | 团队协作 | 多用户访问 | 需要数据库 |
| PostgreSQL | - | 企业环境 | 高级功能 | 配置复杂 |
技术实现架构
dirsearch的报告系统采用工厂模式和混合类设计:
高级使用技巧
多格式同时输出
dirsearch支持同时生成多种格式的报告:
dirsearch -u http://example.com --format json,csv,html -o results
这将同时生成:
results.json- JSON格式报告results.csv- CSV格式报告results.html- HTML可视化报告
自定义输出文件名
使用模板变量自定义输出文件命名:
dirsearch -u http://example.com --format json -o "scan_{date}_{host}.{extension}"
支持的模板变量:
{datetime}- 完整时间戳{date}- 日期部分{host}- 目标主机名{scheme}- 协议方案{port}- 端口号{format}- 报告格式{extension}- 文件扩展名
数据库报告配置
对于数据库报告,需要配置连接字符串:
# MySQL示例
dirsearch -u http://example.com --format mysql -o "mysql://user:pass@localhost:3306/scans"
# PostgreSQL示例
dirsearch -u http://example.com --format postgresql -o "postgresql://user:pass@localhost:5432/scans"
性能考虑
不同报告格式对扫描性能的影响:
- 文本格式(Simple/Plain):性能影响最小,适合高速扫描
- 结构化格式(JSON/XML/CSV):中等性能影响,需要数据序列化
- 数据库格式:性能影响最大,需要网络I/O和事务处理
建议根据扫描规模和性能要求选择合适的报告格式。对于大规模扫描,可以先使用Simple格式进行快速扫描,然后根据需要生成其他格式的报告。
JSON/XML结构化数据导出
在现代网络安全扫描和渗透测试中,结构化数据导出功能对于结果分析、自动化处理和报告生成至关重要。dirsearch提供了强大的JSON和XML格式导出能力,使安全研究人员能够以机器可读的格式保存扫描结果,便于后续的数据处理和分析。
JSON格式导出详解
JSON(JavaScript Object Notation)格式以其轻量级、易读性和广泛的语言支持而成为数据交换的首选格式。dirsearch的JSON报告格式设计精巧,包含了完整的扫描元数据和详细的结果信息。
JSON数据结构分析
dirsearch的JSON报告采用分层结构设计,主要包含两个核心部分:
{
"info": {
"args": "python3 dirsearch.py -u https://example.com -e php,html",
"time": "2024-01-15T10:30:45.123456"
},
"results": [
{
"url": "https://example.com/admin.php",
"status": 200,
"contentLength": 1524,
"contentType": "text/html",
"redirect": ""
},
{
"url": "https://example.com/config.inc.php",
"status": 403,
"contentLength": 0,
"contentType": "text/html",
"redirect": ""
}
]
}
核心字段说明
| 字段名 | 数据类型 | 描述 | 示例值 |
|---|---|---|---|
| info.args | string | 执行的命令行参数 | "python3 dirsearch.py -u https://example.com" |
| info.time | string | 扫描开始时间戳 | "2024-01-15T10:30:45.123456" |
| results[].url | string | 发现的完整URL | "https://example.com/admin.php" |
| results[].status | integer | HTTP状态码 | 200, 404, 403 |
| results[].contentLength | integer | 响应内容长度 | 1524 |
| results[].contentType | string | 内容类型 | "text/html", "application/json" |
| results[].redirect | string | 重定向URL | "" 或 "https://example.com/login" |
使用示例
生成JSON格式报告的命令非常简单:
python3 dirsearch.py -u https://target.com -e php,html --format json -o scan_results.json
这个命令将对目标网站进行扫描,并将结果以JSON格式保存到scan_results.json文件中。
XML格式导出详解
XML(eXtensible Markup Language)格式以其严格的语法结构和强大的扩展性在企业环境中广泛应用。dirsearch的XML报告格式遵循标准的XML规范,便于与其他企业安全工具集成。
XML数据结构分析
dirsearch的XML报告采用层次化的标签结构:
<?xml version="1.0" encoding="UTF-8"?>
<dirsearchscan args="python3 dirsearch.py -u https://example.com" time="2024-01-15T10:30:45.123456">
<result url="https://example.com/admin.php">
<status>200</status>
<contentLength>1524</contentLength>
<contentType>text/html</contentType>
<redirect></redirect>
</result>
<result url="https://example.com/config.inc.php">
<status>403</status>
<contentLength>0</contentLength>
<contentType>text/html</contentType>
<redirect></redirect>
</result>
</dirsearchscan>
XML结构特点
使用示例
生成XML格式报告的命令与JSON类似:
python3 dirsearch.py -u https://target.com -e php,html --format xml -o scan_results.xml
数据处理与自动化集成
结构化数据格式的最大优势在于易于自动化处理。以下是一些常见的数据处理场景:
Python数据处理示例
import json
import xml.etree.ElementTree as ET
# 处理JSON报告
def process_json_report(file_path):
with open(file_path, 'r') as f:
data = json.load(f)
print(f"扫描时间: {data['info']['time']}")
print(f"命令行: {data['info']['args']}")
for result in data['results']:
if result['status'] == 200:
print(f"发现可访问资源: {result['url']}")
# 处理XML报告
def process_xml_report(file_path):
tree = ET.parse(file_path)
root = tree.getroot()
print(f"扫描参数: {root.attrib['args']}")
print(f"扫描时间: {root.attrib['time']}")
for result in root.findall('result'):
status = result.find('status').text
if status == '200':
url = result.attrib['url']
print(f"发现可访问资源: {url}")
# 使用示例
process_json_report('scan_results.json')
process_xml_report('scan_results.xml')
数据分析统计
import pandas as pd
# 将JSON转换为DataFrame进行分析
def analyze_scan_results(json_file):
with open(json_file, 'r') as f:
data = json.load(f)
df = pd.DataFrame(data['results'])
# 统计状态码分布
status_counts = df['status'].value_counts()
print("状态码统计:")
print(status_counts)
# 按内容类型分组
content_type_groups = df.groupby('contentType').size()
print("\n内容类型分布:")
print(content_type_groups)
return df
# 执行分析
results_df = analyze_scan_results('scan_results.json')
高级应用场景
自动化报告生成
def generate_security_report(json_file, template_file):
with open(json_file, 'r') as f:
scan_data = json.load(f)
# 提取关键信息
total_findings = len(scan_data['results'])
critical_findings = [r for r in scan_data['results'] if r['status'] == 200]
# 生成报告
report = f"""
安全扫描报告
============
扫描概要
--------
- 目标: {scan_data['info']['args']}
- 扫描时间: {scan_data['info']['time']}
- 总发现数: {total_findings}
- 可访问资源: {len(critical_findings)}
详细发现
--------
"""
for finding in critical_findings:
report += f"- {finding['url']} (状态码: {finding['status']})\n"
return report
与SIEM系统集成
import requests
def send_to_siem(json_file, siem_url):
with open(json_file, 'r') as f:
scan_data = json.load(f)
# 转换格式以适应SIEM系统
siem_payload = {
"event_type": "web_scan",
"timestamp": scan_data['info']['time'],
"scan_parameters": scan_data['info']['args'],
"findings": scan_data['results']
}
response = requests.post(siem_url, json=siem_payload)
return response.status_code
最佳实践建议
- 定期扫描与版本控制:将扫描结果纳入版本控制系统,便于追踪历史变化
- 自动化处理流水线:建立自动化的扫描、分析和报告生成流程
- 数据备份策略:定期备份重要的扫描结果数据
- 敏感信息处理:注意报告中可能包含的敏感信息,实施适当的数据保护措施
性能优化技巧
对于大型扫描任务,可以考虑以下优化策略:
# 使用流式处理处理大型JSON文件
def process_large_json_streaming(file_path):
with open(file_path, 'r') as f:
# 逐行处理大型JSON文件
for line in f:
if '"status": 200' in line:
# 提取并处理感兴趣的结果
pass
# 使用SAX解析器处理大型XML文件
def process_large_xml_sax(file_path):
class DirsearchHandler(ET.DefaultHandler):
def startElement(self, name, attrs):
if name == 'result' and 'url' in attrs:
print(f"发现资源: {attrs['url']}")
parser = ET.SAXParser()
parser.setContentHandler(DirsearchHandler())
parser.parse(file_path)
通过合理利用dirsearch的JSON和XML导出功能,安全团队可以构建强大的自动化安全监控和分析体系,显著提升Web应用程序安全评估的效率和效果。
HTML可视化报告生成
dirsearch的HTML报告功能提供了强大的可视化界面,让安全测试人员能够直观地分析和处理扫描结果。HTML报告不仅美观易用,还集成了丰富的交互功能,是现代Web应用安全测试的理想输出格式。
HTML报告的核心特性
HTML报告具备以下突出特性:
| 功能特性 | 描述 | 优势 |
|---|---|---|
| 实时搜索过滤 | 支持关键词搜索、状态码排除、内容长度过滤 | 快速定位关键结果 |
| 智能排序 | 点击表头可对URL、状态码、内容长度等字段排序 | 有序分析扫描数据 |
| 状态码颜色编码 | 不同状态码显示不同颜色(绿/蓝/黄/红) | 直观识别响应状态 |
| 批量URL打开 | 一键在新标签页打开所有发现的URL | 快速验证扫描结果 |
| 响应式设计 | 适配桌面和移动设备浏览 | 多平台兼容性 |
生成HTML报告的命令示例
使用dirsearch生成HTML报告非常简单,只需在扫描命令中添加--format html参数并指定输出文件:
# 基本HTML报告生成
python3 dirsearch.py -u https://example.com -e php,html --format html -o scan_report.html
# 带时间戳的自动化命名
python3 dirsearch.py -u https://target.com -w common.txt --format html -o "reports/{host}_{date}.{extension}"
# 多格式同时输出
python3 dirsearch.py -u https://test.org --format html,json,csv -o results.{extension}
HTML报告模板技术架构
dirsearch的HTML报告基于现代Web技术栈构建:
报告数据结构与处理流程
HTML报告的数据处理遵循清晰的流程:
高级功能使用技巧
1. 智能搜索过滤
HTML报告内置强大的搜索功能,支持多种过滤方式:
// 搜索包含"admin"的URL
在搜索框输入: admin
// 排除403状态码的结果
在状态排除框输入: 403
// 组合搜索:查找php文件但排除404状态
搜索框: php
状态排除框: 404
2. 数据导出与集成
虽然HTML报告本身是可视化格式,但可以轻松与其他工具集成:
# 将HTML报告转换为其他格式
# 使用pandoc转换HTML到Markdown
pandoc scan_report.html -o scan_report.md
# 提取HTML中的JSON数据用于进一步分析
grep -o '"resources": \[.*\]' scan_report.html | python -m json.tool > raw_data.json
3. 自定义模板开发
对于高级用户,可以自定义HTML报告模板:
# 自定义模板目录结构
custom_templates/
├── html_report_template.html
└── styles/
└── custom.css
# 修改config.ini指定自定义模板路径
[output]
html-template-path = /path/to/custom_templates
实战案例:大型扫描项目报告
在处理大型目标的扫描时,HTML报告展现出其强大优势:
# 扫描大型电商网站
python3 dirsearch.py -u https://large-ecom-site.com \
-w big_wordlist.txt \
-e php,asp,aspx,jsp,html,json \
-t 50 \
-r \
--format html \
-o "ecom_scan_{datetime}.html" \
--full-url
生成的报告能够处理数千条结果,通过分页和搜索功能保持流畅的用户体验。
性能优化建议
对于超大规模扫描项目,建议采用以下优化策略:
- 增量报告生成:使用
--session参数支持断点续扫 - 结果过滤:扫描时使用
-x参数排除无关状态码,减少报告数据量 - 定期清理:设置自动化脚本清理历史报告文件
- 数据库集成:对于企业级应用,考虑使用MySQL/PostgreSQL报告格式
HTML可视化报告不仅提供了美观的界面,更重要的是为安全团队提供了高效的结果分析工具。通过丰富的交互功能和智能数据处理,大大提升了Web应用安全测试的工作效率。
数据库(SQLite/MySQL)存储方案
dirsearch提供了强大的数据库存储功能,支持SQLite、MySQL和PostgreSQL三种主流数据库系统,让扫描结果能够持久化存储并便于后续分析。数据库存储方案特别适合需要长期保存扫描结果、进行批量分析或与其他系统集成的场景。
数据库存储架构设计
dirsearch采用统一的SQL报告混合类(SQLReportMixin)作为数据库存储的核心架构,所有数据库报告类都继承自这个基类,确保了代码的一致性和可维护性。
统一的数据表结构
所有数据库类型都使用相同的表结构设计,确保数据一致性:
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| time | DATETIME/TIMESTAMP | 扫描时间戳 |
| url | TEXT | 完整的请求URL |
| status_code | INTEGER | HTTP状态码 |
| content_length | INTEGER | 响应内容长度 |
| content_type | TEXT | 响应内容类型 |
| redirect | TEXT | 重定向URL(如果有) |
SQLite本地数据库方案
SQLite是dirsearch的默认数据库选项,适合单机使用和快速部署:
特性优势:
- 零配置,无需安装数据库服务器
- 单个文件存储,便于备份和迁移
- 支持并发访问(check_same_thread=False)
- 自动完整性检查
使用示例:
# 生成SQLite数据库报告
python3 dirsearch.py -u https://example.com -e php,html --format sqlite -o scan_results.sqlite
# 自定义输出文件名和表名
python3 dirsearch.py -u https://example.com --format sqlite \
-o "reports/{host}_{date}.sqlite" \
--output-sql-table "scan_{datetime}"
SQLite连接配置:
def connect(self, file):
FileUtils.create_dir(FileUtils.parent(file))
conn = sqlite3.connect(file, check_same_thread=False)
# 数据库完整性验证
try:
conn.cursor().execute("PRAGMA integrity_check")
except sqlite3.DatabaseError:
raise Exception(f"{file} is not empty or is not a SQLite database")
else:
return conn
MySQL远程数据库方案
MySQL适合团队协作和集中式存储,支持多用户并发访问:
特性优势:
- 支持远程连接和集中管理
- 高性能并发处理
- 完善的安全机制
- 支持数据库集群
连接URL格式:
mysql://[username:password@]host[:port]/database-name
使用示例:
# 连接到MySQL数据库
python3 dirsearch.py -u https://example.com --format mysql \
--mysql-url "mysql://scanuser:password@db.example.com:3306/security_scans" \
--output-sql-table "web_scan_results"
# 使用配置文件设置MySQL连接
# 在config.ini中配置:
# mysql-url = mysql://user:password@localhost/security_db
MySQL连接验证:
def is_valid(self, url):
return url.startswith("mysql://")
def connect(self, url):
if not self.is_valid(url):
raise InvalidURLException("Provided MySQL URL does not start with mysql://")
parsed = urlparse(url)
conn = mysql.connector.connect(
host=parsed.hostname,
port=parsed.port or 3306,
user=parsed.username,
password=parsed.password,
database=parsed.path.lstrip("/"),
connection_timeout=DB_CONNECTION_TIMEOUT, # 45秒超时
)
conn.sql_mode = [SQLMode.ANSI_QUOTES] # 使用ANSI引号模式
return conn
数据库性能优化策略
dirsearch在数据库存储方面实现了多项性能优化:
连接池管理:
# 连接复用机制,减少连接开销
_conn = None
def get_connection(self, database):
if not self._reuse:
return self.connect(database)
if not self._conn:
self._conn = self.connect(database)
return self._conn
批量事务处理:
- 使用自动提交模式,每条记录即时提交
- 支持连接复用,减少连接建立开销
- 线程安全的数据访问机制
表管理策略:
- 每次扫描前自动删除旧表(DROP TABLE IF EXISTS)
- 重新创建标准化的数据表结构
- 支持自定义表名模板变量
高级配置选项
自定义表名模板: dirsearch支持使用变量来自定义数据表名称:
# 使用模板变量动态生成表名
--output-sql-table "scan_{scheme}_{host}_{date}"
# 可用变量:
# {datetime} - 扫描时间(格式:YYYY-MM-DD_HH-MM-SS)
# {date} - 扫描日期(格式:YYYY-MM-DD)
# {host} - 目标主机名
# {scheme} - 协议(http/https)
# {port} - 端口号
# {format} - 输出格式
配置文件设置:
在config.ini中可以预设数据库连接参数:
[output]
mysql-url = mysql://user:password@localhost/database
postgres-url = postgres://user:password@localhost/database
output-sql-table = {scheme}_{host}:{port}
错误处理与恢复机制
连接超时控制:
DB_CONNECTION_TIMEOUT = 45 # 45秒连接超时
异常处理策略:
- 数据库连接失败抛出CannotConnectException
- URL格式错误抛出InvalidURLException
- 文件存在冲突抛出FileExistsException
- SQL执行错误自动回滚事务
数据完整性保障:
- 自动验证数据库文件完整性(SQLite)
- 支持数据库连接重试机制
- 事务回滚保证数据一致性
实际应用场景
安全审计跟踪:
# 定期扫描并将结果存储到数据库进行趋势分析
python3 dirsearch.py -u https://company.com --format mysql \
--mysql-url "mysql://audit:pass@audit-db/security_audit" \
--output-sql-table "weekly_scan_{date}"
团队协作扫描:
# 多团队成员共享扫描结果
python3 dirsearch.py -u https://target.com --format postgresql \
--postgres-url "postgres://team:secret@shared-db/scans" \
--output-sql-table "project_alpha_{datetime}"
自动化报告生成: 结合数据库存储,可以轻松实现:
- 历史扫描结果对比分析
- 漏洞趋势统计报表
- 扫描覆盖率评估
- 自动化告警通知
数据库存储方案为dirsearch提供了企业级的扫描结果管理能力,通过标准化的SQL接口,使得扫描数据能够无缝集成到现有的安全运维体系中。
总结
dirsearch提供了丰富多样的报告输出格式,从简单的文本格式到复杂的数据库集成,满足了不同场景下的需求。通过本文的全面解析,用户可以了解到各种格式的特点、优势和使用方法,从而根据实际需求选择合适的报告格式。无论是快速查看扫描结果、进行自动化处理、生成可视化报告还是与数据库集成,dirsearch都能提供强大的支持。合理利用这些报告格式,可以显著提升Web应用程序安全评估的效率和效果。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



