Wireshark是一款广泛应用于网络分析领域的抓包软件,它为我们理解TCP/IP协议族中各个协议的工作机制提供了有力的实践工具。本文将详细介绍Wireshark的使用方法,包括其界面功能、抓包过程、过滤机制以及对TCP流的分析功能等。
在官网下载
一、启动与主界面
(一)启动界面
启动Wireshark后,我们会看到其启动界面。该界面主要由菜单栏、工具栏和界面列表组成。菜单栏包含了各种操作选项,如文件操作(打开、保存、打印等)、编辑功能(查找包、标记包等)、视图控制、分析功能、统计功能以及帮助选项等。工具栏提供了快速访问常用菜单功能的按钮,方便用户操作。界面列表则显示了一些可操作的项目,如打开已捕获的文件、选择捕获接口等。
(二)抓包界面
1. 启动抓包
要开始抓包,需点击“File”菜单下的相关按钮(或按快捷键Ctrl + E),会弹出“Wireshark: Capture Interfaces”对话框。此对话框中会列出可用的网络接口,包括真实网卡和虚拟网卡(若有虚拟机)。每个网卡显示其描述、IP地址(若已分配)、每秒数据包数等信息。例如,若要在真实以太网卡上抓包,找到对应的以太网卡(如Realtek 10/100/1000 Ethernet NIC),点击其右侧的“Start”按钮即可开始抓包。
2. 主界面组成
抓包开始后,进入主界面,主要由以下部分构成:
菜单:提供了全面的操作功能,如文件管理、编辑操作、视图调整、数据捕获与分析、统计信息查看以及帮助文档获取等。
主工具栏:方便用户快速执行常用操作,如保存捕获文件、重新开始捕获、打开捕获选项等。
过滤工具栏:用于设置显示过滤器,帮助用户在捕获的大量数据包中快速筛选出所需信息。
Packet List面板:显示每个捕获数据包的摘要信息,包括源地址、目的地址、协议类型和简要信息等。若捕获的是二层数据包,源和目的地址显示为MAC地址;若是三层或更高层数据包,则显示为IP地址,且仅当数据包属于四层或更高层时才会显示端口号。用户还可在此添加、删除列或更改列颜色。
Packet detail面板:详细展示在Packet List面板中选中数据包的信息,按不同的OSI层进行分组,用户可展开查看各层详细内容。
Packet bytes面板:以十六进制格式显示选中数据包的数据,与Packet detail面板中高亮显示字段相对应,方便查看数据包的原始数据内容。
状态栏:显示当前程序状态和捕获数据的详细信息,如捕获文件路径、数据包数量、显示数据包数量、标记数据包数量、丢弃数据包数量以及当前使用的配置文件等。
二、过滤机制
(一)过滤器类型
Wireshark提供了两种过滤器:捕捉过滤器和显示过滤器,它们目的不同。捕捉过滤器在数据捕获前设置,用于控制捕获的数据量,避免生成过大的日志文件;显示过滤器在捕获结果中使用,能更强大、灵活地筛选出所需记录。
(二)捕捉过滤器
1. 设置步骤
选择“capture > options”,在弹出的“Wireshark: Capture Options”对话框中,填写“capture filter”栏或点击“capture filter”按钮为过滤器命名并保存(方便后续使用),然后点击“Start”开始捕捉。
2. 语法规则
语法格式为“Protocol Direction Host(s) Value Logical Operations Other expression”。其中,“Protocol”指定协议,如ether、fddi、ip、arp、rarp、decnet、lat、sca、moprc、mopdl、tcp、udp等,若未指明则默认使用所有支持协议;“Direction”表示方向,可选src(源)、dst(目的)、src and dst、src or dst,默认是“src or dst”;“Host(s)”可取值为net、port、host、portrange,默认是“host”;“Logical Operations”包括not、and、or,“not”优先级最高,“or”和“and”优先级相同且从左至右运算;使用关键字作为值时需用反斜杠“\”,还可在“ip”或“ether”后用“multicast”及“broadcast”关键字,“no broadcast”可排除广播请求。
3. 示例
“tcp dst port 3128”:显示目的TCP端口为3128的封包。
“ip src host 10.1.1.1”:显示来源IP地址为10.1.1.1的封包。
“host 10.1.2.3”:显示目的或来源IP地址为10.1.2.3的封包。
“src portrange 2000 2500”:显示来源为UDP或TCP且端口号在2000至2500范围内的封包。
“not icmp”:显示除icmp以外的所有封包(icmp常被ping工具使用)。
“src host 10.7.2.12 and not dst net 10.200.0.0/16”:显示来源IP地址为10.7.2.12但目的地不是10.200.0.0/16的封包。
“(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200 10000 and dst net 10.0.0.0/8”:显示来源IP为10.4.1.12或来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间且目的位于网络10.0.0.0/8内的所有封包。
(三)显示过滤器
1. 语法规则
语法格式为“Protocol String1 String2 Comparison operator Value Logical Operations Other expression”。“Protocol”可使用大量位于OSI模型第2至7层的协议,点击“Expression...”按钮可查看;“String1”和“String2”为协议的子类(可选);“Comparison operators”有6种比较运算符(eq或==表示等于、ne或!=表示不等于、gt或>表示大于、lt或<表示小于、ge或>=表示大于等于、le或<=表示小于等于);“Logical expression_rs”包括and(&&)、or(||)、xor(^^)、not(!),逻辑异或(xor)只有当且仅当其中一个条件满足时才显示结果。
2. 示例
“snmp || dns || icmp”:显示SNMP或DNS或ICMP封包。
“ip.addr == 10.1.1.1”:显示来源或目的IP地址为10.1.1.1的封包。
“ip.src!= 10.1.2.3 or ip.dst!= 10.4.5.6”:显示来源不为10.1.2.3或者目的不为10.4.5.6的封包(即来源IP为除10.1.2.3以外任意,目的IP任意;或来源IP任意,目的IP为除10.4.5.6以外任意)。
“ip.src!= 10.1.2.3 and ip.dst!= 10.4.5.6”:显示来源不为10.1.2.3并且目的IP不为10.4.5.6的封包(即来源IP为除10.1.2.3以外任意且目的IP为除10.4.5.6以外任意)。
“tcp.port == 25”:显示来源或目的TCP端口号为25的封包。
“tcp.dstport == 25”:显示目的TCP端口号为25的封包。
“tcp.flags”:显示包含TCP标志的封包。
“tcp.flags.syn == 0x02”:显示包含TCP SYN标志的封包。
过滤器语法正确时,表达式背景呈绿色;有误则呈红色。
三、TCP流分析
对于处理TCP协议,若要查看TCP流中的应用层数据,Wireshark的“Follow TCP Stream”功能很实用。在包列表中选中感兴趣的TCP包,选择工具栏菜单的“Following TCP Streams”选项(或使用包列表鼠标右键的上下文菜单),Wireshark会创建合适的显示过滤器并弹出对话框显示TCP流的所有数据。
在“Follow TCP Stream”对话框中,流的内容按网络中出现的顺序显示,从A到B的通信标记为红色,从B到A的通信标记为蓝色(可在“Edit/Preferences”菜单项的“Colores”修改颜色)。非打印字符显示为圆点。对话框提供了以下操作:
“Save As”:以当前选择格式保存流数据。
“Print”:以当前选择格式打印流数据。
“Direction”:选择流的显示方向(“Entire conversation”、“data from A to B only”或“data from B to A only”)。
“Filter out this stream”:应用显示过滤,排除当前选择的TCP流。
“Close”:关闭对话框,移除对当前显示过滤的影响。
可通过以下格式浏览流数据:
“ASCII”:适合查看基于ASCII的协议(如HTTP),以ASCII方式显示数据。
“EBCDIC”:适用于IBM公司字符二进制编码标准相关内容(具体用途较少提及)。
“HEX Dump”:可查看所有数据,但可能占用大量屏幕空间,适合显示二进制协议。
“C Arrays”:允许将流数据导入C语言程序。
“RAW”:可载入原始数据到其他应用程序进一步分析,显示类似ASCII设置,但“save As”会保存为二进制文件。
在捕捉过程中,TCP流不能实时更新,若要获取最近内容需重新打开对话框。
通过以上对Wireshark的启动界面、主界面、过滤机制和TCP流分析功能的详细介绍,用户可以更好地利用Wireshark进行网络数据包的捕获、分析和理解网络协议的工作机制,从而有效解决网络故障、分析网络性能和保障网络安全等问题。
总结反思
1. 软件功能理解
熟悉了Wireshark的启动界面、抓包界面各组成部分及其功能,掌握了两种过滤器的使用方法和语法规则,以及“Follow TCP Stream”功能的操作和应用场景,能够利用其进行网络数据包的捕获、分析和TCP流研究。但在理解一些高级协议分析功能,如对某些复杂协议(如IPSec、GRE等)的解码和分析时存在困难,限制了对网络协议更深入层次的理解和故障排查能力。
2. 协议分析能力提升
通过使用Wireshark捕获和分析数据包,能观察到协议在实际网络通信中的交互过程,深入理解TCP/IP协议族中各协议的工作机制,如通过分析HTTP协议数据包了解其请求和响应格式等。然而,在分析复杂网络环境中的数据包时,难以快速筛选关键信息,分析效率较低,如在包含多种协议和大量流量的场景中,准确找到特定问题相关数据包并分析需花费较多时间和精力,反映出数据包分析技巧和经验有待提高。
3. 抓包与过滤技巧熟练运用
经过多次实践,能够熟练进行抓包操作,选择合适网络接口、设置捕捉过滤器获取特定数据包,并运用显示过滤器精确筛选结果,在解决网络故障和分析性能问题时能更高效获取有用信息。但在设置复杂过滤条件时,可能因语法错误或逻辑不清晰导致过滤结果不准确,如使用逻辑运算符组合多个条件时,可能错误理解优先级或使用不当表达式,需加强对过滤语法和逻辑的理解,多练习提高准确性和灵活性。
4. TCP流分析实践经验积累
使用“Follow TCP Stream”功能分析TCP流时,学会查看应用层数据、理解通信双方交互过程和判断网络应用运行状态,对分析基于TCP协议的应用程序工作情况有帮助,能定位和解决相关问题。但在处理长时间或大数据量的TCP流时,Wireshark可能性能下降甚至卡顿,影响分析效率和体验,需了解如何优化性能设置。在分析包含多种协议嵌套或加密数据的TCP流时,还需学习更多技巧和方法深入挖掘信息。