-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 # 默认(开启混杂模式)对比效果场景对比
| 场景 | 开启混杂模式 | 关闭混杂模式 |
|---|---|---|
| 排查本机问题 | 噪音较多 | 更干净,推荐 |
| 云主机环境 | 部分平台被过滤 | 行为更一致 |
| 镜像口分析 | 无影响 | 无影响 |
| 确认本机是否被扫描 | 噪音干扰判断 | 更容易识别扫描 |
在交换机环境下,普通主机即使开启混杂模式也抓不到其他主机的单播流量,需要端口镜像。
部分虚拟化平台会在数据面过滤无关帧,两种模式的结果可能完全一样。
补充要点
- 复现他人抓包结果时,混杂模式设置不一致可能造成样本差异
- 排查本机被扫描的问题时,关闭混杂模式能让结果更聚焦
- 抓包前记录所使用的选项,便于他人复现同一份证据
- 物理链路与虚拟链路的行为差异较大,结论要写清环境
需要分析全网广播或组播时,仍应在交换机侧做镜像或端口抓包,而不是依赖主机网卡。