2012-10-05 32 views
1

我正在製作一個應該接收數據包的程序,並根據MAC地址將它發送到PC上的其他端口(其他端口正在執行相同操作,併發送他所獲得的數據)。但是,當我打開裝置是這樣的:C#開關 - 帶winpcap的無限循環

device_port1.Open(DeviceMode.Promiscuous); 

,然後發送一些數據包在一個端口上,就像是收到了相同的端口獲得相同的數據包。當兩個適配器都做同樣的事情時,他們一遍又一遍地發送對方一個數據包。

我怎麼能阻止呢?我試過

device_port1.Open(OpenFlags.NoCaptureLocal, 1000); 

但它沒有通過該程序發送任何東西(然後它沒用)。

這是代碼:

 device_port0 = devices[pole[0]]; 
     device_port0.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival_port0); 
     //device_port0.Open(OpenFlags.NoCaptureLocal, 1000); 
     device_port0.Open(DeviceMode.Promiscuous); 
     device_port0.StartCapture(); 

而且onPacketArrival

private void device_OnPacketArrival_port0(object sender, CaptureEventArgs packet) 
     { 
      device_port1 = devices[pole[1]]; 
      device_port1.Open(); 

      try 
      { 
       device_port1.SendPacket(packet.Packet.Data); 
      } 
      catch (Exception ee) 
      { 
       Console.Writeline("Exception: " + ee.Message); 
      } 
     } 

而且在PORT1是一樣的。它只是發送他得到的東西,這就是循環的原因。

+0

你正在使用哪個命名空間? – Paedow

+0

我們需要額外的代碼才能爲您提供幫助。一行代碼是不夠的。 –

+0

我試圖編輯,希望現在更好:) – Tunerx

回答

0

我把它同時網卡有相同的地址?如果這是不是的情況下,在轉發數據包之前,您必須檢查數據包的目標網絡是否是連接到第二個網卡的網絡。

如果兩張卡的地址相同,那麼唯一的解決方案是我可以看到(我不是專家),就是有一些列表,在發送它們後短時間內存儲數據包。每次你捕獲一個數據包,你都會檢查它是否已經在列表中(檢查它是否已經發送)。這種解決問題的方式效率低下,因爲發送的每個數據包都會再次發回但是它會跳動無限。