写点什么

Linux 服务器端网络抓包和分析实战

作者:程序员欣宸
  • 2022 年 8 月 10 日
    广东
  • 本文字数:1561 字

    阅读完需:约 5 分钟

Linux服务器端网络抓包和分析实战

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

服务端抓包场景

  • 下图是个普通的 web 架构图,weatherservice 是个服务端应用,收到来自浏览器的请求后,会向网站 wthrcdn.etouch.cn 发起请求,并将响应的数据返回给浏览器:


  • 上述应用在开发调试时,需要抓包分析 weatherservice 和 wthrcdn.etouch.cn 网站之间的请求响应,接下来实战抓包和分析步骤;

关于本次实战的 weatherservice 应用

抓包

  • ssh 登录 weatherservice 应用所在的服务器,我这里是 CentOS7;

  • 执行以下命令,安装抓包工具 tcpdump:


yum install -y tcpdump
复制代码


  • 执行命令 ip addr 查看网卡名,如下所示,我这里是 ens33:


[root@localhost ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000    link/ether 00:0c:29:6a:5f:93 brd ff:ff:ff:ff:ff:ff    inet 192.168.119.160/24 brd 192.168.119.255 scope global noprefixroute dynamic ens33       valid_lft 1358sec preferred_lft 1358sec    inet6 fe80::1646:1c58:ee87:bc13/64 scope link noprefixroute        valid_lft forever preferred_lft forever
复制代码


  • 执行以下命令即可开始抓 ens33 网卡的包,并保存到名为 weatherservice.cap 的文件:


tcpdump tcp -i ens33 -w ./weatherservice.cap
复制代码




  • 返回 ssh 窗口,按下 ctrl+c,结束抓包;

  • 抓包数据在文件 weatherservice.cap 中,将其下载到装有 wireshar 的 windows 机器上;

  • 打开 wireshark,在"文件"->"打开",选择 weatherservice.cap,如下图:



  • 网卡 ens33 上的所有网络包都被抓到了,但很多都不是我们关心的,需要过滤,这里的过滤很简单:只保留 http 请求响应级即可,如下图,在红框位置输入"http"然后回车:



  • 如下图红框所示,编号为 21 的包就是 weatherservice 向 wthrcdn.etouch.cn 的请求,编号 25 的包则是 wthrcdn.etouch.cn 的响应(红框中的灰色箭头表示一对请求响应):



  • 双击上图中的 25 号包,弹出的窗口即为 wthrcdn.etouch.cn 网站响应数据的详情,如下图,红框中的 Content-encoding: gzip\r\n 表示该响应的 body 启用了 gzip 压缩:



  • 有些朋友在使用 springboot 的 RestTemplate 访问 wthrcdn.etouch.cn 网站查询天气的时候,发现响应的数据打印出来为乱码,就是因为没有对 gzip 的内容做处理导致的,在本文中我们通过抓包发现了此问题的根本原因,而解决此问题的方法请参考《springboot应用查询城市天气》一文;

  • 既然内容是 gzip 压缩过的,在上图的窗口中就无法看到压缩前的真实内容了,为了看到压缩前的真实内容,请参照下面的步骤;

  • 关闭弹出窗口,回到 wireshark 的主窗口,在菜单上选择"文件"->"导出对象"->"HTTP...",如下图:



  • 如下图,在弹出的窗口选中要查看的包,点击底部的"save"按钮,给要导出的文件起个名字(后缀是.html),再点击"保存"


  • 用浏览器打开前面保存的 response.html 文件,即可见到整个 body 解压缩后的内容,如下图:



  • 以上就是 Linux 抓包和 wireshark 分析包实战的全部内容,在您开发调试服务端远程调用时,希望此文能给您一些参考;

欢迎关注 InfoQ:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...


发布于: 刚刚阅读数: 3
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018.04.19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
Linux服务器端网络抓包和分析实战_Java_程序员欣宸_InfoQ写作社区