Wireshark 是什么?
Wireshark 就是一个可以“偷看”网络数据包的工具,它能够捕获流经你电脑网卡上的所有数据包,并以可读的方式展示出来。

- 网络数据包:我们在互联网上发送的任何信息(如打开网页、发送邮件、在线视频)都被拆分成一个个小的数据包进行传输,这些数据包包含了源地址、目标地址、传输内容、使用的协议等信息。
- 捕获:Wireshark 将这些原始的二进制数据包从网络上“抓”下来。
- 分析:Wireshark 将这些原始数据包解码成人类可以理解的格式,让你能够清晰地看到网络通信的每一个细节。
Wireshark 能做什么?(核心用途)
Wireshark 的应用场景非常广泛,主要包括以下几个方面:
-
网络故障排查
- 问题:用户无法上网、网页加载缓慢、文件传输失败。
- 分析:通过抓包,可以定位是 DNS 解析失败、网络连接超时、丢包还是服务器响应慢等问题,你可以看到电脑发出的 DNS 请求是否收到了正确的回复。
-
网络安全分析
- 问题:检测网络攻击、病毒传播、异常行为。
- 分析:安全专家可以通过分析数据包,发现恶意软件的通信行为(如连接 C&C 服务器)、端口扫描、ARP 欺骗、DDoS 攻击等异常流量模式。
-
协议学习和开发
(图片来源网络,侵删)- 问题:想了解 HTTP、TCP、DNS 等协议到底是如何工作的?
- 分析:Wireshark 是学习网络协议的“最佳实践”,你可以实时看到协议的握手过程、数据传输格式和挥手过程,对于开发者,可以用来调试自己的网络应用程序,检查自己编写的程序发送和接收的数据是否符合协议规范。
-
性能分析
- 问题:为什么视频会议卡顿?为什么在线游戏延迟高?
- 分析:通过分析数据包的大小、传输间隔、重传率等,可以判断网络是否存在拥塞、延迟或丢包问题,从而定位性能瓶颈。
-
软件调试
- 问题:一个客户端软件和服务器通信时出现错误。
- 分析:可以捕获客户端和服务器之间的所有通信数据,检查请求数据和响应数据是否正确,从而定位是客户端还是服务器端的问题。
Wireshark 如何使用?(基本操作流程)
使用 Wireshark 主要分为三步:捕获 -> 过滤 -> 分析。
捕获数据包
- 选择网卡:打开 Wireshark,主界面会列出你电脑上所有的网络接口(如以太网、Wi-Fi),选择你想要监听的网卡,然后点击左上角的蓝色鲨鱼鳍图标开始捕获。
- 开始捕获:Wireshark 会开始记录所有流经该网卡的数据包,你可以在 Packet List (数据包列表) 窗口看到数据包的实时列表。
过滤数据包
网络上的数据包成千上万,直接查看会非常困难,过滤是使用 Wireshark 的关键技能。

-
显示过滤器:这是最常用、最强大的过滤器,用于在捕获后或捕获时实时显示特定的数据包。
- 按协议过滤:
http(只显示 HTTP 流量),tcp,udp,dns,icmp(ping 命令使用的协议)。- 示例:
http
- 示例:
- 按 IP 地址过滤:
ip.addr == 192.168.1.100(只显示与该 IP 通信的包),ip.src == 192.168.1.1(只显示源地址为该 IP 的包)。- 示例:
ip.addr == 8.8.8.8(查看与 Google DNS 的所有通信)
- 示例:
- 按端口号过滤:
tcp.port == 80(只显示使用 80 端口的 TCP 流量,即 HTTP),tcp.dstport == 443(只显示目标端口为 443 的流量,即 HTTPS)。- 示例:
tcp.port == 22(查看 SSH 流量)
- 示例:
- 组合过滤:使用
and,or,not组合多个条件。- 示例:
http and ip.addr == 192.168.1.100(查看特定 IP 的 HTTP 流量)
- 示例:
- 字符串过滤:
http.request.uri contains "login"(查找包含 "login" 字符串的 HTTP 请求)。
- 按协议过滤:
-
捕获过滤器:在开始捕获前设置的过滤器,可以只捕获你感兴趣的数据包,大大减少数据量,避免硬盘写满,语法与显示过滤器不同。
- 示例:
host 192.168.1.100 and tcp port 80(只捕获与 192.168.1.100 的 80 端口的通信)
- 示例:
分析数据包
在数据包列表中选中一个你感兴趣的数据包,下方的两个窗口会显示详细信息:
- Packet Details (数据包详情):以树状结构展示了数据包的封装层次,从物理层到应用层(如 Ethernet II, Internet Protocol Transmission Control Protocol, Hypertext Transfer Protocol),你可以点击每一层来查看该层的详细信息。
- Packet Bytes (数据包字节):以十六进制和 ASCII 码的形式显示数据包的原始内容,这对于分析协议负载或查找特定字节序列非常有用。
一个简单的实战案例:抓取一次 HTTP 访问
- 准备工作:打开 Wireshark,选择你的 Wi-Fi 或有线网卡,点击开始捕获。
- 触发流量:在浏览器中访问一个网站,
http://httpbin.org/get。 - 停止捕获:访问成功后,点击 Wireshark 上的红色方块停止捕获。
- 过滤:在显示过滤器输入框中输入
http,然后按回车,现在列表中应该只包含 HTTP 数据包。 - 分析:
- 在列表中找到一个
HTTP协议的数据包,点击它。 - 在
Packet Details窗口中,展开Hypertext Transfer Protocol。 - 你会清楚地看到:
- 请求行:
GET /get HTTP/1.1(这是一个 GET 请求,路径是 /get,使用 HTTP 1.1 协议)。 - 请求头:
Host: httpbin.org,User-Agent: Mozilla/5.0...等。
- 请求行:
- 向下滚动,找到
TCP层,可以看到源端口和目标端口(通常是 80 或 443)。 - 再向下找到
Internet Protocol层,可以看到源 IP 地址(你的电脑)和目标 IP 地址(httpbin.org 的服务器)。
- 在列表中找到一个
通过这个简单的步骤,你就成功“窥探”了一次完整的 HTTP 请求。
注意事项与最佳实践
- 法律和道德:只能抓取你自己拥有或被授权的网络流量,在未经授权的情况下抓取他人的网络数据是违法的。
- 权限:在 Windows 和 macOS 上,普通用户可能无法捕获所有数据包(可能无法捕获 802.11 Wi-Fi 数据包的完整内容),通常需要管理员/ root 权限才能进行完整的抓包。
- 性能影响:在高流量网络中抓包会消耗大量 CPU 和内存,并可能影响网络性能,建议使用捕获过滤器来限制抓取的数据量。
- 数据量巨大:一次简单的网络活动就可能产生成千上万个数据包,学会使用过滤器是高效使用 Wireshark 的前提。
- 保存文件:可以将捕获结果保存为
.pcap或.pcapng格式,以便日后分析或与他人分享。
Wireshark 是一个功能极其强大的工具,它将看不见的网络世界变得透明,虽然初学者可能会被海量的信息吓到,但只要掌握了基本的捕获、过滤和分析技巧,它就能成为你解决网络问题、深入理解网络协议的得力助手,对于任何 IT 精通 Wireshark 都是一项非常有价值的技能。
