С# pcapdotnet ReceivePackets использует устройство в обратном вызове

Я пытаюсь сделать программу, которая будет получать пакеты на несколько сетевых устройств и отправлять их на другие устройства (что-то вроде программного концентратора). Я использую С# и 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
}

Проблема в том, что я не уверен, может ли этот обходной путь обеспечить успешный прием и отправку всех пакетов.


person aron23    schedule 07.10.2014    source источник


Ответы (1)


Я предлагаю использовать ReceivePacket(), если вы не обнаружите, что у вас есть реальная проблема, связанная с его использованием.

ReceivePacket() прост в использовании и подходит для большинства приложений.

Если вы все еще хотите использовать ReceivePackets(), вы можете создать класс с методом обратного вызова и создать экземпляр этого класса для каждого устройства.

person brickner    schedule 07.10.2014