示例#1
0
 private void ProcesarPaquete(Packet paquete)
 {
     if (PaqueteRecibido != null)
     {
         PaqueteRecibidoEventArgs evento = new PaqueteRecibidoEventArgs(paquete, BusinessLogic.Threads.ThreadManager.HoraActual);
         PaqueteRecibido(this, evento);
     }
 }
 private void EnviarNotifacionSegmentoEnviado(Packet paquete)
 {
     if (SegmentoEnviado != null)
     {
         TCPSegmentTransmitido evento = new TCPSegmentTransmitido(paquete, ThreadManager.HoraActual);
         SegmentoEnviado(this, evento);
     }
 }
 private void EnviarSegmentos(List<TCPSegment> segmentos, ControladorSesion controlador)
 {
     foreach (TCPSegment segmento in segmentos)
     {
         Packet paquete = new Packet(controlador.IpOrigen, controlador.IpDestino, segmento);
         _capaRed.EnviarPaquete(controlador.IpDestino, paquete);
         EnviarNotifacionSegmentoEnviado(paquete);
     }
 }
示例#4
0
       public void Ping(string ipDestino)
       {
           Packet paquete = new Packet(CapaDatos.Puerto.IPAddress, ipDestino, new EchoMessage());

           EnviarPaquete(ipDestino, paquete);






       }
示例#5
0
       public override void EnviarPaquete(string ipDestino, Packet paquete)
       {

           bool perteneceAlaRed = IPAddressFactory.PerteneceAlaRed(CapaDatos.Puerto.IPAddress, ipDestino, CapaDatos.Puerto.Mascara);
           if (perteneceAlaRed)
           {
           CapaDatos.EnviarPaquete(paquete, ipDestino);
           }
           else
           {
               CapaDatos.EnviarPaquete(paquete, _pc.DefaultGateWay);
           }
       }
示例#6
0
        protected virtual void ProcesarPaquete(Packet paquete)
        {
            if (paquete.IpDestino == CapaDatos.Puerto.IPAddress)
            {
                if (paquete.Datos is EchoReplyMessage)
                {
                    OnEchoMessage(true, paquete.IpOrigen);
                    return;
                }
                else if (paquete.Datos is EchoMessage)
                {
                    EnviarPaquete(paquete.IpOrigen, new Packet(CapaDatos.Puerto.IPAddress, paquete.IpOrigen, new EchoReplyMessage()));
                    OnEchoMessage(false, paquete.IpOrigen);
                }
            }



        }
示例#7
0
 public virtual void EnviarPaquete(string direccionIP, Packet packet)
 {
     _capaDatos.EnviarPaquete(packet, direccionIP);
 }
示例#8
0
 private void RemoverValor(Packet paquete, Dictionary<Guid, Packet> paquetesNoEnviados)
 {
     Guid idPacket = Guid.Empty;
     foreach (KeyValuePair<Guid, Packet> item in paquetesNoEnviados)
     {
         if (item.Value == paquete)
         {
             idPacket = item.Key;
             break;
         }
     }
     if (idPacket == Guid.Empty)
     {
         throw new Exception();
     }
     paquetesNoEnviados.Remove(idPacket);
 }
示例#9
0
        public void EnviarPaquete(Packet paquete, string ipDestino)
        {
            string broadCastAddress = IPAddressFactory.GetBroadCastAddress(_puerto.IPAddress, _puerto.Mascara);
            if (ipDestino == broadCastAddress)
            {
                EnviarFrame(paquete, MACAddressFactory.BroadCast);
                return;
            }
            if (_protocoloArp.ContieneLaDireccionDe(ipDestino))
            {
                string macDestino = _protocoloArp.GetMacAddressFromIPAddress(ipDestino);
                EnviarFrame(paquete, macDestino);
                if (_paquetesNoEnviadosConDestino.ContainsKey(ipDestino))
                {
                    Dictionary<Guid, Packet> paquetesNoEnviados = _paquetesNoEnviadosConDestino[ipDestino];
                    if (paquetesNoEnviados.ContainsValue(paquete))
                    {
                        RemoverValor(paquete, paquetesNoEnviados);
                    }
                    if (paquetesNoEnviados.Count == 0)
                        _paquetesNoEnviadosConDestino.Remove(ipDestino);
                }

                return;
            }
            else
            {
                Guid idPacket = Guid.NewGuid();
                PreguntarPorDireccion(ipDestino,idPacket);
                Dictionary<Guid, Packet> paquetesNoEnviadosEnDir = null;
                if (!_paquetesNoEnviadosConDestino.ContainsKey(ipDestino))
                    _paquetesNoEnviadosConDestino.Add(ipDestino,new Dictionary<Guid,Packet>());
                paquetesNoEnviadosEnDir = _paquetesNoEnviadosConDestino[ipDestino];
                paquetesNoEnviadosEnDir.Add(idPacket,paquete);

            }
        }
示例#10
0
 public TCPSegmentRecibido(Packet paquete, TimeSpan horaTransmision)
 {
     _TCPRecibido = paquete;
     _horaDeTransmision = horaTransmision;
 }
示例#11
0
 public TCPSegmentTransmitido(Packet segmento, TimeSpan horaTransmision)
 {
     _TCPTransmitido = segmento;
     _horaDeTransmision = horaTransmision;
 }
示例#12
0
 public void EnviarRutas(List<RutaSOA> rutasTotales)
 {
     IPacketMessage mensajeRutas = new RoutesMessage(rutasTotales);
     string broadCastAddress = IPAddressFactory.GetBroadCastAddress(CapaDatos.Puerto.IPAddress, CapaDatos.Puerto.Mascara);
     Packet paqueteRutas = new Packet(CapaDatos.Puerto.IPAddress, broadCastAddress, mensajeRutas);
     CapaDatos.EnviarPaquete(paqueteRutas, broadCastAddress);
 }
示例#13
0
        protected override void ProcesarPaquete(Packet paquete)
        {



            if (paquete.Datos is EchoMessage)
            {
                foreach (PuertoEthernetCompleto puerto in _router.PuertosEthernet)
                {
                    if (puerto.Habilitado && puerto.IPAddress == paquete.IpDestino)
                    {
                        EnviarPaquete(paquete.IpOrigen, new Packet(puerto.IPAddress, paquete.IpOrigen, new EchoReplyMessage()));
                        OnEchoMessage(false, paquete.IpOrigen);
                        return;
                    }
                }

            }
            if (paquete.Datos is EchoReplyMessage)
            {
                foreach (PuertoEthernetCompleto puerto in _router.PuertosEthernet)
                {
                    if (puerto.Habilitado && puerto.IPAddress == paquete.IpDestino)
                    {
                        OnEchoMessage(true, paquete.IpOrigen);
                        return;
                    }
                }

            }



            RoutesMessage mensajeRutas = paquete.Datos as RoutesMessage;
            if (mensajeRutas != null)
            {
                if (!_router.RipV2.Habilitado)
                    return;
                _router.RipV2.ProcesarRutas(mensajeRutas, paquete.IpOrigen, CapaDatos.Puerto.Id);
                return;
            }
            EntradaTablaRouter rutaInterna = _router.TablaDeRutas.BuscarRutaEnRutasInternas(paquete.IpDestino);
            if (rutaInterna != null)
            {
                _router.PuertoEthernetCapaRed[rutaInterna.Puerto].CapaDatos.EnviarPaquete(paquete, paquete.IpDestino);
                return;
            }
            EntradaTablaRouter rutaEstatica = _router.TablaDeRutas.BuscarRutaEnRutasEstaticas(paquete.IpDestino);
            if (rutaEstatica != null)
            {
                _router.PuertoEthernetCapaRed[rutaEstatica.Puerto].CapaDatos.EnviarPaquete(paquete, rutaEstatica.NextHopIP);
                return;
            }
            EntradaTablaRouter rutaDinamica = _router.TablaDeRutas.BuscarRutaEnRutasDinamicas(paquete.IpDestino);
            if (rutaDinamica != null)
            {
                _router.PuertoEthernetCapaRed[rutaDinamica.Puerto].CapaDatos.EnviarPaquete(paquete, rutaDinamica.NextHopIP);
                return;
            }

        }
示例#14
0
 public PaqueteRecibidoEventArgs(Packet paquete, TimeSpan horaDeRecepcion)
 {
    _paqueteRecibido=paquete;
     _horaDeRecepcion = horaDeRecepcion;
 }