【问题标题】:Duplicate Ethernet frame on virtual VLAN interface via RAW socket通过 RAW 套接字在虚拟 VLAN 接口上复制以太网帧
【发布时间】: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


【解决方案1】:

我尝试使用 BPF,当我使用 tcpdump 生成过滤规则时,我可以看到 eth0 和 eth0.100 接口生成的字节码是相同的。所以我放弃了这个想法。以下解决方案对我有用。

我删除了虚拟接口 eth0.100 并将我的原始套接字绑定到基本接口 eth0。发送帧时,我手动标记了帧。我在接收方面没有做任何特别的事情,因为基本接口获取了所有帧。现在我看不到之前看到的重复帧。

这仍然不能解释为什么我看到重复的帧。当我得到答案时会进一步调查并发布。

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 2017-02-16
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多