我正在使用Sharppcap将多播udp数据包转换为单播,然后将数据包转发到另一个网络 我建立了隧道IPsec 两个网络之间的连接,如下面的场景IPsec-tools和racoon,它工作正常
但是在gateway1中我使用sharppcap运行一个简单的程序,它监听eth1以捕获来自网络A的所有多播udp数据包,并将目标地址更改为gateway2的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);
}
}
}
修改后的数据包到达其他网络中的目的地,但仍未在gateway1和gateway2之间的隧道中加密 我认为解决方案是让操作系统处理发送数据包 但我不知道如何使用sharppcap来做到这一点。
答案 0 :(得分:0)
libpcap / winpcap(以及Sharppcap)通过pcap_sendpacket/pcap_inject()发送数据包。这些是原始数据包,因此如果您想使用加密,则必须在发送数据包时自行应用,因为这些调用绕过操作系统中的更高级别的通信堆栈。
也许您可以使用混合方法通过Sharppcap接收数据包,然后使用IPSec隧道,因为通常将其用作应用程序,例如。打开两个系统之间的套接字并通过该套接字发送数据包。这将让操作系统通过IPSec隧道路由数据。