远程实时抓包与本地抓包命令

small parking
目录

远程实时抓包与本地抓包命令

在网络调试中,抓包是最常用的手段之一。本文介绍两种常用的抓包方式:本地直接抓包和远程实时抓包,都可以配合 Wireshark 进行实时分析。

本地抓包

使用 tcpdump 过滤指定主机和端口的流量,通过管道直接传给 Wireshark 进行实时查看:

sudo tcpdump -i any -f "host 192.168.10.35 and port 8903" -w - | sudo wireshark -k -i -

参数说明:

  • -i any:监听所有网络接口
  • -f "host 192.168.10.35 and port 8903":BPF 过滤表达式,只捕获目标主机和端口的流量
  • -w -:将抓包数据输出到标准输出(stdout)
  • wireshark -k -i -:从标准输入(stdin)实时读取并显示数据包

远程实时抓包

当需要抓取远程服务器的流量时,可以利用命名管道(FIFO)配合 SSH 和 tcpdump 实现实时抓包:

第一步:创建命名管道

mkfifo /tmp/sharkfile

第二步:通过 SSH 在远程主机上抓包,数据写入命名管道

ssh 10.34 "sudo tcpdump -U -s0 -w - -i any 'host 192.168.0.211 or host 192.168.0.209'" > /tmp/sharkfile

第三步:用 Wireshark 读取命名管道中的数据,实时分析

sudo wireshark -k -i /tmp/sharkfile

参数说明:

  • mkfifo /tmp/sharkfile:创建一个命名管道文件,作为数据中转站
  • tcpdump -U:以 packet-buffered 模式输出,确保数据实时刷新
  • tcpdump -s0:抓取完整的数据包(不限制长度)
  • tcpdump -w -:将数据包写入标准输出,通过 SSH 传输到本地
  • tcpdump -i any:监听远程主机所有接口
  • wireshark -k -i /tmp/sharkfile:从命名管道实时读取并显示数据包

使用场景

  • 本地抓包:适用于调试本机与目标服务之间的通信问题
  • 远程抓包:适用于无法在远程服务器上安装 Wireshark,或者需要从本地分析远程流量的场景

注意事项

  • 两种方式都需要 root 权限(sudo)
  • 远程抓包时,确保 SSH 连接稳定,否则抓包会中断
  • 抓包完成后记得清理命名管道:rm /tmp/sharkfile