首页/网络/网络排障速查/远程抓包与流式回传

远程抓包与流式回传

生产主机不能装 Wireshark 时的标准动作:ssh 执行 tcpdump 把 pcap 流回本地分析;用 -U -w - 保证流式可用,大数据量再考虑限速与分段。

网络排障速查网络更新于 2026-10-13

远程抓包是什么

远程抓包指不在目标主机上安装图形分析工具,而是通过 ssh 在远端执行 tcpdump,把 pcap 字节流回传到本地再分析。它适用于生产服务器禁止安装额外软件、或本地没有可视化环境的情况;核心手法是让 tcpdump 把数据写到标准输出(-w -),再由本地 shell 重定向落盘,让抓取与分析彻底分离。

基本信息

适用平台Linux(tcpdump + libpcap)+ OpenSSH 客户端
权限要求远端需 root 或 CAP_NET_RAW,本地只需写文件权限
关键参数-w - 写入 stdout、-U 立即刷出、-s 0 抓全包
典型场景生产机不允许装 Wireshark,只需要原始报文

典型使用场景

  • 业务报障但只能登服务器:把 pcap 拉回本地用 Wireshark 做协议级分析
  • 多台机器同时取证:脚本并行 ssh 抓包,统一归档到一台分析机
  • 磁盘紧张的容器或云主机:只抓头部(-s 96)并流式回传,现场几乎不留文件
  • 限时抓取:用 timeout 包住命令,到点自动停止,避免忘记关闭长期占用带宽

远程抓包与核对

远程抓包与核对
# 远端抓、本地存,-U 让数据边抓边出,适合较长抓取
ssh user@10.0.0.5 'sudo timeout 60 tcpdump -i eth0 -nn -s 0 -U -w - port 443' > /tmp/remote.pcap
# 带宽受限时先压缩再回传
ssh user@10.0.0.5 'sudo tcpdump -i eth0 -nn -s 0 -w - port 443' | gzip > /tmp/remote.pcap.gz
# 抓完立即核对完整性,截断的 pcap 读取会报错
tcpdump -nn -r /tmp/remote.pcap 2>&1 | head -3
tcpdump -nn -r /tmp/remote.pcap 2>/dev/null | wc -l

回传方式对照

方式命令要点适用与代价
直接重定向-w - 接 > file.pcap最简单,ssh 中断即产生截断文件
压缩后回传-w - 接 | gzip省带宽与磁盘,双方 CPU 上升
分片轮转-w - -C 100 -W 20每 100MB 切一个、最多 20 个,适合长时抓取
只留头部-s 96 -w -开销最小,但看不到载荷内容
远程抓包会真实消耗生产机的 CPU、内存与带宽:先写清过滤条件与时长上限(如 timeout 60、port 443),抓完立刻确认抓包进程已退出,不要留在后台。
ssh 会话里的任何多余输出都会混进 pcap:用 -w - 时不要在远端打印文字、也不要加 -v 之外的杂项输出,否则本地文件会损坏且难以排查来源。

易错点

  • ssh 中断导致本地 pcap 截断:读取时报 malformed 或 unexpected EOF,重抓时加 -U 并配合 gzip 归档可降低影响
  • 无过滤条件对高流量接口远程抓包:把生产机带宽与磁盘打满,应先加 port/host 过滤再抓
  • 忘记加 -U:数据攒在用户态缓冲里,文件长时间为空,被误判为『这条链路没有流量』
  • 远端 sudo 需要 TTY 却用无 tty 方式执行:报 sudo 需要终端,应改用 ssh -t 或为抓包单独配置免密 sudo

数据来源与参考

  • man 8 tcpdump(-w - 与 -U)
  • OpenSSH 文档:ssh 远程执行

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌