1

私は、MACアドレスに基づいて、パケットを受信して​​PCの他のポートに送信するプログラムを作成しています(他のポートも同じことを行っており、取得したものも送信します)。しかし、私がこのようにデバイスを開くと:

device_port1.Open(DeviceMode.Promiscuous);

次に、1つのポートでパケットを送信すると、同じポートが受信したのと同じパケットを取得します。そして、両方のアダプターが同じことをしているとき、それらはお互いに1つのパケットを何度も送信しています。

どうすればこれを止めることができますか?私は試した

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

両方のネットワークカードが同じアドレスを持っていると思いますか? そうでない場合は、パケットを転送する前に、パケットの宛先ネットワークが 2 番目のネットワーク カードに接続されているネットワークであるかどうかを確認する必要があります。

ただし、両方のカードが同じアドレスを持っている場合、私が見ることができる唯一の解決策 (私は専門家ではありません) は、パケットを送信した後、パケットを短時間保存するリストを作成することです。そして、パケットをキャプチャするたびに、それがすでにリストにあるかどうかを確認します(すでに送信したものかどうかを確認するため)。送信されたすべてのパケットが再送信されるため、問題を解決するこの方法は非効率的ですが、無限に勝ります。

于 2012-10-12T23:55:05.880 に答える