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