Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带winpcap的C#开关-无限循环_C#_Loops_Winpcap - Fatal编程技术网

带winpcap的C#开关-无限循环

带winpcap的C#开关-无限循环,c#,loops,winpcap,C#,Loops,Winpcap,我正在制作一个程序,根据MAC地址接收数据包并发送到PC的另一个端口(另一个端口也在做同样的事情,也发送他得到的数据)。但当我像这样打开设备时: device_port1.Open(DeviceMode.Promiscuous); 然后在一个端口上发送一些数据包,同一个端口得到的数据包和收到的数据包一样。当两个适配器执行相同的操作时,它们会一次又一次地相互发送一个数据包 我怎么能阻止这一切?我试过了 device_port1.Open(OpenFlags.NoCaptureLocal, 100

我正在制作一个程序,根据MAC地址接收数据包并发送到PC的另一个端口(另一个端口也在做同样的事情,也发送他得到的数据)。但当我像这样打开设备时:

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上也是一样的。它只是发送他得到的,这就是循环的原因。

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


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

您确切使用的名称空间是什么?我们需要额外的代码来帮助您。一行代码是不够的。我尝试过编辑,希望现在更好:)