【发布时间】:2023-03-13 00:03:01
【问题描述】:
我正在处理原始以太网帧。我的 Linux 机器上有一个以太网接口 eth0 和一个虚拟 VLAN 接口 eth0.100。我的 RAW 套接字绑定到虚拟接口 eth0.100。问题是当一个带有 VLAN 标记(VLAN ID=100)的帧从外部传输到这个接口时,我的应用程序会得到同一个以太网帧的两个副本。从应用程序中我看不到这些帧之间的区别,有效载荷的内容完全相同。我的界面没有在混杂模式下运行。
我使用 tcpdump 捕获帧,下面是结果
- eth0:这会得到一个带有 VLAN 标记的帧 - 100。
- eth0.100:这会得到一个没有 VLAN 标记的帧。
如果我绑定到 eth0,我仍然会得到两个帧副本。但是如果我删除 eth0.100 并绑定到 eth0,我只会得到一份副本。即使我只绑定到 eth0.100,我的应用程序是否会获得两份框架副本,一份来自 eth0,一份来自 eth0.100?
我尝试使用 BPF,但不确定在 eth0.100 上使用什么过滤器。
【问题讨论】:
-
代码呢?
-
其正常的原始套接字编程。我已经绑定到虚拟接口eth0.100,这是唯一的区别。
-
我们不知道什么是正常的。我可以提供查看 tcpdump(或 wireshark)源代码。
标签: c linux filtering raw-sockets vlan