我正在尝试制作一个程序,它将在多个网络设备上接收数据包并将其发送到其他设备(如软件中心)。我正在使用C#和pcapdotnet。这种简单的方法可以捕获设备上的通信:
public void sniff(LivePacketDevice device)
{
using(PacketCommunicator comm = device.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000))
{
comm.ReceivePackets(0, printandsend);
}
}
在回调方法" printandsend"我想在每个设备上发送数据包,除了数据包来自的设备。为了防止将数据包发送到它来自的设备,我需要知道来自哪个设备数据包。问题是我无法弄清楚如何将当前使用的设备解析为该回调方法。方法之外的变量对我来说不是解决方案,因为捕获数据包同时在多个设备上使用。通过创建" sniff"的线程,在同一时间内捕获设备。方法
使用方法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
}
问题是我不确定此解决方法是否可以提供所有数据包将成功接收和发送。
答案 0 :(得分:1)
我建议使用ReceivePacket(),除非您发现有使用它的真正问题。
ReceivePacket()使用简单,对大多数应用程序都足够好。
如果您仍想使用ReceivePackets(),可以使用回调方法创建一个类,并为每个设备创建此类的实例。