使用wireshark配合SSH和tcpdump实现远程抓包

admin 2021年03月01日 3,296次浏览


最近发现网站有时候会出现访问慢的情况,于是打算对服务器进行抓包分析一下原因。由于服务器是托管在第三方平台的,所以没办法本地抓包,只有使用远程抓包。

一般远程抓包的方法是,首先在远程服务器端安装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 -:设置实时数据包捕获的网络接口或管道的名称,“ - ”表示使用标准输入
    • 更多参数,参考官方资料