【问题标题】:Sharppcap how to send packets using the route in ubuntu?Sharppcap如何使用ubuntu中的路由发送数据包?
【发布时间】:2015-04-08 03:15:50
【问题描述】:

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

但在 gateway1 中,我运行一个使用 sharppcap 的简单程序,它监听 eth1 以捕获来自网络 A 的所有多播 udp 数据包,并将目标地址更改为 gateway2 的 eth1 地址,然后重新发送它,然后另一个网关将数据包更改为多播和转发到网络 B。 我这样做是因为 IPsec 隧道模式不适用于多播 例如在网关1:

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。

【问题讨论】:

    标签: ubuntu networking multicast sharppcap


    【解决方案1】:

    libpcap/winpcap(以及 Sharppcap)通过pcap_sendpacket/pcap_inject() 发送数据包。这些是原始数据包,因此如果您想使用加密,则必须在发送数据包时自行应用,因为这些调用绕过了操作系统中更高级别的通信堆栈。

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

    【讨论】:

    • 谢谢@Chris 有什么方法可以使用sharpcap打开两个网关之间的套接字,你能给我一个例子吗
    • @AhmadDarwish,你会像打开任何其他套接字一样打开套接字。 msdn.microsoft.com/en-us/library/kb5kfec7%28v=vs.110%29.aspx 这真的取决于你想要同步还是异步,哪个端口,什么协议等。
    • 谢谢,问题是当我使用套接字时,我丢失了原始数据包的源 IP 地址,因为套接字接受只能从本地地址之一发送,它不能绑定到原始源ip 地址,这在我的应用程序中是不可接受的我需要找到另一种方法来做到这一点
    • 端点必须看到原始ip吗?为什么不让您的应用程序(及其运行的系统)成为远程端的端点?它看起来并不透明,但要获得它,您需要编写一个防火墙数据包过滤应用程序。
    猜你喜欢
    • 2015-03-18
    • 2012-12-05
    • 2012-12-16
    • 1970-01-01
    • 2010-12-24
    • 2011-02-08
    • 2016-02-13
    • 1970-01-01
    • 2012-02-21
    相关资源
    最近更新 更多