远程网关usb0接口tcpdump数据包转发至本地Wireshark失败的问题排查
远程网关usb0接口tcpdump数据包转发至本地Wireshark失败的问题排查
我之前也碰到过类似的远程抓包踩坑经历,结合你的场景咱们一步步捋清楚问题:
先排查最容易忽略的抓包缓冲问题
你在网关用tcpdump能看到包,但本地Wireshark收不到,最常见的原因是tcpdump的输出缓冲机制:默认情况下tcpdump会把抓到的包先缓冲起来,攒够一定量才会输出给后续工具(比如nc或者SSH隧道),这就导致本地迟迟看不到实时流量。
解决方法很简单,给tcpdump加-U参数(行缓冲模式),让它抓到包就立刻输出:
tcpdump -i usb0 -U -w -
检查SSH端口转发的正确性
如果你的转发逻辑有问题,流量也传不到本地:
- 假设你要把网关的30000端口转发到本地的20000端口,本地执行的SSH转发命令应该是:
ssh -L 127.0.0.1:20000:127.0.0.1:30000 网关用户名@网关IP - 然后在网关端把
tcpdump的输出通过nc发到本地监听的30000端口:tcpdump -i usb0 -U -w - | nc 127.0.0.1 30000 - 本地再用Wireshark读取这个端口的流量:
nc 127.0.0.1 20000 | wireshark -k -i -
验证连通性与权限
- 测试SSH隧道是否生效:本地执行
telnet 127.0.0.1 20000,如果能连通说明隧道没问题;连不通的话,去网关的/etc/ssh/sshd_config里检查AllowTcpForwarding是否设为yes,有没有禁止端口转发的规则。 - 抓包权限检查:确保运行
tcpdump的用户有足够权限(要么用root,要么给用户添加cap_net_raw权限),不然tcpdump可能抓不到完整流量。 - 防火墙拦截排查:暂时关闭网关和Ubuntu VM的防火墙(比如Ubuntu执行
ufw disable,网关执行iptables -F)测试,说不定是防火墙把转发端口的流量拦住了。
更省心的替代方案:用Wireshark自带的远程抓包功能
其实Wireshark本身支持通过SSH直接远程抓包,不用手动折腾nc和端口转发:
- 打开Wireshark,点击「捕获」→「选项」
- 点击「远程接口」,添加网关的SSH连接信息(IP、用户名、密钥/密码)
- 选择网关的
usb0接口,点击「开始」就能直接捕获
这个方法Wireshark会自动处理SSH隧道和抓包细节,出错概率低很多。
你可以先从给tcpdump加-U参数开始排查,这个是最容易踩的坑。
备注:内容来源于stack exchange,提问作者Nemesis
相关产品推荐
相关产品推荐

