最近和学弟在调试一个 GPRS 通信模块, 需求是通过 GPRS 模块通过 http 协议发送数据到服务器, 但是 http 协议一直失败, 服务器返回 400, 通过查询 http 状态码得知, http400 错误是请求无效, 因为 GPRS 模块没有实现 http 协议的封装, 需要在 TCP 协议的基础上, 手动拼装 http 格式的报文. 所以初步猜测是 http 协议格式错误导致的.
这时候, 最简单有效的调错方式就是通过抓包分析, 查看数据格式, 然后修改. 但是在 GPRS 模块上没法安装抓包工具, 只能在服务器上抓包, 服务器是 CentOS 的, 虽然有 tcpdump 工具, 但是没有界面, 没法具体分析数据包.
直接使用 tcpdump 抓到的数据包, 根本没法分析好不.
在 Windows 上, 有 wireshark 这个工具, 可以很方便的分析网络数据包, 这个软件有多牛鼻就不用多说了, 所有经过网卡数据都能抓到, 配合图形界面, 可以很方便的查看分析数据. 不知能查看应用层协议的数据, 网络中的五层协议都能查看.
有没有办法把 tcpdump 和 wireshark 这两个软件结合起来使用呢???
办法当然是有的, 把 tcpdump 抓取的数据转存文件, 然后用 wireshark 打开文件, 分析数据.
1. 开启 tcpdump 抓包, 并将结果转存为文件
tcpdump tcp -s 0 port 80 -w ./http.cap
说一下这几个参数
tcp 是指定抓取那种协议的数据, 因为我们要抓取 http 协议, 但是 tcp 不能指定 http 协议, 但是 http 协议是基于 TCP 协议的, 所以抓取 TCP 协议数据.
-s 0 tcpdump 抓取数据包时默认抓取长度为 68 字节. 加上 - S 0 后可以抓到完整的数据包
port 80 我的服务器监听的 80 端口, 所以只抓取 80 端口的数据.
-w ./http.cap 指定 tcpdump 转存数据时的文件 ./http.cap 是当前目录下的 http.cap 文件
发起请求
在终端中使用 ctrl+c 组合键结束抓包, 然后会在当前目录下生成一个 http.cap 文件
3. 把文件下载下来, 使用 tcpdump 分析数据
在 wireshark 中, 通过文件 > 打开 找到从服务器下载的 http.cap 文件, 并打开
到这已经成功打开了, 剩下的就是分析数据包了
在协议 http 的那一行右键, 选择追踪流, 然后选择 http
到这, 整个抓包就完成了, 是不是很简单呢
经过抓包分析, 终于解决了 http400 的问题
来源: https://yq.aliyun.com/articles/679686