0

我正在尝试制作一个程序,该程序将在多个网络设备上接收数据包并将它们发送到其他设备(如软件集线器)。我正在使用 C# 和 pcapdotnet。这个简单的方法捕获设备上的通信:

    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
}

问题是我不确定此解决方法是否可以提供所有数据包都将被成功接收和发送。

4

1 回答 1

1

我建议使用 ReceivePacket() 除非你发现你有一个真正的问题是由于使用它。

ReceivePacket() 使用简单,对于大多数应用程序来说已经足够了。

如果您仍想使用 ReceivePackets(),您可以创建一个带有回调方法的类,并为每个设备创建一个此类的实例。

于 2014-10-07T19:47:02.760 回答