Wireshark 实战:从一次事故中学到的网络分析技巧

Wireshark 实战:从一次事故中学到的网络分析技巧
Wireshark 实战从一次事故中学到的网络分析技巧那天晚上我正准备关掉电脑结束一天的工作突然接到一个紧急电话。是公司的 IT 经理语气紧张地告诉我我们的网络系统出现了严重的延迟且部分服务器无法访问。我的第一反应是先用 Ping 命令测试结果显示丢包严重但并没有明确的指向。我意识到问题可能比想象中复杂于是迅速启动了 Wireshark准备深入抓包分析。打开 Wireshark 的那一刻我面对的是海量的数据包一时间不知道从何下手。这时我想起了一次以前的踩坑经历当时因为不知道如何高效地过滤和分析数据包导致在排查问题时浪费了大量时间。这次我决定不再重蹈覆辙于是迅速在脑海里回顾了 Wireshark 的一些核心语法和常用命令。首先我需要确定哪些数据包是与这次事故相关的。Wireshark 的显示过滤器Display Filter是我最常用的工具之一。展示过滤器可以帮助你从捕获的大量数据包中过滤出你真正关心的数据。比如如果你只关心 HTTP 协议的数据包可以输入httpWireshark 会立即过滤出所有 HTTP 协议的数据包。在那次事故中我尝试了一个更复杂的过滤器tcp.flags.syn 1 and tcp.flags.ack 0这个过滤器用来找出所有的 TCP SYN 数据包这些数据包通常是建立新连接时发送的。# 在 Wireshark 的显示过滤器中输入以下命令 # 过滤出所有 TCP SYN 数据包 tcp.flags.syn 1 and tcp.flags.ack 0通过这个过滤器我迅速发现了一些异常的 SYN 数据包。这些数据包的源 IP 地址看起来很可疑多次尝试连接我们的服务器但未能成功。我意识到这可能是 DDoS 攻击的前兆于是我进一步过滤了这些源 IP 地址使用ip.addr 192.168.1.100来查看这些 IP 地址的所有通信记录。然而我发现这些 IP 地址并不是唯一的很多不同的 IP 地址都在尝试连接服务器这让我更加确信这是一次 DDoS 攻击。# 在显示过滤器中输入以下命令 # 过滤出与特定 IP 地址通信的所有数据包 ip.addr 192.168.1.100但问题并没有这么简单。我需要进一步确认这些连接请求是否真的是恶意的。这时我用到了 Wireshark 的捕获过滤器Capture Filter。捕获过滤器是在数据包捕获时进行筛选只捕获你关心的数据包。例如host 192.168.1.100可以只捕获与特定主机通信的数据包而port 80可以只捕获 HTTP 协议的 80 端口数据包。# 在 Wireshark 的捕获过滤器中输入以下命令 # 只捕获与特定主机通信的数据包 host 192.168.1.100# 在捕获过滤器中输入以下命令 # 只捕获 HTTP 协议的 80 端口数据包 port 80捕获到的数据包数量大大减少了我逐一分析这些数据包发现在短时间内有大量的 SYN 数据包但响应的 ACK 数据包却很少。这进一步验证了我的猜测。我决定查看这些数据包的详细信息通过右键点击数据包选择Follow TCP Stream可以看到整个 TCP 会话的所有数据包。在这个界面中我可以清楚地看到每个连接的请求和响应情况。# 右键点击数据包选择 Follow TCP Stream # 查看整个 TCP 会话的所有数据包在分析这些数据包的过程中我还发现了一些奇怪的现象比如某些数据包中包含了大量无效的 HTTP 请求显然是被恶意工具生成的。我意识到这不仅仅是一次简单的 DDoS 攻击还伴随着一些更深层次的网络渗透行为。我在 Wireshark 中使用了http.request过滤器查看所有 HTTP 请求的详细信息发现这些请求的目标路径非常分散显然是在尝试不同的攻击点。# 在显示过滤器中输入以下命令 # 过滤出所有 HTTP 请求数据包 http.request为了进一步确认这些请求的来源我使用了ip.src 192.168.1.100过滤器查看所有来自这些 IP 地址的请求。我发现这些 IP 地址大多数都是动态分配的这增加了溯源的难度。但通过对这些数据包的时间戳和频率进行分析我找到了一些规律比如这些请求通常在特定时间出现且频率非常高。# 在显示过滤器中输入以下命令 # 过滤出所有来自特定 IP 地址的请求 ip.src 192.168.1.100在确认了这些异常数据包后我决定将这些 IP 地址加入防火墙的黑名单以防止它们继续发起攻击。使用 Wireshark 的导出功能我将这些 IP 地址导出为一个文本文件然后通过脚本自动将它们加入防火墙的黑名单中。# 在 Wireshark 中选择异常数据包右键选择导出选中的数据包 # 将 IP 地址导出为文本文件# 使用脚本将导出的 IP 地址加入防火墙黑名单 #!/bin/bash # 读取 IP 地址文件 ips$(cat ip_addresses.txt) # 遍历每个 IP 地址将其加入防火墙黑名单 for ip in $ips; do sudo iptables -A INPUT -s $ip -j DROP done经过这一系列的分析和处理网络延迟逐渐恢复正常服务器也恢复了访问。虽然这次事故最终解决了但我在过程中深刻体会到了 Wireshark 的强大功能和重要性。Wireshark 不仅仅是一个简单的抓包工具它能帮助你快速定位和解决问题尤其是在面对复杂的网络故障时。当然Wireshark 的强大之处不仅仅在于它的过滤器还包括它的协议解析能力。Wireshark 支持解析数百种网络协议从常见的 TCP/UDP 到更复杂的 SSL/TLS 和 DNS都能轻松应对。例如你可以使用ssl过滤器查看所有 SSL/TLS 协议的数据包而在 DNS 问题排查中dns过滤器可以帮助你快速定位 DNS 查询和响应的异常。# 在显示过滤器中输入以下命令 # 过滤出所有 SSL/TLS 协议的数据包 ssl# 在显示过滤器中输入以下命令 # 过滤出所有 DNS 协议的数据包 dns在进行更深入的网络分析时Wireshark 的统计功能也非常有用。你可以通过Statistics Protocol Hierarchy查看各个协议捕获的数据包数量和占比这有助于你快速了解网络流量的分布情况。此外Statistics Conversations可以显示所有主机之间的会话帮助你找到网络通信中最活跃的主机。# 通过 Statistics Protocol Hierarchy 查看协议层次统计 # 了解各个协议捕获的数据包数量和占比# 通过 Statistics Conversations 查看会话统计 # 找到网络通信中最活跃的主机不过Wireshark 也有它的局限性。例如它默认不支持解密 SSL/TLS 数据包这对于分析加密通信来说是一个不小的挑战。但幸运的是Wireshark 提供了详细的解密设置你可以通过配置 SSL 密钥文件来实现 SSL/TLS 数据包的解密。# 在 Wireshark 的 Preferences 中配置 SSL 密钥文件 # 实现 SSL/TLS 数据包的解密 # 路径Edit Preferences Protocols SSL在那次事故中我深刻体会到了 Wireshark 的强大功能但同时也意识到了一些常见的误区。比如很多人在使用 Wireshark 时会因为数据包太多而感到无从下手。这个时候掌握一些核心的过滤器语法就显得尤为重要。例如你可以使用ip.addr ! 192.168.1.1来排除某个特定 IP 地址的数据包或者使用tcp.flags 0x012来查看所有 TCP SYN-ACK 包。# 在显示过滤器中输入以下命令 # 排除某个特定 IP 地址的数据包 ip.addr ! 192.168.1.1# 在显示过滤器中输入以下命令 # 查看所有 TCP SYN-ACK 数据包 tcp.flags 0x012在 Wireshark 中还有一些高级功能可以帮助你更高效地分析数据包。例如你可以使用Follow UDP Stream来查看 UDP 会话使用Analyze Enabled Protocols来启用或禁用特定协议的解析或者使用File Export Objects来导出特定类型的对象如 HTTP 文件或图片。# 右键点击数据包选择 Follow UDP Stream # 查看 UDP 会话# 通过 Analyze Enabled Protocols 启用或禁用特定协议的解析 # 路径Analyze Enabled Protocols# 通过 File Export Objects 导出特定类型的对象 # 路径File Export Objects在使用 Wireshark 进行网络分析时还有一些小技巧可以帮助你提高效率。例如你可以使用File Merge将多个捕获文件合并为一个方便进行统一分析。此外使用File Export Packet Dissections可以导出数据包的详细信息以便在其他工具中进一步分析。# 通过 File Merge 合并多个捕获文件 # 路径File Merge# 通过 File Export Packet Dissections 导出数据包详细信息 # 路径File Export Packet Dissections最后我想分享一下我在使用 Wireshark 时的一个小插曲。有一次我遇到一个异常的 TCP 会话数据包看起来很正常但通信却突然中断。我尝试了各种过滤器和统计功能但都没有找到问题的根源。最终我决定查看数据包的时间戳发现这些数据包的时间间隔非常不规律。这让我意识到问题可能出在网络设备的时钟同步上。果然通过检查交换机的时钟同步设置我找到了问题的原因。虽然 Wireshark 是一个非常强大的工具但网络故障排查往往需要多方面的知识和工具来配合。例如你可能需要使用tcpdump来捕获数据包再用 Wireshark 进行详细分析。此外如果你经常需要处理定时任务或网络配置可以试试 Hey Cron这个免费在线工具网站提供了很多实用的功能包括 Cron 表达式生成器、正则表达式生成器、中英互译、JSON 格式化、Base64 编码解码、时间戳转换和 JWT 解析。这些工具在日常工作中都能派上大用场。在那次事故之后我更加坚信掌握了 Wireshark 的核心语法和常用功能就能在网络故障排查中游刃有余。希望我的这些经验和教训能够帮助你在遇到类似问题时更快地找到解决方案。

最新新闻

日新闻

周新闻

月新闻