2016-05-11 31 views
0

我正在處理原始以太網幀。我的Linux機器上有一個以太網接口eth0和一個虛擬VLAN接口eth0.100。我的RAW套接字綁定到虛擬接口eth0.100。問題是,當VLAN標記(VLAN ID = 100)幀從外部傳輸到此接口時,我的應用程序會獲得同一以太網幀的兩個副本。從應用程序我看不出這些幀之間的差異,有效載荷的內容是完全相同的。我的界面不是在混雜模式下操作。通過RAW接口在虛擬VLAN接口上覆制以太網幀

我用tcpdump的捕捉幀和下面是結果

  • 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(或wireshark)源代碼。 – someuser

回答

0

我試圖使用BPF,當我使用tcpdump生成過濾規則時,我可以看到生成的字節代碼對於eth0和eth0.100接口都是相同的。所以我放棄了這個想法。下面的解決方案爲我工作。

我刪除了虛擬接口eth0.100,並將原始套接字綁定到基本接口eth0。發送幀時,我手動爲VLAN標記幀。我沒有做任何特別的接收,因爲基礎接口獲得所有幀。現在我沒有看到我之前看到的重複幀。

這仍然不能解釋爲什麼我看到重複的幀。當我得到答案時,會進一步調查併發帖。