远程实时抓包与本地抓包命令
目录
远程实时抓包与本地抓包命令
在网络调试中,抓包是最常用的手段之一。本文介绍两种常用的抓包方式:本地直接抓包和远程实时抓包,都可以配合 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