Sharppcap 如何使用 ubuntu 中的路由发送数据包?

Sharppcap how to send packets using the route in ubuntu?

我正在使用 Sharppcap 将多播 udp 数据包转换为单播,然后将数据包转发到另一个网络 我建立了一个隧道 IPsec 两个网络之间的连接,如以下场景 IPsec-tools 和 racoon,它工作正常

但是在网关 1 中,我 运行 一个简单的程序使用 sharppcap 侦听 eth1 以捕获来自网络 A 的所有多播 udp 数据包并将目标地址更改为网关 2 的 eth1 地址然后重新发送它然后另一个网关将数据包更改为多播并将其转发到网络 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 来完成。

libpcap/winpcap(因此 Sharppcap)通过 pcap_sendpacket/pcap_inject() 发送数据包。这些是原始数据包,所以如果你想使用加密,你必须在发送数据包时自己应用加密,因为这些调用绕过了 OS.

中的更高级别的通信堆栈

也许您可以使用一种混合方法,即使用 Sharppcap 接收数据包,然后像通常将其用作应用程序一样使用 IPSec 隧道,例如。打开两个系统之间的套接字并通过该套接字发送数据包。这将使 OS 通过 IPSec 隧道路由数据。