最近发现网站有时候会出现访问慢的情况,于是打算对服务器进行抓包分析一下原因。由于服务器是托管在第三方平台的,所以没办法本地抓包,只有使用远程抓包。
一般远程抓包的方法是,首先在远程服务器端安装tcpdump,通过tcpdump在远端抓取一部分数据包后,再回传到本地,然后使用wireshark进行分析。这种操作存在两个问题:一方面是抓取的数据包不是实时的,不能做实时数据分析;另一方面是,如果要将远端抓取到的数据回传到本地,就需要在远端服务器上搭建文件传输服务,服务器上安装的服务越多,风险越高。因此我们可以采取wireshark配合SSH和tcpdump进行远程实时抓包分析。
服务器端与本地环境结构
由于Windows版本的wireshark功能有限制,因此本地OS使用的是Ubuntu系统
- 服务器端
- OS:centos 7.9
- tcpdump:4.9.2
- 本地端
- OS:ubuntu 20.04 LTS
- wireshark:3.2.3
安装相关软件
-
服务器端
# 检查系统是否存在tcpdump [root@localhost ~]# rpm -qla | grep tcpdump /usr/sbin/tcpdump # 如果系统中不存在,就需要单独安装 [root@localhost ~]# yum install tcpdump -y
-
本地端
# 安装wireshark user@vm-ubuntu:~$ sudo apt install wireshark -y # 检查wireshark是否安装正确 user@vm-ubuntu:~$ wireshark -v Wireshark 3.2.3 (Git v3.2.3 packaged as 3.2.3-1)
在安装wireshark时,会出现以下选项,提示是否允许非超级用户抓包,此处选择【是】
使用wireshark远程抓包
在抓包时,必须使用 root 账户登录远程主机
user@vm-ubuntu:~$ sudo ssh root@192.168.137.10 -p 22 'tcpdump -i ens33 -s 0 -l -w -' | wireshark -k -i -
-
错误解决
在执行以上命令时,会出现以下错误
-
原因
这是由于wireshark在安装时,将
/usr/bin/dumpcap
的用户组默认设置为wireshark用户组 -
解决方法
将用户组修改为当前用户所在组即可
root@vm-ubuntu:/home/user# chgrp user /usr/bin/dumpcap
-
-
tcpdump 参数解释
- -i: 需要抓包的网卡
- -s: 设置数据包大小,设置为“0”时,使用默认数据包大小
- -l :(小写的 L )不缓存,直接输出
- -w -:将原始数据包写入文件,“ - ”表示使用标准输出
- 更多参数,参考官方资料
-
wireshark 参数解释
- -k:立即启动捕获会话
- -i -:设置实时数据包捕获的网络接口或管道的名称,“ - ”表示使用标准输入
- 更多参数,参考官方资料