2015-02-08 4 views
0

Я использую Sharppcap для преобразования многоадресных UDP пакетов Unicast затем пересылают пакет в другую сеть Я установил туннель IPsec соединения между двумя сетями, как следующий сценарием IPsec-инструменты и енот и работает отличноSharppcap как отправлять пакеты, используя маршрут в ubuntu?

diagram

Но в gateway1 я запускаю простую программу с использованием sharppcap, которые слушают eth1 для захвата всех пакетов многоадресного udp из сети A и изменения адреса назначения на eth1-адрес шлюза2, а затем повторно отправить его, а другой шлюз изменяет пакет на многоадресную рассылку и переслать его в сеть B. Я сделал это, потому что режим туннеля IPsec 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); 
       } 
      } 
     } 

Модифицированный пакет попадает к месту назначения в другой сети, но до сих пор не шифруется в туннеле между gateway1 и gateway2 Я думаю, что решение это позволить дескриптор операционной системы, отправляющий пакеты Но я не знаю, как это сделать, используя sharppcap.

ответ

0

libpcap/winpcap (и, следовательно, Sharppcap) отправляет пакеты через pcap_sendpacket/pcap_inject(). Это необработанные пакеты, поэтому, если вы хотите использовать шифрование, вам придется применять это самостоятельно при отправке пакета, поскольку эти вызовы обходят более высокие уровни связи в ОС.

Возможно, вы можете использовать гибридный подход к получению пакета с помощью Sharppcap, а затем с использованием туннеля IPSec, который обычно используется в качестве приложения, например. откройте сокет между двумя системами и отправьте пакет через этот сокет. Это позволит ОС маршрутизировать данные через туннель IPSec.

+0

Спасибо @ Крис есть ли способ, чтобы открыть сокет между двумя шлюзами с помощью sharppcap могли бы вы дать мне пример –

+0

@AhmadDarwish, вы бы открыть сокет, как и любой другой сокет. https://msdn.microsoft.com/en-us/library/kb5kfec7%28v=vs.110%29.aspx Это действительно зависит, хотите ли вы синхронизацию против асинхронного подключения, какой порт, какой протокол и т. д. –

+0

спасибо, проблема когда я использую сокет, я теряю исходный IP-адрес исходного пакета, потому что сокет принимает для отправки только с одного из локальных адресов, он не может быть привязан к исходному IP-адресу источника , и это неприемлемо в моей заявке Мне нужно найти другой способ сделать это –

Смежные вопросы