我正在处理原始以太网帧。我的Linux机器上有一个以太网接口eth0和一个虚拟VLAN接口eth0.100。我的原始套接字绑定到虚拟接口eth0.100。问题是,当一个带有VLAN标签(VLAN ID=100)的帧被外部传输到这个接口时,我的应用程序会得到同一个以太网帧的两个副本。从应用程序中我看不出这些帧之间的区别,有效负载的内容完全相同。我的界面不是在混乱模式下运行的。
我使用tcpdump来捕获帧,结果如下
eth0:这会得到一个标记为-100的VLAN帧。
eth0.100:这将获取一个未标记VLAN的帧。
如果我绑定到eth0,我仍然会得到两个帧的副本。但是如果我删除eth0.100并绑定到eth0,我只得到一个副本。我的应用程序是否得到两个帧副本,一个来自eth0,一个来自eth0.100,即使我只绑定到eth0.100?
我试图使用BPF,但我不确定eth0.100上使用什么过滤器。

最佳答案

我尝试使用BPF,当我使用tcpdump生成过滤规则时,我可以看到生成的字节码对于eth0和eth0.100接口都是相同的。所以我放弃了这个想法。下面的解决方案对我有效。
我删除了虚拟接口eth0.100,并将原始套接字绑定到基本接口eth0。当发送一个帧时,我手动的VLAN标记了这个帧。我没有做任何特别的接收,因为基本接口得到所有的帧。现在我看不到之前看到的重复帧。
这仍然不能解释为什么我看到重复的帧。将进一步调查,并在我得到答案后发布。

关于c - 通过RAW套接字在虚拟VLAN接口(interface)上复制以太网帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37152515/

10-15 15:01