Wireshark 使用教程:网络分析从入门到精通
一、引言
在网络技术的广阔领域中,网络协议分析是一项至关重要的技能。Wireshark 作为一款开源且功能强大的网络协议分析工具,被广泛应用于网络故障排查、网络安全检测以及网络协议研究等诸多方面。本文将深入且详细地介绍 Wireshark 的使用方法,帮助你快速掌握这一强大工具。
二、Wireshark 简介
Wireshark 是一个免费且开源的网络协议分析器,它能够深入捕获和分析网络数据包。无论是学习网络技术的新手,还是经验丰富的网络工程师,Wireshark 都能为他们提供深入了解网络运行机制的能力。通过直观的图形界面,用户可以轻松地查看网络数据包的详细信息,包括源地址、目的地址、协议类型以及数据包内容等。
三、安装与启动
(一)安装
- 首先,访问 Wireshark 官方网站(https://www.wireshark.org/download.html),根据你的操作系统下载对应的安装包。Wireshark 支持 Windows、Mac OS、Linux 等多种主流操作系统,确保选择与你系统匹配的版本。
- 下载完成后,运行安装程序,按照安装向导的提示进行操作。在安装过程中,你会遇到一些可选择的设置:
-
- 安装路径:默认情况下,Wireshark 会安装在系统盘的特定目录下,如 Windows 系统的 “C:\Program Files\Wireshark” 。你可以点击 “浏览” 按钮选择其他磁盘和目录进行安装,比如安装在空间充足的 D 盘,以避免系统盘空间不足影响系统性能。
-
- 组件选择:通常有 Wireshark 主程序、TShark(Wireshark 的命令行版本)、USBpcap(用于捕获 USB 数据包,一般用户较少用到)等组件。一般保持默认勾选的组件即可满足大多数用户的日常使用需求。若你对命令行操作有一定了解且可能会在命令行环境下使用 Wireshark,可勾选 TShark 组件。完成设置后,直接点击 “下一步” 即可完成安装。
(二)启动
安装完成后,在开始菜单(Windows 系统)或应用程序列表(Mac 系统)中找到 Wireshark 的快捷方式,点击即可启动。启动后,你将看到 Wireshark 的主界面。
四、界面介绍
(一)菜单栏
菜单栏包含了各种操作选项,如文件的打开、保存,数据包的捕获、分析设置等。通过菜单栏,你可以完成几乎所有的 Wireshark 操作。例如:
- 文件(File):在此菜单下可以进行打开已有的捕获文件(.pcapng 或.pcap 格式)、保存当前捕获的数据包、打印数据包等操作。
- 捕获(Capture):包含开始捕获、停止捕获、设置捕获选项等功能。
- 分析(Analyze):用于设置分析相关的参数,如启用或禁用特定协议的分析、设置显示过滤器等。
(二)工具栏
工具栏提供了一些常用功能的快捷按钮,例如开始捕获、停止捕获、打开已捕获文件等。这些按钮使得你可以快速执行常见操作,提高工作效率。其中:
- 绿色三角形图标为 “开始捕获” 按钮,点击它可直接开始在选定接口上捕获数据包。
- 红色正方形图标是 “停止捕获” 按钮,用于停止正在进行的数据包捕获。
- 文件夹图标用于 “打开已捕获文件”,方便你快速加载之前保存的数据包文件进行分析。
(三)接口列表
在 Wireshark 主界面的中间部分,你会看到一个接口列表。这里列出了计算机上所有可用的网络接口,包括以太网接口、无线网络接口等。在进行数据包捕获之前,需要选择一个要捕获数据包的接口。每个接口都有其对应的名称和描述,例如 “Ethernet0” 可能是计算机的有线网络接口,“Wi-Fi” 则是无线网络接口。选择时需根据实际需要捕获数据包的网络环境来确定,如你要分析家庭无线网络中的数据包,就应选择 “Wi-Fi” 接口。
(四)数据包列表窗格
当你开始捕获数据包后,捕获到的数据包会以列表形式显示在这个窗格中。每个数据包都有一行记录,显示了数据包的编号、捕获时间、源地址、目的地址、协议类型以及数据包的简要信息。其中:
- 数据包编号:按照捕获的先后顺序对数据包进行编号,方便在大量数据包中定位特定数据包。
- 捕获时间:精确记录数据包被捕获的时间,对于分析网络事件的时间顺序非常重要。
- 源地址和目的地址:显示数据包发送方和接收方的 IP 地址或 MAC 地址,有助于判断数据的流向和通信双方。
- 协议类型:明确数据包所使用的网络协议,如 TCP、UDP、HTTP、DNS 等。
- 数据包简要信息:根据协议类型显示数据包的关键信息,如 HTTP 数据包可能显示请求的 URL 或响应状态码。
(五)数据包详细信息窗格
当你在数据包列表窗格中选择一个数据包时,这个窗格会显示该数据包的详细信息。包括数据包的各个协议层的结构、字段值以及对应的解释。这对于深入分析数据包的内容和协议结构非常有帮助。例如,对于一个 TCP 数据包,你可以看到:
- 源端口(Source Port):标识发送方应用程序使用的端口号,不同的应用程序通常使用特定的端口号,如 HTTP 协议默认使用 80 端口,HTTPS 使用 443 端口。
- 目的端口(Destination Port):标识接收方应用程序使用的端口号。
- 序列号(Sequence Number):用于标识 TCP 数据包在数据流中的位置,确保数据包按正确顺序重组。
- 确认号(Acknowledgment Number):用于确认已收到对方发送的数据包,保证数据传输的可靠性。
对于一个 HTTP 数据包,你可以查看其:
- 请求方法(Request Method):常见的有 GET(用于获取资源)、POST(用于提交数据)等。
- 请求 URL(Request URL):显示请求的具体资源路径。
- 响应状态码(Response Status Code):如 200 表示请求成功,404 表示资源未找到等。
(六)数据包字节数据窗格
此窗格显示了数据包的原始字节数据。对于需要查看数据包原始内容的高级用户来说,这个窗格提供了最直接的方式。在这里,你可以看到数据包以十六进制和 ASCII 码两种形式呈现的数据,通过分析这些原始数据,可以更深入地了解数据包的构成和内容,特别是在分析一些自定义协议或排查网络安全问题时非常有用。
五、捕获数据包
(一)选择捕获接口
在开始捕获数据包之前,首先要选择一个要捕获数据包的接口。在接口列表中,找到你想要捕获数据包的网络接口,例如以太网接口 “Ethernet0” 或者无线网络接口 “Wi-Fi”。点击该接口,然后点击工具栏上的 “开始捕获” 按钮(通常是一个绿色的三角形图标),或者选择菜单栏中的 “捕获”->“开始”。
(二)设置捕获选项
在开始捕获之前,你还可以对捕获选项进行一些设置。点击菜单栏中的 “捕获”->“选项”,弹出 “捕获选项” 对话框。在这里,你可以设置捕获的接口、捕获文件的保存位置、捕获过滤器等。
- 捕获文件:设置捕获的数据包保存的文件路径和文件名。如果不设置,捕获的数据包将只显示在 Wireshark 界面中,不会保存到文件。你可以点击 “浏览” 按钮选择保存的目录,文件名可以自行命名,建议使用有意义的名称,如 “20241201 - office - network - capture.pcapng” ,方便后续查找和识别。
- 捕获过滤器:使用捕获过滤器可以只捕获符合特定条件的数据包。例如,你只想捕获来自某个 IP 地址的数据包,可以设置捕获过滤器为 “ip.src == 192.168.1.100”。捕获过滤器的语法有多种规则:
-
- 协议过滤:如 “tcp” 表示只捕获 TCP 协议的数据包,“udp” 表示只捕获 UDP 协议的数据包。
-
- IP 地址过滤:“ip.src == 192.168.1.100” 表示只捕获源 IP 地址为 192.168.1.100 的数据包,“ip.dst == 192.168.1.200” 表示只捕获目的 IP 地址为 192.168.1.200 的数据包。
-
- 端口过滤:“tcp.srcport == 8080” 表示只捕获源端口为 8080 的 TCP 数据包,“udp.dstport == 53” 表示只捕获目的端口为 53(DNS 协议常用端口)的 UDP 数据包。
-
- 逻辑运算符:“&&” 表示与,如 “ip.src == 192.168.1.100 && tcp.dstport == 80” 表示只捕获源 IP 地址为 192.168.1.100 且目的端口为 80 的数据包;“||” 表示或,如 “ip.src == 192.168.1.100 || ip.src == 192.168.1.101” 表示捕获源 IP 地址为 192.168.1.100 或者 192.168.1.101 的数据包;“!” 表示非,如 “!http” 表示捕获除 HTTP 协议之外的数据包。
(三)开始捕获
完成上述设置后,点击 “开始” 按钮,Wireshark 就会开始捕获所选接口上的数据包。捕获过程中,数据包列表窗格会实时显示捕获到的数据包。当你想要停止捕获时,点击工具栏上的 “停止捕获” 按钮(通常是一个红色的正方形图标),或者选择菜单栏中的 “捕获”->“停止”。
六、分析数据包
(一)使用显示过滤器
显示过滤器是 Wireshark 中非常强大的功能,它可以帮助你从大量的捕获数据包中快速筛选出符合特定条件的数据包。显示过滤器的语法与捕获过滤器类似,但功能更加强大。在 Wireshark 界面的左上角有一个 “显示过滤器” 输入框,你可以在其中输入过滤器表达式。
例如:
- 显示所有 TCP 协议的数据包:tcp
- 显示源 IP 地址为 192.168.1.100 的数据包:ip.src == 192.168.1.100
- 显示目的端口为 80 的 HTTP 协议数据包:http && tcp.dstport == 80
显示过滤器除了基本的协议、地址、端口过滤和逻辑运算外,还支持更复杂的过滤规则。比如,你可以通过 “frame.len> 1000” 来显示长度大于 1000 字节的数据包,这对于分析网络中大数据包的传输情况很有帮助;还可以使用 “ip.addr == 192.168.1.100” 来显示与 192.168.1.100 这个 IP 地址相关的所有数据包,包括源地址或目的地址是该 IP 的数据包。
(二)查看数据包详细信息
在数据包列表窗格中选择一个数据包后,数据包详细信息窗格会显示该数据包的详细内容。你可以展开各个协议层,查看每个字段的具体值和含义。例如,对于一个 TCP 数据包,你可以查看其源端口、目的端口、序列号、确认号等信息;对于一个 HTTP 数据包,你可以查看其请求方法(GET、POST 等)、请求 URL、响应状态码等信息。此外,还可以查看数据包的其他详细信息,如 TCP 的窗口大小(Window Size),它表示发送方能够接收的字节数,反映了网络的拥塞情况;HTTP 的头部字段(Header Fields),如 User - Agent(用于标识客户端的类型和版本)、Content - Type(用于指定数据的类型,如 application/json 表示数据是 JSON 格式)等,这些信息对于深入分析网络通信和排查问题都非常关键。
(三)跟踪流
在分析网络连接时,跟踪流功能非常有用。当你选择一个 TCP 或 UDP 数据包后,右键点击该数据包,在弹出的菜单中选择 “追踪流”->“TCP 流” 或 “UDP 流”。Wireshark 会将该连接的所有数据包按顺序排列,并以文本形式显示在一个新的窗口中,方便你查看整个连接的通信过程。在跟踪流的窗口中,你可以清晰地看到数据的发送和接收顺序,以及请求和响应的具体内容。例如,对于 HTTP 协议的 TCP 流,你可以看到完整的 HTTP 请求和响应消息,包括请求头、请求体、响应头和响应体,这对于分析 Web 应用的交互过程和排查相关问题非常直观和有效。
七、常用过滤器语法
(一)协议过滤器
- 显示所有 HTTP 协议的数据包:http
- 显示所有 DNS 协议的数据包:dns
- 显示所有 ARP 协议的数据包:arp
(二)IP 地址过滤器
- 显示源 IP 地址为 192.168.1.100 的数据包:ip.src == 192.168.1.100
- 显示目的 IP 地址为 192.168.1.200 的数据包:ip.dst == 192.168.1.200
(三)端口过滤器
- 显示源端口为 8080 的数据包:tcp.srcport == 8080
- 显示目的端口为 22 的数据包:tcp.dstport == 22
(四)逻辑运算符
- 与(&&):用于连接多个条件,只有所有条件都满足时才显示数据包。例如,显示源 IP 地址为 192.168.1.100 且目的端口为 80 的数据包:ip.src == 192.168.1.100 && tcp.dstport == 80
- 或(||):用于连接多个条件,只要有一个条件满足就显示数据包。例如,显示源 IP 地址为 192.168.1.100 或目的 IP 地址为 192.168.1.200 的数据包:ip.src == 192.168.1.100 || ip.dst == 192.168.1.200
- 非(!):用于取反条件。例如,显示不是 HTTP 协议的数据包:!http
此外,还有一些其他的过滤语法,如针对以太网帧的过滤,“eth.src == 00:11:22:33:44:55” 可以显示源 MAC 地址为 00:11:22:33:44:55 的以太网帧;针对 ICMP 协议的过滤,“icmp.type == 8” 可以显示 ICMP 请求(类型 8)的数据包,“icmp.type == 0” 则显示 ICMP 响应(类型 0)的数据包。
八、保存与导出捕获数据
(一)保存捕获文件
在捕获完成后,你可以将捕获的数据包保存为文件,以便后续分析。选择菜单栏中的 “文件”->“保存” 或 “文件”->“另存为”,选择保存的文件路径和文件名。Wireshark 默认的保存文件格式为.pcapng,这种格式可以完整地保存捕获的数据包信息,包括数据包的原始数据、捕获时间、接口信息等。如果你需要与其他工具或用户共享捕获数据,也可以选择保存为.pcap 格式,该格式是一种更通用的数据包捕获文件格式,被许多网络分析工具所支持。
(二)导出特定数据包
如果你只需要导出部分数据包,可以使用显示过滤器筛选出这些数据包,然后选择菜单栏中的 “文件”->“导出分组”->“作为”。在弹出的对话框中,选择保存的文件路径和文件名,同时可以选择导出的文件格式,如文本文件、CSV 文件等。导出为文本文件时,数据包的内容会以文本形式呈现,便于查看和编辑;导出为 CSV 文件则适合用于数据分析和统计,你可以将其导入到 Excel 等软件中进行进一步处理,例如统计不同协议的数据包数量、分析数据包的大小分布等。
九、总结
通过本文的详细介绍,相信你已经对 Wireshark 的基本使用方法有了较为全面的了解。从安装启动、界面认识,到数据包的捕获与分析,再到过滤器的使用以及数据的保存导出,Wireshark 提供了丰富而强大的功能来帮助我们深入研究网络协议和排查网络问题。随着不断的学习和实践,你将能够更加熟练地运用 Wireshark,挖掘网络数据包背后的更多信息。
相关文章:

Wireshark 使用教程:网络分析从入门到精通
一、引言 在网络技术的广阔领域中,网络协议分析是一项至关重要的技能。Wireshark 作为一款开源且功能强大的网络协议分析工具,被广泛应用于网络故障排查、网络安全检测以及网络协议研究等诸多方面。本文将深入且详细地介绍 Wireshark 的使用方法&#x…...

如何在前端给视频进行去除绿幕并替换背景?-----Vue3!!
最近在做这个这项目奇店桶装水小程序V1.3.9安装包骑手端V2.0.1小程序前端 最近,我在进行前端开发时,遇到了一个难题“如何给前端的视频进行去除绿幕并替换背景”。这是一个“数字人项目”所需,我一直在冥思苦想。终于有了一个解决方法…...

使用中间件自动化部署java应用
为了实现你在 IntelliJ IDEA 中打包项目并通过工具推送到两个 Docker 服务器(172.168.0.1 和 172.168.0.12),并在推送后自动或手动重启容器,我们可以按照以下步骤进行操作: 在 IntelliJ IDEA 中配置 Maven 或 Gradle 打…...

pytorch张量分块投影示例代码
张量的投影操作 背景 张量投影 是深度学习中常见的操作,将输入张量通过线性变换映射到另一个空间。例如: Y=W⋅X+b 其中: X: 输入张量(形状可能为 (B,M,K),即批量维度、序列维度、特征维度)。W: 权重矩阵((K,N),将 K 维投影到 N 维)。b: 偏置向量(可选,(N,))。Y:…...

Visual Studio 同一解决方案 同时运行 多个项目
方案一 方案二...

VMware中Ubuntu如何连接网络?安排!
一、设置NAT模式 1、关闭Ubuntu虚拟机: 确保Ubuntu已经完全关机,而不是挂起或休眠状态。 2、编辑虚拟网络设置: 在VMware主界面点击“编辑”菜单,选择“虚拟网络编辑器”。 如果需要,选择VMnet8 (NAT模式)并点击“更改…...

使用 Charles 调试 Flutter 应用中的 Dio 网络请求
为了成功使用 Charles 抓取并调试 Flutter 应用程序通过 Dio 发起的网络请求,需遵循特定配置步骤来确保应用程序能够识别 Charles 的 SSL 证书,并正确设置代理服务器。 配置 Charles 以支持 HTTPS 请求捕获 Charles 默认会拦截 HTTP 流量;…...

CMD批处理命令入门(6)——常用的特殊字符
CMD批处理命令入门(6)——特殊字符 本章内容主要学习要点:重定向符 >、>>命令管道符 |组合命令 &、&&、||转义字符 ^变量引导符 %界定符 "" 本章内容主要学习要点: >、>>重定向符| 命令…...

【跟着官网学技术系列之MySQL】第7天之创建和使用数据库1
前言 在当今信息爆炸的时代,拥有信息检索的能力很重要。 作为一名软件工程师,遇到问题,你会怎么办?带着问题去搜索引擎寻找答案?亦或是去技术官网,技术社区去寻找? 根据个人经验,一…...

next-auth v5 结合 Prisma 实现登录与会话管理
1. 安装依赖 npm install next-auth prisma prisma/client2. 配置 Prisma 模型 在 prisma/schema.prisma 文件中定义 User 和 Account 模型(next-auth v5 推荐使用自定义模型)。 model User {id String id default(uuid())email …...

WPS excel使用宏编辑器合并 Sheet工作表
使用excel自带的工具合并Sheet表,我们会发现需要开通WPS会员才能使用合并功能; 那么WPS excel如何使用宏编辑器进行合并 Sheet表呢? 1、首先我们要看excel后缀是 .xlsx 还是 .xls ;如果是.xlsx 那么 我们需要修改为 .xls 注…...

(即插即用模块-Attention部分) 四十四、(ICIP 2022) HWA 半小波注意力
文章目录 1、Half Wavelet Attention2、代码实现 paper:HALFWAVELET ATTENTION ON M-NET FOR LOW-LIGHT IMAGE ENHANCEMENT Code:https://github.com/FanChiMao/HWMNet 1、Half Wavelet Attention 传统的图像增强方法主要关注图像在空间域的特征信息&am…...

Linux第二课:LinuxC高级 学习记录day04
6、shell中的语句 6.3、结构性语句 6.3.1、if if…then…fi 1、结构 1)基本结构 if 表达式 then 命令表 fi if [ 表达式 ] // 【】两侧有空格 then 命令表 fi 2)分层结构 if 表达式 then 命令表1 else 命令表2 fi 3)嵌套结构 if …...

occ的开发框架
occ的开发框架 1.Introduction This manual explains how to use the Open CASCADE Application Framework (OCAF). It provides basic documentation on using OCAF. 2.Purpose of OCAF OCAF (the Open CASCADE Application Framework) is an easy-to-use platform for ra…...

Redis 如何解决大 key 问题
前言 嗨👋,大家好,我是雪荷。做为一个后端开发,Redis 是我们经常接触到的一个非关系行数据库。其对我们系统开发和优化有着举足轻重的作用,但是随着业务和用户迅速增长,也会滋生许多的问题,而大…...

驱动开发系列33 - Linux Graphics mesa Intel驱动介绍
一:概述 mesa 中的 Intel 驱动体系是为支持 Intel GPU 提供图形 API 的硬件实现部分,主要包括 OpenGL、Vulkan等图形接口,Intel驱动实现整体上分为四层: 第一层:API 层, 实现 OpenGL 和 Vulkan 接口, src/mesa/main、src/vulkan。 第二层:驱动层,实现 OpenGL 和 Vulkan…...

【华为OD-E卷 - 整数编码 100分(python、java、c++、js、c)】
【华为OD-E卷 - 整数编码 100分(python、java、c、js、c)】 题目 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 编码时7位一组,每个字节的低7位用于存储待编码数字的补码 字…...

vue3 uniapp封装一个瀑布流组件
新增组件m-waterfall 这样就可以在页面直接使用 不用在引入了 <template><view class"m-waterfall"><view id"m-left-column" class"m-column"><slot name"left" :leftList"leftList"></slot&…...

Android Room 持久化库的介绍及使用方法
Android Room 是 Android Jetpack 组件之一,是 Google 官方推出的用于简化 SQLite 数据库操作的持久化库。它提供了一个抽象层,允许开发者在 SQLite 数据库上执行常见的 CRUD 操作,同时处理数据库连接、数据迁移和查询优化等底层细节。 Andr…...

Go语言中http.Transport的Keep-Alive配置与性能优化方法
在Go语言中,http.Transport是一个用于发送HTTP或HTTPS请求的客户端工具,它提供了许多可配置的参数以优化性能。其中,Keep-Alive配置是性能优化的关键部分。以下是对http.Transport的Keep-Alive配置与性能优化方法的详细解释: 一、…...

设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo
1.策略模式 好处:动态切换算法或行为场景:实现同一功能用到不同的算法时和简单工厂对比:简单工厂是通过参数创建对象,调用同一个方法(实现细节不同);策略模式是上下文切换对象,调用…...

C# 多线程 Task TPL任务并行
先总结一下 之前发展过程的要点 1: 为了保证多线程正确顺序执行 线程同步 2: 为了节省操作系统线程资源 线程池 异步 方式管理 正常来讲 使用这俩个要点 进行使用 多线程可以满足开发使用需求 但是 新的问题产生了 那就是 多个异步操作 需要编写大量的代…...

【matlab】matlab知识点及HTTP、TCP通信
1、矩阵运算 点乘:对于两个同维度的向量,点乘结果是这两个向量对应分量的乘积之和。 点除:是指对两个数组的对应元素进行除法运算。 点幂:表示元素对元素的幂运算。 >> A[1,2,3;4,5,6]; B[1,1,1;2,2,2]>> D1B.*AD…...

kalilinux - msf和永恒之蓝漏洞
Kali最强渗透工具 - metasploit metasploit是什么? msf是一款开源安全漏洞利用和测试工具,集成了各种平台上常见的溢出漏洞和流行的sheelcode,并持续保持更新。 具体操作 1、先切换到root用户,使用msfdb init命令初始化metaspl…...

网络安全测评质量管理与标准解读
大家读完觉得有帮助记得关注和点赞!!! 注意说明 刚开始写过一些比较专业的分享,较多粉丝反应看不懂,本次通过大众的通俗易懂的词汇先了解概念然后再分享规范和详细的技术原理 一、网络安全测评质量管理 网络安全测…...

Cesium根据地图的缩放zoom实现不同级别下geojson行政边界的对应展示
实现效果: 随着地图的缩放,展示对应缩放级别下的行政边界。 准备数据: 1.国家行政边界数据 (country.json) 2.省级行政边界数据 (province.json) 3.市级行政边界数据(city.json&…...

Linux初识:【shell命令以及运行原理】【Linux权限的概念与权限管理】
目录 一.shell命令以及运行原理 二.Linux权限的概念与权限管理 2.1Linux权限的概念 sudo普通用户提权 2.2Linux权限管理 2.2.1文件访问者的分类(人) 2.2.2文件类型和访问权限(事物属性) 2.2.3文件权限值的表示方法 字符…...

深入剖析 Wireshark:网络协议分析的得力工具
在网络技术的广阔领域中,网络协议分析是保障网络正常运行、优化网络性能以及进行网络安全防护的关键环节。而 Wireshark 作为一款开源且功能强大的网络协议分析工具,在网络工程师、安全专家以及网络技术爱好者中广受欢迎。本文将深入介绍 Wireshark 的功…...

【AIGC】SYNCAMMASTER:多视角多像机的视频生成
标题:SYNCAMMASTER: SYNCHRONIZING MULTI-CAMERA VIDEO GENERATION FROM DIVERSE VIEWPOINTS 主页:https://jianhongbai.github.io/SynCamMaster/ 代码:https://github.com/KwaiVGI/SynCamMaster 文章目录 摘要一、引言二、使用步骤2.1 TextT…...

PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统
基于深度学习YOLOv5神经网络水果蔬菜检测识别系统,其能识别的水果蔬菜有15种,# 水果的种类 names: [黑葡萄, 绿葡萄, 樱桃, 西瓜, 龙眼, 香蕉, 芒果, 菠萝, 柚子, 草莓, 苹果, 柑橘, 火龙果, 梨子, 花生, 黄瓜, 土豆, 大蒜, 茄子, 白萝卜, 辣椒, 胡萝卜,…...