2016-05-11 2 views
0

Я работаю с необработанными кадрами Ethernet. У меня есть интерфейс Ethernet eth0 и виртуальный VLAN-интерфейс eth0.100 на моей машине Linux. Мой сокет RAW привязан к виртуальному интерфейсу eth0.100. Проблема в том, что, когда на этот интерфейс передается фрейм VLAN с идентификатором (VLAN ID = 100), мое приложение получает две копии одного и того же фрейма Ethernet. Из приложения я не вижу разницы между этими кадрами, содержание полезной нагрузки точно такое же. Мой интерфейс НЕ работает в беспорядочном режиме.Дублирующий Ethernet-фрейм на виртуальном интерфейсе VLAN через гнездо RAW

Я использовал ТСРйитр для захвата кадров и ниже результат

  • eth0: Это получает один кадр, который меченый VLAN - 100.
  • eth0.100: Это получает один кадр, который НЕ является VLAN помечено.

Если я привяжусь к eth0, я все равно получаю две копии рамки. Но если я удалю eth0.100 и привяжусь к eth0, я просто получу одну копию. Мое приложение получает две копии фрейма, один из eth0 и один из eth0.100, хотя я привязан ТОЛЬКО к eth0.100?

Я попытался использовать BPF, но я не уверен, какой фильтр использовать для eth0.100.

+0

Как насчет кода? – someuser

+0

Его нормальное программирование сокетов. Я привязался к виртуальному интерфейсу eth0.100, это единственное различие. – Neo

+0

Мы не знаем, что для вас нормально. Я могу предложить посмотреть исходный код tcpdump (или wirehark). – someuser

ответ

0

Я попытался использовать BPF, когда я сгенерировал правило фильтрации с помощью tcpdump, я мог видеть, что сформированный байт-код был одинаковым для обоих интерфейсов eth0 и eth0.100. Поэтому я отказался от этой идеи. Ниже решение работало для меня.

Я удалил виртуальный интерфейс eth0.100 и связал свой raw-сокет с базовым интерфейсом eth0. При отправке фрейма я вручную VLAN помещал фрейм. Я не делаю ничего особенного на приеме, поскольку базовый интерфейс получает все кадры. Теперь я не вижу дубликатов кадров, которые я видел раньше.

Это все еще не объясняет, почему я видел дубликаты кадров. Будут исследовать дальше и публиковать, когда я получу ответ.

Смежные вопросы