在 CentOS 上“sniffer 无数据”是一个很常见的问题,通常不是 sniffer 本身坏了,而是抓不到包或看不到预期流量。下面按最常见原因逐条说明。
很多 sniffer(tcpdump / wireshark / sniffer 工具)需要 root。
sudo tcpdump -i eth0
如果你是普通用户:
getcap /usr/sbin/tcpdump
若无 cap,则必须用 sudo。
CentOS 7/8 常见网卡名:
eth0ens192ens33查看真实网卡:
ip addr
错误示例:
tcpdump -i lo # 只能抓本机流量
正确示例:
tcpdump -i ens192
如果你在服务器上抓包,但:
那当然“无数据”。
测试是否有流量:
ping 8.8.8.8
同时抓包:
sudo tcpdump -i ens192
容器流量在 docker0 桥上:
tcpdump -i docker0
某些网卡启用了 offload,导致 tcpdump 看不到数据。
关闭 offload:
sudo ethtool -K ens192 tso off gso off gro off lro off
SELinux 一般不会阻止 sniffer,但某些安全模块会。
临时排查:
getenforce
setenforce 0
防火墙本身不阻止抓包,但可能:
例如:
tcpdump port 8080
但服务实际在 80。
先用最裸的:
tcpdump -i any
# 1. 看网卡
ip addr
# 2. 看流量
ping 8.8.8.8
# 3. 抓所有接口
sudo tcpdump -i any
# 4. 指定网卡
sudo tcpdump -i ens192
# 5. 关闭 offload
ethtool -K ens192 gso off gro off
请告诉我:
我可以直接给你一条能跑的命令。