网络抓包分析是研发日常开发工作中的一项重要技能,但凡开发的系统或应用涉及网络通信都可能会接触到。抓包文件可帮助研发人员排查网络通信中一些难以直接看出的故障,快速定位和解决问题。
Wireshark是一个强大且开源的网络封包分析软件,提供了强大的过滤器功能,其一般使用步骤如下。
1. 抓包
以下是几种比较常用的Linux抓包命令。
-v:指定为详细输出模式,可以让tcpdump输出更详细的数据包头部信息。
# 按端口过滤
tcpdump -i any port 8080 or 8918 -v -w pocket.pcap
# 按ip过滤
tcpdump -i eth0 host 127.0.0.1 -v -w pocket.pcap
# 按目标ip过滤
tcpdump -i eth0 dst 127.0.0.1 -v -w pocket.pcap
# 按源ip过滤
tcpdump -i eth0 src 127.0.0.1 -v -w pocket.pcap
# 抓全包
tcpdump -v -w pocket.pcap
2. 转换时间显示格式
使用Wireshark打开一个抓包文件(.pcap)后,首先查看时间展示格式,一般来说有2种格式比较常用。
修改方式:View(视图) --> Time Display Format(时间显示格式)
2.1. 包含具体时间的格式
包含具体时间的格式有很多种,随意选择1种即可。
这种格式显示的好处是可以追溯每个数据包的具体时间,方便对照日志进行时序问题排查。
2.2. 自上一个捕获分组经过的秒数
这种格式显示的好处是可以查看每个数据包的耗时,排查一些网络延时卡顿之类的问题。
3. 总体统计分析
3.1. IO图
X轴为时间,Y轴为捕获数据包数量,显示抓包文件中的整体流量情况,如波峰/波谷/规律性/是否均匀等。
查看方式:Statistics(统计) --> I/O Graph(IO图)
3.2. 对话信息
查看总体的对话信息,包括数据流向、数据大小、耗时等等
查看方式:Statistics(统计) --> Conversations(对话)
4. 设置过滤器
在过滤器命令框中输入具体命令,回车即可搜索目标数据包。
以下为一些常用的过滤方式及命令。
4.1. 根据 网络协议
http:只查看HTTP协议的数据包列表tcp:只查看TCP协议的数据包列表udp:只查看UDP协议的数据包列表icmp:只查看ICMP协议的数据包列表
4.2. 根据 数据包内容
data contains "关键字":仅搜索数据包中的数据部分(推荐)frame contains "关键字":搜索的是整个数据帧,包括协议头部和数据部分
4.3. 根据 IP
ip.addr == 192.168.3.77:源ip或目标ipip.src == 192.168.1.114:源ipip.dst == 192.168.1.114:目标ip
4.4. 根据 端口
TCP协议
tcp.port == 80:源端口或目标端口tcp.dstport == 80:目标端口tcp.srcport == 80:源端口
UDP协议
udp.port == 80:源端口或目标端口udp.dstport == 80:目标端口udp.srcport == 80:源端口
4.5. 根据 接口请求方法
http.request.method == GEThttp.request.method == POST
4.6. 根据 接口URI
http.request.uri contains "接口uri"
扩展:组合条件
上面条件都可以组合使用,基本组合方式有3类,可灵活组合使用。
-
|| 或者 or:满足任一条件 -
&& 或者 and:同时满足多个条件 -
!():不满某个条件
5. 分析数据包内容
定位到具体的数据包后,我们可能需要查看分析具体的抓包内容。
查看方式:数据包上鼠标右键 --> 追踪流 --> 具体协议流