前言
开发过程中,本地程序可以进行debug自测,但是,针对服务调用和联调,需要定位问题的时候,可能就需要抓包去定位一些非代码层面或者服务注入相关的问题。因为在程序运行时,数据都是以数据包的形式进行传输,发送和接收数据的过程中,可能发出的数据有错误的数据,也可能接收的包中有错误的数据,从而导致程序处理出错,因此我们直接抓取传输的数据包,通过其他工具或方法解析数据包中的原始数据,可以定位是否因为数据输错导致的程序出错,如果出错又是因为那一部分的数据出错等。常见的抓包工具有F12、Fiddler、Charles,wireshark等。
抓包工具的具体用途如下
- 查看请求方和服务方IP
- App抓包,查看请求数据包进行分析对比
- 模拟弱网环境,测试一些弱网下用户操作出现的bug
- 修改请求头数据
- 修改响应包数据
- 设置网络延迟导致网络超时
- 也可以模拟压测,频繁请求接口,查看服务器性能
本地抓包工具使用
线上抓包tcpdump命令
针对线上环境的抓包,由于不能使用本地抓包的那些工具,所以只能通过相关命令进行端口的监听进而抓取数据包进行分析。tcpdump(dump traffic on a network)是一个用于截取网络分组,并输出分组内容的工具。tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
安装tcpdump
linux安装tcpdump:yum install -y tcpdump
abutu安装tcpdump:先apt update ,然后apt-get install -y tcpdump
tcpdump常见命令
1.查询第一块网卡的所有的数据包
# tcpdump (-i eth0)-i指定用哪一块网卡,缺省默认第一块,一般可以不写,后续demo都使用默认的
2.选项-vnn
-v 解析和打印时,产生(略多)详细输出。例如,打印IP包中的生存时间,标识,总长度和选项。还启用其他数据包完整性检查,例如验证IP和ICMP头校验和。
-nn 不要将协议和端口号等转换为名称
3.监听抓取某一个端口的包 port
# tcpdump -vnn port 22
4.抓取某一类型协议的包
# tcpdump -vnn udp/icmp/arp/ip
5.抓取来源是某一个ip的所有的数据包
# tcpdump -vnn src host 172.1.1.1
6.抓取对应目的ip的数据包
# tcpdump -vnn dst host 172.1.1.1
7.ip和端口的组合,通过and,or, not
# tcpdump -i eth0 -vnn src host 172.1.1.1 and not port 22
8.抓包并保存成cap文件 -w
# tcpdump -vnn src host 172.1.1.1 -w aaa.cap
tcpdump下载文件后分析
1.使用tcpdump命令监听服务端口(我使用的1006),保存生成aaa.cap
2.curl模拟触发一次请求
3.下载生成的aaa.cap到本地
4.通过wireshark打开文件并分析数据
- 第一部分是所有的请求的基本信息,包括sourceIp,targetIp,请求方式,port等;
- 第二部分是数据包的详细信息,是按照TCP/IP四层结构显示的,第一行是数据链路层的信息,第二行是网络层信息(IP协议),第三行是传输层信息(TCP协议),第四层是应用层信息(HTTP协议),可以展开第一行用来观察具体的内容;
- 第三部分是原始数据包的样式
5.查看具体的tcp信息或者http信息,右键点击请求,点击Follow-》HTTP/TCP Stream
6.根据抓到包的详情进行分析和问题定位