带LAA位MAC地址的路由数据包拦截技术咨询
问题解答
1. 带LAA位的源MAC地址数据包是否会被路由器/交换机丢弃?
不会。LAA(本地管理地址,即私有MAC)仅表示该地址是本地手动分配的,而非厂商预置的合法地址,但路由器和交换机默认不会基于这个字段丢弃数据包:
- 路由器工作在网络层,只要数据包的三层IP地址合法可路由,就会正常转发,不会检查二层MAC的LAA标记;
- 交换机工作在数据链路层,只要数据包的目标MAC在转发表中,或属于广播/组播范围,就会转发,不会过滤LAA位的源MAC。
这就是你设置LAA源MAC后,数据包仍能通过路由器到达B的原因。
2. 如何设置MAC/帧字段实现需求?
要满足「直连场景正常收发,路由场景数据包被路由器丢弃且本地设备无法接收」的需求,可采用以下两种方案:
方案一:使用IEEE保留的本地链路组播MAC
- 发送端配置:将以太网帧的目标MAC设置为IEEE保留的本地链路组播地址(范围
01:80:C2:00:00:00至01:80:C2:00:00:FF)中未被使用的地址,比如01:80:C2:00:00:10;源MAC可使用正常地址或LAA地址。 - 接收端配置:在直连场景下,让B的网卡加入该组播组,或通过libpcap设置过滤规则,仅捕获目标MAC为该组播地址的数据包。
- 效果:
- 直连场景:交换机仅会将该组播数据包转发至加入该组播组的端口(即B的端口),B可正常接收,本地其他设备因未加入组播组无法收到;
- 路由场景:路由器默认不会转发本地链路组播数据包,直接丢弃,B无法收到。
方案二:使用自定义以太网帧类型
- 发送端配置:将以太网帧的
ether_type字段设置为未被IANA分配的自定义值(比如0xABCD),目标MAC设为B的实际物理MAC(直连场景);源MAC无特殊限制。 - 接收端配置:在直连场景下,通过libpcap设置过滤规则,仅捕获帧类型为自定义值的数据包。
- 效果:
- 直连场景:B的libpcap可直接抓取到自定义帧类型的数据包,正常接收;
- 路由场景:路由器无法识别自定义帧类型,会直接丢弃数据包;本地其他设备的网卡因不识别该帧类型,会自动丢弃,不会交给上层协议处理。
内容的提问来源于stack exchange,提问作者Dmitry Gorelov
相关产品推荐
相关产品推荐

