2015-02-08 91 views
0

我使用Sharppcap組播UDP數據包,以單播,然後將數據包轉發到另一個網絡 我建立了兩個網絡之間,如以下情形IPsec的工具和浣熊隧道的IPsec 連接轉換,它工作正常Sharppcap如何使用ubuntu中的路由發送數據包?

diagram

但是在gateway1中,我運行一個簡單的程序,使用sharppcap監聽eth1,捕獲來自網絡A的所有多播udp數據包,並將目標地址更改爲gateway2的eth1地址,然後重新發送,然後另一個網關將數據包更改爲多播並轉發到網絡B. 我這樣做是因爲IPsec隧道模式doe sn't組播 工作,例如在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來做到這一點。

回答

0

libpcap/winpcap(因此Sharppcap)通過pcap_sendpacket/pcap_inject()發送數據包。這些都是原始數據包,因此如果您想使用加密,則在發送數據包時必須自己應用這些數據包,因爲這些調用正繞過操作系統中較高級別的通信堆棧。

也許你可以使用混合方式接收Sharppcap的數據包,然後使用IPSec隧道,正如通常將它用作應用程序一樣,例如。在兩個系統之間打開一個套接字並通過該套接字發送數據包。這將讓操作系統通過IPSec隧道路由數據。

+0

感謝@克里斯 有沒有什麼辦法打開使用sharppcap 你可以給我一個例子 – 2015-02-09 08:43:17

+0

@AhmadDarwish兩個網關之間的插槽,你會打開插座,就像您其他任何插座。 https://msdn.microsoft.com/en-us/library/kb5kfec7%28v=vs.110%29.aspx這真的取決於,如果你想同步與異步,哪個端口,什麼協議等 – 2015-02-09 15:47:54

+0

謝謝,問題是當我使用套接字時,我丟失了原始數據包的源IP地址,因爲套接字只接受來自其中一個本地地址的發送,它不能綁定到原始源IP地址 ,這在我的應用程序中是不可接受的 我需要找到另一種方式來執行此操作 – 2015-02-10 12:30:14

相關問題