首页/网络/抓包与流量分析速查/tcpdump -p 关闭混杂模式

tcpdump -p 关闭混杂模式

默认情况下 tcpdump 会把网卡置于混杂模式以接收非本机 MAC 的帧;-p 关闭该行为,只抓发给本机的流量,减少无关噪音,也是部分云环境的合规要求。

-p 是干什么的

默认情况下 tcpdump 会把网卡置为混杂模式,接收目的地址不是本机网卡的帧;-p 关闭这一行为,只抓发给本机的流量。它能减少无关噪音,在部分云主机与虚拟化平台上也是更稳妥的做法,避免因驱动行为差异导致结果不一致。

基本信息

适用平台Linux / macOS / BSD 上的 tcpdump
语法tcpdump -p [选项] [过滤表达式]
默认行为启用混杂模式
开启后的效果只接收发给本机网卡的帧
补充认识交换网络中本来也看不到其他主机的单播

典型使用场景

  • 排查本机自身问题,希望减少无关噪音
  • 在云主机上抓包,避免平台侧行为差异带来干扰
  • 确认本机是否被人扫描:只看发给自己的报文更清晰
  • 虚拟化环境中避免收到虚拟交换机广播来的无关帧
  • 复现问题时让抓包结果更稳定、更易解释

常用示例

常用示例
tcpdump -i eth0 -nn -p -c 10 'tcp port 443'      # 关闭混杂模式抓取
tcpdump -i eth0 -nn -p -c 20 icmp                # 只看发给本机的 ICMP
tcpdump -i eth0 -nn -c 20                        # 默认(开启混杂模式)对比效果

场景对比

场景开启混杂模式关闭混杂模式
排查本机问题噪音较多更干净,推荐
云主机环境部分平台被过滤行为更一致
镜像口分析无影响无影响
确认本机是否被扫描噪音干扰判断更容易识别扫描
在交换机环境下,普通主机即使开启混杂模式也抓不到其他主机的单播流量,需要端口镜像。
部分虚拟化平台会在数据面过滤无关帧,两种模式的结果可能完全一样。

补充要点

  • 复现他人抓包结果时,混杂模式设置不一致可能造成样本差异
  • 排查本机被扫描的问题时,关闭混杂模式能让结果更聚焦
  • 抓包前记录所使用的选项,便于他人复现同一份证据
  • 物理链路与虚拟链路的行为差异较大,结论要写清环境
需要分析全网广播或组播时,仍应在交换机侧做镜像或端口抓包,而不是依赖主机网卡。

易错点

  • 以为开启混杂模式就能抓到同网段其他主机的流量,忽略交换网络的分域特性
  • 不同环境用不同模式抓包后直接对比结果,得出「流量少了」的错误结论
  • 在虚拟化平台上依赖混杂模式判断链路问题,忽略数据面的过滤行为

数据来源与参考

  • man 8 tcpdump(-p 选项)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌