职场必备!Wireshark 超详细教程,抓包排错一条龙,看完直接提升工作效率
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
介绍关键点1:抓包技术 Wireshark是一款强大的网络协议分析工具,通过抓包技术,可以捕获网络接口上的数据包,并详细解析数据包的内容。这对于网络故障排查、性能分析和安全检测至关重要。使用Wireshark,用户可以直观地看到数据包的源地址、目的地址、协议类型以及数据内容,从而快速定位问题所在。无论是简单的网络连接问题还是复杂的安全漏洞,抓包技术都能提供关键信息,帮助用户高效地解决网络问题。 关键点2:网络协议解析 Wireshark支持多种网络协议的解析,包括TCP、UDP、HTTP、FTP等常见协议,以及一些较专业的协议如IPSec、SSL/TLS等。通过详细的协议解析,用户可以深入了解网络通信的细节,查看数据包的各个字段信息。这种解析能力不仅有助于故障排查,还能帮助用户学习网络协议的工作原理。Wireshark的图形化界面使得协议解析过程更加直观,即使是网络新手也能快速上手,从而提升工作效率。 关键点3:排错工具 Wireshark不仅仅是一个抓包工具,它还提供了丰富的排错功能。例如,用户可以通过过滤功能快速筛选出感兴趣的数据包,使用统计功能分析网络流量,甚至利用颜色编码直观地识别问题数据包。这些功能使得Wireshark成为网络排错的得力助手。无论是日常的网络维护还是紧急的故障处理,Wireshark都能帮助用户快速定位问题,并提供解决方案。通过熟练使用Wireshark,网络管理员可以显著提升工作效率,确保网络的稳定运行。 流程一、wireshark是什么?Wireshark作为一款广受欢迎的网络封包分析工具,其别名为小鲨鱼,凭借其卓越的功能表现而备受青睐。该软件能够有效地捕获各类网络封包,并且可以详细地展示这些封包所包含的信息内容。 Wireshark是一款具有开源特性的网络分析软件,用户可以放心地在其上进行网络数据包的捕获与分析工作。该软件具有良好的跨平台支持性,既可以在Windows操作系统上运行,也能够在Mac OS系统上流畅运行。与Wireshark相对应的,在Linux操作系统下,我们通常使用的是tcpdump这一抓包工具。值得注意的是,为了能够有效地使用Wireshark并理解其捕获到的网络数据包内容,使用者必须具备对网络协议的深入了解,否则可能会难以正确解读和分析软件所提供的信息。 ![]() 二、Wireshark常用应用场景1. 网络管理员会使用wireshark来检查网络问题 2. 软件测试工程师使用wireshark抓包,来分析自己测试的软件 3. 从事socket编程的工程师会用wireshark来调试 4. 运维人员用于日常工作,应急响应等等 总之跟网络相关的东西,都可能会用到wireshark 三、Wireshark抓包原理Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。 Wireshark使用的环境大致分为两种,一种是电脑直连网络的单机环境,另外一种就是应用比较多的网络环境,即连接交换机的情况。 「单机情况」下,Wireshark直接抓取本机网卡的网络流量; 「交换机情况」下,Wireshark通过端口镜像、ARP欺骗等方式获取局域网中的网络流量。 端口镜像:利用交换机的接口,将局域网的网络流量转发到指定电脑的网卡上。 ARP欺骗攻击:在交换机依据MAC地址进行数据转发的工作机制下,攻击者通过伪装成其他网络终端的MAC地址,从而截取并获取局域网内的网络数据流量。 四、Wireshark软件安装软件下载路径: ![]() 按照系统版本选择下载,下载完成后,按照软件提示一路Next安装。 ![]() 五、Wireshark抓包示例先介绍一个使用wireshark工具抓取ping命令操作的示例,可以上手操作感受一下抓包的具体过程。 1、打开wireshark,主界面如下: ![]() 2、选择菜单栏上 捕获 -> 选项,勾选WLAN网卡。这里需要根据各自电脑网卡使用情况选择,简单的办法可以看使用的IP对应的网卡。点击Start,启动抓包。 ![]() 3、Wireshark程序被成功启动,并且当前正运行在数据包捕获模式。 ![]() 4、执行需要抓包的操作,如在cmd窗口下执行ping www.baidu.com。 ![]() 5、操作完成后相关数据包就抓取到了,可以点击 停止捕获分组 按钮。 ![]() 6、为避免其他无用的数据包影响分析,可以通过在过滤栏设置过滤条件进行数据包列表过滤,获取结果如下。说明:ip.addr == 183.232.231.172 and icmp 表示只显示ICPM协议且主机IP为183.232.231.172的数据包。说明:协议名称icmp要小写。 ![]() 7、Wireshark抓包操作完成后,需要将本次捕获的数据或分析结果妥善保存,这一步骤十分关键。接下来,我们将详细探讨wireshark中显示过滤条件的设置方法、抓包过滤条件的应用技巧,以及如何深入查看数据包内的详细内容,这些内容将在后续章节中进行详细介绍。 ![]() 六、Wireshakr抓包界面介绍![]() Wireshark 的主界面包含6个部分: 菜单栏:用于调试、配置 工具栏:常用功能的快捷方式 过滤栏:指定过滤条件,过滤数据包 数据包列表:核心区域,每一行就是一个数据包 数据包详情:数据包的详细数据 数据包字节:数据包所承载的字节序列,采用二进制格式表示。 说明:数据包列表区中不同的协议使用了不同的颜色区分。协议颜色标识定位在菜单栏 视图 --> 着色规则。如下所示 ![]() WireShark 主要分为这几个界面 1. Display Filter(显示过滤器)用于设置过滤条件进行数据包列表过滤。菜单路径:分析 --> Display Filters。 ![]() 2. Packet List Pane(数据包列表)显示捕获到的数据包,每个数据包包含编号,时间戳,源地址,目标地址,协议,长度,以及数据包信息。不同协议的数据包使用了不同的颜色区分显示。 ![]() 3. Packet Details Pane(数据包详细信息)在众多数据包中挑选出特定的数据包后,该数据包的详尽信息将在数据包详细信息区域全面展示。数据包详细信息面板扮演着核心角色,它使得用户得以审视协议中每一个具体字段的详细内容。此面板中列出的各项信息具体包括: (1)Frame: 物理层的数据帧概况 (2)Ethernet II: 数据链路层以太网帧头部信息 (3)Internet Protocol Version 4: 互联网层IP包头部信息 (4)Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP (5)Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议 ![]() TCP包的具体内容 从下图可以看到wireshark捕获到的TCP包中的每个字段。 ![]() ![]() 4. Dissector Pane(数据包字节区)报文原始内容。 ![]() 七、Wireshark过滤器设置对于刚开始接触Wireshark的用户来说,捕获到的数据包列表往往非常庞大且包含大量无关信息,这使得从众多数据包中定位目标数据变得十分困难。幸运的是,Wireshark内置了两种类型的过滤器功能,掌握并熟练运用这两种过滤器,能够显著提高我们在海量数据包中快速检索并提取关键信息的能力。 1.抓包过滤器捕获过滤器的菜单栏路径为 捕获 --> 捕获过滤器。用于在抓取数据包前设置。 ![]() 如何使用呢?设置如下。 ![]() ip host 183.232.231.172表示只捕获主机IP为183.232.231.172的数据包。获取结果如下: ![]() 2. 显示过滤器显示过滤器是用于在抓取数据包后设置过滤条件进行过滤数据包。 在大多数情况下,当捕获的数据包数量庞大,或者由于设定的捕获条件过于宽泛而收集了过多不必要的数据时,我们会采用应用显式过滤器的方法来对捕获到的数据包进行筛选,目的是为了能够更加高效和精准地进行分析工作。 ![]() 执行ping www.baidu.com获取的数据包列表如下 ![]() 观察上述获取的数据包列表,含有大量的无效数据。这时可以通过设置显示器过滤条件进行提取分析信息。ip.addr == 183.232.231.172,并进行过滤。 ![]() 上述介绍了抓包过滤器和显示过滤器的基本使用方法。在组网不复杂或者流量不大情况下,使用显示器过滤器进行抓包后处理就可以满足我们使用。下面介绍一下两者间的语法以及它们的区别。 八、wireshark过滤器表达式的规则1. 抓包过滤器语法和实例在数据包捕获过程中,过滤器类型Type包括主机(host)、网络(net)和端口(port)三种分类方式,同时需要设定数据包传输的方向Dir为源(src)或目的(dst)端口,并且明确数据包所采用的协议Proto,例如以太网(ether)、互联网协议(ip)、传输控制协议(tcp)、用户数据报协议(udp)、超文本传输协议(http)、因特网控制消息协议 icmp 以及文件传输协议 ftp 等多种类型。此外,还应当合理运用逻辑运算符,包括逻辑与运算符(&&)、逻辑或运算符(||)以及逻辑非运算符(!)来构建复杂的过滤条件,从而精确筛选出满足特定需求的数据包。 (1)协议过滤 比较简单,直接在抓包过滤框中直接输入协议名即可。 tcp,只显示TCP协议的数据包列表 http,只查看HTTP协议的数据包列表 icmp,只显示ICMP协议的数据包列表 (2)IP过滤 host 192.168.1.104 src host 192.168.1.104 dst host 192.168.1.104 (3)端口过滤 port 80 src port 80 dst port 80 (4)逻辑运算符&&与、|| 或、!非 src host 192.168.1.104 &&dst port 80 抓取主机地址为192.168.1.80、目的端口为80的数据包 host 192.168.1.104 || host 192.168.1.102 抓取主机为192.168.1.104或者192.168.1.102的数据包 !broadcast 不抓取广播数据包 2. 显示过滤器语法和实例(1)比较操作符 比较操作符有 == 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于 (2)协议过滤 比较简单,直接在Filter框中直接输入协议名即可。注意:协议名称需要输入小写。 tcp,只显示TCP协议的数据包列表 http,只查看HTTP协议的数据包列表 icmp,只显示ICMP协议的数据包列表 ![]() (3) ip过滤 ip.src ==112.53.42.42 显示源地址为112.53.42.42的数据包列表 ip.dst==112.53.42.42, 显示目标地址为112.53.42.42的数据包列表 ip.addr == 112.53.42.42 显示源IP地址或目标IP地址为112.53.42.42的数据包列表 ![]() (4)端口过滤 tcp.port ==80, 显示源主机或者目的主机端口为80的数据包列表。 tcp.srcport == 80, 只显示TCP协议的源主机端口为80的数据包列表。 tcp.dstport == 80,只显示TCP协议的目的主机端口为80的数据包列表。 ![]() (5) http模式过滤 http.request.method=="GET", 只显示HTTP GET方法的。 ![]() (6)逻辑运算符为 and/or/not 当需要根据多个条件进行组合过滤时,应采用AND或OR逻辑运算符。例如,若要筛选出IP地址等于192.168.0.104的ICMP数据包,相应的表达式可以表述为。ip.addr == 192.168.0.104 and icmp ![]() (7)按照数据包内容过滤 假设我要以ICMP层中的内容进行过滤,可以单击选中界面中的码流,在下方进行选中数据。 ![]() 右键单击选中后出现如下界面 ![]() 选中后在过滤器中显示如下 ![]() 后面条件表达式就需要自己填写。如下我想过滤出data数据包中包含"abcd"内容的数据流。关键词是contains,完整条件表达式为data contains "abcd" ![]() 看到这, 基本上对wireshak有了初步了解。 3. 常见用显示过滤需求及其对应表达式数据链路层: 筛选mac地址为04:f9:38:ad:13:26的数据包 eth.src == 04:f9:38:ad:13:26 筛选源mac地址为04:f9:38:ad:13:26的数据包---- eth.src == 04:f9:38:ad:13:26 网络层: 筛选ip地址为192.168.1.1的数据包 ip.addr == 192.168.1.1 筛选192.168.1.0网段的数据 ip contains "192.168.1" 传输层: 筛选端口为80的数据包 tcp.port == 80 对介于12345端口和80端口之间的数据包进行过滤与选择。 tcp.port == 12345 &&tcp.port == 80 筛选从12345端口到80端口的数据包 tcp.srcport == 12345 &&tcp.dstport == 80 应用层: 特别说明: http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1) http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其他头部都用http.header_name形式。 从众多HTTP数据包中挑选出那些其URL内包含.php字符的数据包。 http.request.uri contains ".php" 筛选内容包含username的http数据包 http contains "username" 九、Wireshark抓包分析TCP三次握手1. TCP三次握手连接建立过程Step1:客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这是第一次握手; Step2:当服务端成功接收并同意建立连接时,它会向客户端发送一个数据包,该数据包的SYN标志位被设置为1,同时ACK标志位也被设置为1,用以告知客户端连接已建立且允许通信。随后,客户端需要发送一个确认数据包作为响应,这标志着第二次握手流程的完成。 Step3:服务端发送一个SYN=0,ACK=1的数据包给客户端端,告诉它连接已被确认,这就是第三次握手。TCP连接建立,开始通讯。 ![]() 2. Wireshark抓包获取访问指定服务端数据包Step1:启动wireshark抓包,打开浏览器输入www.baidu.com。 Step2:使用ping www.baidu.com获取IP。 ![]() Step3:输入过滤条件获取待分析数据包列表 ip.addr == 183.232.231.172 ![]() 图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTPS的, 这说明HTTPS的确是使用TCP建立连接的。 第一次握手数据包 客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 ![]() 数据包的关键属性如下: SYN :标志位,表示请求建立连接 Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据 Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据 第二次握手的数据包 服务器发回确认包, 标志位为 SYN,ACK。将确认序号(Acknowledgement Number)字段+1,即0+1=1。 ![]() 数据包的关键属性如下: [SYN + ACK]: 标志位,同意建立连接,并回送SYN+ACK Seq = 0 :初始建立值为0,表示当前还没有发送数据 Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据) 第三次握手的数据包 客户端在此次通信中再次发送确认数据包(ACK),在该数据包的SYN标志位设为0,表示不再需要建立连接的同步信号,而ACK标志位设为1,确认收到服务器的响应。同时,客户端将服务器先前发送的ACK数据包中的序号字段值加1,并将此新的序号值放置在确认号字段中,用以告知服务器已成功接收并确认该序号之前的所有数据。此外,在标志段中写入ACK确认号加1的值,以进一步确认数据传输的连续性和正确性。 ![]() 数据包的关键属性如下: ACK :标志位,表示已经收到记录 Seq = 1 :表示当前已经发送1个数据 Ack = 1 : 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。 经过TCP协议的三次握手过程,连接得以成功建立,从而可以开始进行数据传输与交互。 ![]() 十、Wireshark分析常用操作调整数据包列表中时间戳显示格式。调整方法为 视图 -->时间显示格式 --> 日期和时间。调整后格式如下: ![]() Wireshark软件通常能够与市面上主流厂商提供的模拟器协同工作,尤其适合在项目中进行精确的配置设置。 阅读原文:原文链接 该文章在 2026/1/4 18:13:42 编辑过 |
关键字查询
相关文章
正在查询... |