1

我正在制作应该接收数据包并将其发送到 PC 上的另一个端口的程序(其他端口也在做同样的事情,也发送他得到的东西),基于 MAC 地址。但是当我这样打开设备时:

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();

和 onPacketArrival

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);
            }
        }

和在port1上是一样的。它只是发送他得到的东西,这就是循环的原因。

4

1 回答 1

0

我认为这两个网卡具有相同的地址?如果不是这种情况,那么在转发数据包之前,您必须检查数据包的目标网络是否是连接到第二个网卡的网络。

但是,如果两张卡具有相同的地址,那么我能看到的唯一解决方案(我不是专家)是有某种列表,您可以在发送数据包后短时间存储数据包。每次您捕获一个数据包时,您都会检查它是否已经在列表中(检查它是否是您已经发送的数据包)。这种解决问题的方法效率低下,因为发送的每个数据包都会再次重新发送,它胜过无穷大。

于 2012-10-12T23:55:05.880 回答