0

Sharppcap を使用して、マルチキャスト udp パケットをユニキャストに変換し、パケットを別のネットワークに転送しています。次のシナリオのような 2 つのネットワーク間にトンネル IPsec 接続を確立しました IPsec-tools と racoon は正常に動作します

ダイアグラム

しかし、gateway1 では、eth1 をリッスンしてネットワーク A からすべてのマルチキャスト udp パケットをキャプチャし、宛先アドレスをゲートウェイ 2 の eth1 アドレスに変更して再送信し、他のゲートウェイがパケットをマルチキャストに変更して転送する、sharppcap を使用する簡単なプログラムを実行します。ネットワーク B. IPsec トンネル モードがマルチキャストで機能しないため、これを行いました。たとえば、gatway1 では次のようになります。

private static void device_PcapOnPacketArrival(object sender, PcapCaptureEventArgs e)
        {   
            if(e.Packet is UDPPacket)
            {               
                UDPPacket udp = (UDPPacket)e.Packet;
                System.Net.IPAddress dstIp = udp.DestinationAddress;
              if (dstIp.ToString() == "224.5.6.7")
                {
                    udp.DestinationAddress= IPAddress.Parse("192.168.2.1");
                    udp.SourceHwAddress= System.Net.NetworkInformation.PhysicalAddress.Parse("A0-48-1C-D6-7E-C0");
                    udp.DestinationHwAddress= System.Net.NetworkInformation.PhysicalAddress.Parse("A0-48-1C-D6-D5-90");
                    udp.TimeToLive=20;
                    udp.ipv4.IPChecksum= udp.ComputeIPChecksum();
                    device1.SendPacket(udp);
                }
            }
        }

変更されたパケットは他のネットワークの宛先に到達しますが、ゲートウェイ 1 とゲートウェイ 2 の間のトンネルではまだ暗号化されていません。解決策は、オペレーティング システムにパケットの送信を処理させることだと思いますが、sharppcap を使用してそれを行う方法がわかりません。

4

1 に答える 1

0

libpcap/winpcap (および Sharppcap) は、pcap_sendpacket/pcap_inject () 経由でパケットを送信します。これらは raw パケットであるため、暗号化を使用する場合は、これらの呼び出しが OS の上位レベルの通信スタックをバイパスしているため、パケットを送信するときに自分で暗号化を適用する必要があります。

おそらく、Sharppcap でパケットを受信し、IPSec トンネルを通常のアプリケーションとして使用するハイブリッド アプローチを使用できます。2 つのシステム間のソケットを開き、そのソケットを介してパケットを送信します。これにより、OS は IPSec トンネルを介してデータをルーティングできます。

于 2015-02-08T15:42:55.867 に答える