带winpcap的C#开关-无限循环
我正在制作一个程序,根据MAC地址接收数据包并发送到PC的另一个端口(另一个端口也在做同样的事情,也发送他得到的数据)。但当我像这样打开设备时:带winpcap的C#开关-无限循环,c#,loops,winpcap,C#,Loops,Winpcap,我正在制作一个程序,根据MAC地址接收数据包并发送到PC的另一个端口(另一个端口也在做同样的事情,也发送他得到的数据)。但当我像这样打开设备时: device_port1.Open(DeviceMode.Promiscuous); 然后在一个端口上发送一些数据包,同一个端口得到的数据包和收到的数据包一样。当两个适配器执行相同的操作时,它们会一次又一次地相互发送一个数据包 我怎么能阻止这一切?我试过了 device_port1.Open(OpenFlags.NoCaptureLocal, 100
device_port1.Open(DeviceMode.Promiscuous);
然后在一个端口上发送一些数据包,同一个端口得到的数据包和收到的数据包一样。当两个适配器执行相同的操作时,它们会一次又一次地相互发送一个数据包
我怎么能阻止这一切?我试过了
device_port1.Open(OpenFlags.NoCaptureLocal, 1000);
但是它没有通过那个程序发送任何东西(然后它就没用了)
代码如下:
device_port0 = devices[pole[0]];
device_port0.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival_port0);
//device_port0.Open(OpenFlags.NoCaptureLocal, 1000);
device_port0.Open(DeviceMode.Promiscuous);
device_port0.StartCapture();
和邮包旅行
private void device_OnPacketArrival_port0(object sender, CaptureEventArgs packet)
{
device_port1 = devices[pole[1]];
device_port1.Open();
try
{
device_port1.SendPacket(packet.Packet.Data);
}
catch (Exception ee)
{
Console.Writeline("Exception: " + ee.Message);
}
}
在端口1上也是一样的。它只是发送他得到的,这就是循环的原因。我想两张网卡的地址相同吧?如果是而不是这种情况,那么在转发数据包之前,您必须检查数据包的目标网络是否是连接到第二个网卡的网络
但是,如果两张卡都有相同的地址,那么我能看到的唯一解决方案(我不是专家)就是有一个列表,在发送数据包后,您可以在其中存储短时间的数据包。每次捕获一个数据包时,您都会检查它是否已经在列表中(以检查它是否是您已经发送的数据包)。这种解决问题的方法效率很低,因为发送的每个数据包都会重新发送回来,但是它胜过了无限。您确切使用的名称空间是什么?我们需要额外的代码来帮助您。一行代码是不够的。我尝试过编辑,希望现在更好:)