2014-10-07 85 views
0

使用設備我試圖做出會收到多個網絡設備的數據包,並送他們上的其他設備(像軟件中心)的程序。我正在使用C#和pcapdotnet。這個簡單的方法捕獲設備通信:C#pcapdotnet ReceivePackets回調

public void sniff(LivePacketDevice device) 
    { 
     using(PacketCommunicator comm = device.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000)) 
     { 
      comm.ReceivePackets(0, printandsend); 
     }   
    } 

在回調方法「printandsend」我想每個設備上發送數據包,除非數據包是從哪裏來的設備。爲防止將數據包發送到設備,我需要知道從哪個設備發送數據包。問題是,我不知道如何解析當前使用的設備到該回調方法。方法之外的變量對我來說不是一個解決方案,因爲捕獲數據包可以同時在多個設備上使用。通過創建「嗅探」方法的線程在同一時間捕獲設備。

有一個可能的解決方法使用方法receivePacket:

Packet packet; 
While(true) 
{ 
    comm.ReceivePacket(out packet); 
    send(packet,device)     
    //this would send packet on every device except the one which is used as a parameter 
} 

問題是,我不知道,如果這個解決方法可以提供所有的數據包將被成功地接收和發送。

回答

1

我建議使用ReceivePacket(),除非你發現你有一個現實的問題是,由於使用它。

ReceivePacket()是使用簡單,將是對於大多數應用足夠好。

如果你仍然想使用ReceivePackets(),您可以創建一個具有回調方法的類併爲每個設備創建這個類的一個實例。