Wireshark 在移动开发中的应用

255 阅读5分钟

Wireshark 在移动开发中的应用

1 引言

  • 在移动应用开发过程中,网络调试是不可或缺的一环,通过抓取和分析网络数据包,开发者可以深入了解应用程序的网络行为,发现潜在的问题,优化网络性能。本文将介绍如何使用 Wireshark 这款强大的网络抓包工具,在移动设备上抓取网络数据包,帮助开发者更好地进行网络调试。

2 Wireshark 简介

2.1 Wireshark 是什么

  • Wireshark 是一款开源的网络协议分析器,支持抓取和分析各种网络协议的数据包;支持多种操作系统,包括 MacOS、Windows 和 Linux 等;同时它支持多种网络协议,包括但不限于以太网、TCP、UDP、IP、HTTP、SSL/TLS、DNS 等;通过 Wireshark,开发者可以实时捕获网络数据包,查看数据包的详细信息,进行网络故障排查、安全分析、协议开发和测试等。

2.2 Wireshark 的工作原理

  • 数据包捕获: Wireshark 能够通过网络接口(如网卡)监听网络上的数据流量。当数据包经过网络接口时,Wireshark 能够捕获并记录这些数据包的内容。这些数据包可以是来自计算机本身的流量,也可以是经过网络中其他设备的流量;
  • 数据包解析: Wireshark 能够解析各种网络协议中的数据包,包括以太网、IP、TCP、UDP、HTTP 等。它通过独立的解码器来解析每一层协议,并将数据包的内容转换为可读的格式。这样的解析过程包括了从二进制数据到协议字段的转换,使得用户能够以易于理解的方式查看和分析数据包的内容;
  • 数据包展示: 解析后的数据包以可视化的方式展示给用户。Wireshark 提供了丰富的界面功能,可以根据用户的需求进行数据包的过滤、排序和分组。用户可以选择查看整个会话的数据流,或者只关注特定的数据包。此外,Wireshark 还提供了统计功能,可以生成各种网络流量的统计信息,如带宽利用率、数据包数量、协议分布等;
  • 数据包分析和调试: Wireshark 的一个主要用途是帮助用户分析和调试网络通信过程中的问题。通过查看捕获的数据包,用户可以识别网络连接问题、性能瓶颈、安全漏洞等。Wireshark 还支持保存捕获的数据包,并能够与其他工具集成,以进一步分析和处理数据包。

2.3 Wireshark 主要功能

  • 捕获网络数据包;
  • 解析多种网络协议;
  • 过滤和搜索功能;
  • 统计和分析功能;
  • 会话重组;
  • 导出和保存数据包;
  • 协议分析插件;
  • 命令行界面。

2.3 Wireshark 在移动开发中的应用场景

  • 网络调试: 分析移动应用的网络请求和响应,帮助定位网络问题,比如 TCP 或 UDP 等;
  • 协议开发: 在开发新的网络协议时,使用 Wireshark 进行测试和验证;
  • 安全测试: 检查移动应用的网络通信是否符合安全标准,发现潜在的安全漏洞;
  • 性能优化: 通过分析网络流量,优化移动应用的数据传输效率。

3 安装与配置 Wireshark

3.1 Mac 安装 Wireshark

  • Wireshark 是开源且免费的,所以直接进入官网,选择您对应的版本下载即可,下载链接
  • 下载成功后,将 "Wireshark" 拖动到 "Applications" 中,并双击 "Install ChmodBPF.pkg",只有安装了这个,才能捕获数据包。
  • image1.jpeg

3.2 Windows 安装 Wireshark

  • Wireshark 是开源且免费的,所以直接进入官网,选择您对应的版本下载即可,下载链接
  • 下载成功后,双击按照提示步骤安装即可。 image2.png

3.3 配置移动设备

  • 1)电脑开热点,手机(IOS Android 都可以)连接;
  • 2)打开 Wireshark,(耗时需要等一会)页面选择下图: image3.png
  • 注意:单网卡没什么犹豫,多网卡时需要看看是在哪张网卡上进行数据交换的;如果有波形,则说明该网卡上有流量。

3.4 设置为中文

  • 注意:这里以 Mac 版本为例;
  • 选择 "Wireshark" 中的 "Preferences" 弹出窗口: image4.png
  • 在 "Appearance" 中找到 "Language",并切换至 "Chinese" 并点击 "OK",即切换至中文。 image5.png

4 介绍与配置 Wireshark

4.1 Wireshark 窗口介绍

image6.jpeg

4.2 Wireshark 封包详情信息

image7.jpeg

4.3 Wireshark TCP 包具体内容

image8.jpeg

4.4 Wireshark TCP 三次握手

image9.jpeg image10.jpeg

4.5 Wireshark TCP 四次握手

image11.jpeg image12.jpg

  • 注意:
  • 1)客户端与服务器端传输时全双工的,因此断开请求既可以由客户端发起,也可以由服务器端发起;只要找准第一次出现 "[FIN, ACK]" 的位置,就是第一次挥手位置;
  • 2)为什么我们抓包抓到的不是 "四次挥手",而是 "三次挥手" 呢?
  • 答:这里涉及到 Linux 的 TCP 时延机制,当被挥手端(10034 端口)第一次收到挥手端(45928 端口)的 "FIN" 请求时,并不会立即发送 ACK,而是会经过一段延迟时间后再发送,但是此时被挥手端也没有数据发送,就会向挥手端发送 "FIN" 请求,这里就可能造成被挥手端发送的 "FIN" 与 "ACK" 一起被挥手端收到,导致出现 "第二、三次挥手" 合并为一次的现象,也就最终呈现出 "三次挥手" 的情况。

4 Wireshark 过滤器规则

# 抓包过滤器
- 类型 Type(host、net、port)
- 方 向 Dir(src、dst)
- 协议 Proto(ether、ip、tcp、udp、http、icmp、ftp 等)
- 逻辑运算符(&&(与)、||(或)、!(非))

# 协议过滤
- TCP,只显示 TCP 协议的数据包列表
- HTTP,只查看 HTTP 协议的数据包列表
- ICMP,只显示 ICMP 协议的数据包列表

# IP 过滤
- ip.src ==192.168.1.102,显示源地址为 192.168.1.102
- ip.dst == 192.168.1.102,目标地址为 192.168.1.102

# 端口过滤
- tcp.port == 80, 端口为 80 的
- tcp.srcport == 80, 只显示 TCP 协议的源端口为 80 的
- tcp.srcport == 22, 目的端口位 22

# HTTP 模式过滤
- http.request.method=="GET", 只显示 HTTP GET 方法的

# 逻辑运算符
- AND / OR

5 参考文档