Exemplo n.º 1
0
 public void updatni_smerovaciu_tabulku()
 {
     foreach (var zaznam in smerovacia_tabulka.ToList())
     {
         if (zaznam.typ == "R")
         {
             main_view.lb_smerovacia_tabulka = zaznam.typ + "         " + zaznam.cielova_siet + "/" + Praca_s_ip.sprav_masku(zaznam.maska) + " [" + zaznam.ad + "/" + zaznam.metrika + "]       cez: " + zaznam.next_hop + ",  " + (zaznam.invalid) + ",   " + zaznam.exit_interface;
         }
         if (zaznam.typ == "D")
         {
             main_view.lb_smerovacia_tabulka = zaznam.typ + "         " + zaznam.cielova_siet + "/" + Praca_s_ip.sprav_masku(zaznam.maska) + "       rozhranie: " + zaznam.exit_interface;
         }
         if (zaznam.typ == "S" && zaznam.exit_interface == -1)
         {
             main_view.lb_smerovacia_tabulka = zaznam.typ + "         " + Praca_s_ip.adresa_siete(zaznam.cielova_siet, zaznam.maska) + "/" + Praca_s_ip.sprav_masku(zaznam.maska) + " [" + zaznam.ad + "/" + zaznam.metrika + "]       cez: " + zaznam.next_hop;
         }
         else if (zaznam.typ == "S" && zaznam.next_hop == "X")
         {
             main_view.lb_smerovacia_tabulka = zaznam.typ + "         " + Praca_s_ip.adresa_siete(zaznam.cielova_siet, zaznam.maska) + "/" + Praca_s_ip.sprav_masku(zaznam.maska) + "      [" + zaznam.ad + "/" + zaznam.metrika + "]       cez: " + zaznam.exit_interface;
         }
         else if (zaznam.typ == "S" && zaznam.next_hop != "X" && zaznam.exit_interface != -1)
         {
             main_view.lb_smerovacia_tabulka = zaznam.typ + "         " + Praca_s_ip.adresa_siete(zaznam.cielova_siet, zaznam.maska) + "/" + Praca_s_ip.sprav_masku(zaznam.maska) + "         [" + zaznam.ad + "/" + zaznam.metrika + "]       cez: " + zaznam.next_hop + "     " + zaznam.exit_interface;
         }
     }
 }
Exemplo n.º 2
0
        public Smerovaci_zaznam najdi_zaznam_v_smerovacej_tabulke(IPAddress ciel_adres)
        {
            int najdlhsi_prefix = -1;
            Smerovaci_zaznam smerovaci_zaznam = null;

            foreach (var zaznam in smerovacia_tabulka.ToList())
            {
                if (Praca_s_ip.zisti_podsiet(ciel_adres, zaznam.cielova_siet, zaznam.maska))
                {
                    if (najdlhsi_prefix < Praca_s_ip.sprav_masku(zaznam.maska))
                    {
                        najdlhsi_prefix  = Praca_s_ip.sprav_masku(zaznam.maska);
                        smerovaci_zaznam = zaznam;
                    }
                }
            }
            if (smerovaci_zaznam != null)
            {
                return(smerovaci_zaznam);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 3
0
        public void priamo_pripojena_siet(int rozhranie)
        {
            foreach (var zaznam in smerovacia_tabulka.ToList())
            {
                if (zaznam.typ == "D" && rozhranie == zaznam.exit_interface)
                {
                    smerovacia_tabulka.Remove(zaznam);
                }
            }

            IPAddress        siet             = Praca_s_ip.adresa_siete(IPAddress.Parse(main_view.ip_adresa), IPAddress.Parse(main_view.maska));
            Smerovaci_zaznam smerovaci_zaznam = new Smerovaci_zaznam("D", siet, IPAddress.Parse(main_view.maska), 1, 0, "X", rozhranie);

            smerovacia_tabulka.Add(smerovaci_zaznam);
            updatni_smerovaciu_tabulku();
        }
Exemplo n.º 4
0
        public void pridaj_staticku_cestu(int next_hop)
        {
            Smerovaci_zaznam smerovaci_zaznam = null;
            IPAddress        ip    = IPAddress.Parse(main_view.staticke_ip);
            IPAddress        maska = IPAddress.Parse(main_view.staticke_maska);

            bool vloz = true;

            if (next_hop == 1)
            {
                smerovaci_zaznam = new Smerovaci_zaznam("S", ip, maska, 1, 0, main_view.staticke_next_hop, -1);
            }
            if (next_hop == 2)
            {
                smerovaci_zaznam = new Smerovaci_zaznam("S", ip, maska, 1, 0, "X", int.Parse(main_view.staticke_rozhranie));
            }
            if (next_hop == 3)
            {
                smerovaci_zaznam = new Smerovaci_zaznam("S", ip, maska, 1, 0, main_view.staticke_next_hop, int.Parse(main_view.staticke_rozhranie));
            }

            foreach (var zaznam in smerovacia_tabulka.ToList())
            {
                if (zaznam.Equals(smerovaci_zaznam))
                {
                    vloz = false;
                }
                if (Praca_s_ip.adresa_siete(zaznam.cielova_siet, zaznam.maska).Equals(Praca_s_ip.adresa_siete(smerovaci_zaznam.cielova_siet, smerovaci_zaznam.maska)) &&
                    zaznam.maska.Equals(smerovaci_zaznam.maska) && zaznam.metrika > smerovaci_zaznam.metrika)
                {
                    smerovacia_tabulka.Remove(zaznam);
                }
            }

            if (vloz)
            {
                smerovacia_tabulka.Add(smerovaci_zaznam);
            }

            updatni_smerovaciu_tabulku();
        }
Exemplo n.º 5
0
        public void spracuj_rip(EthernetPacket eth, Packet packet, Rozhranie rozhranie, IPAddress oznamovatel)
        {
            lock (this)
            {
                Smerovaci_zaznam rip_zaznam;
                int       dlzka = eth.Bytes.Length - 46;
                int       pocet = dlzka / 20;
                int       cislo_rozhrania;
                bool      pridaj_do_databazy = true;
                IPAddress adresa_siete_rip;
                IPAddress maska_rip;
                bool      pridaj_zaznam = true;
                int       slash_maska;
                int       posunutie_ip = 0, posunutie_maska = 0, posunutie_metrika = 0;

                if (rozhranie == rozhranie1)
                {
                    cislo_rozhrania = 1;
                }
                else
                {
                    cislo_rozhrania = 2;
                }
                if ((cislo_rozhrania == 1 && povolene_rip1) || (cislo_rozhrania == 2 && povolene_rip2))
                {
                    if ((int)eth.Bytes[42] == 2)
                    {
                        while ((pocet--) > 0)
                        {
                            adresa_siete_rip = Praca_s_ip.adresa_siete(new IPAddress(eth.Bytes.Skip(50 + posunutie_ip).Take(4).ToArray()), new IPAddress(eth.Bytes.Skip(54 + posunutie_maska).Take(4).ToArray()));
                            maska_rip        = new IPAddress(eth.Bytes.Skip(54 + posunutie_maska).Take(4).ToArray());
                            pridaj_zaznam    = true;
                            slash_maska      = Praca_s_ip.sprav_masku(maska_rip);

                            rip_zaznam = new Smerovaci_zaznam("R", adresa_siete_rip, maska_rip, 120, (int)eth.Bytes[65 + posunutie_metrika], oznamovatel.ToString(), cislo_rozhrania, 0, 0, 0);

                            foreach (var zaznam in smerovacia_tabulka.ToList())
                            {
                                if (adresa_siete_rip.Equals(Praca_s_ip.adresa_siete(zaznam.cielova_siet, zaznam.maska)))
                                {
                                    if ((slash_maska == Praca_s_ip.sprav_masku(zaznam.maska)))
                                    {
                                        if (zaznam.metrika == 16)
                                        {
                                            pridaj_zaznam = false;
                                            break;
                                        }
                                        if (rip_zaznam.metrika == 16)
                                        {
                                            if (zaznam.typ.Equals("R") && zaznam.next_hop.Equals(rip_zaznam.next_hop))
                                            {
                                                smerovacia_tabulka.Remove(zaznam);
                                                zaznam.metrika = 16;
                                                zaznam.invalid = invalid_casovac;


                                                Smerovaci_zaznam najlepsia = najdi_najlepsiu_v_databaze(zaznam.cielova_siet, zaznam.maska);
                                                if (najlepsia != null && !najlepsia.Equals(zaznam) && !(najlepsia.metrika.Equals(16)))
                                                {
                                                    smerovacia_tabulka.Add(najlepsia);
                                                    smerovacia_tabulka.Remove(zaznam);
                                                    rip_databaza.Remove(zaznam);
                                                }
                                                else
                                                {
                                                    trigger_update(zaznam.exit_interface, zaznam);
                                                }


                                                pridaj_zaznam = false;
                                                break;
                                            }
                                            else
                                            {
                                                pridaj_zaznam = false;
                                                break;
                                            }
                                        }
                                        if (rip_zaznam.metrika >= zaznam.metrika)
                                        {
                                            pridaj_zaznam = false;
                                            break;
                                        }
                                        else
                                        {
                                            smerovacia_tabulka.Remove(zaznam);
                                            break;
                                        }
                                    }
                                }
                            }

                            if (pridaj_zaznam && rip_zaznam.metrika != 16)
                            {
                                smerovacia_tabulka.Add(rip_zaznam);
                                rip_databaza.Add(rip_zaznam);
                                posunutie_ip = posunutie_maska = posunutie_metrika = posunutie_ip + 20;
                                continue;
                            }
                            pridaj_zaznam = true;



                            foreach (var zaznam in rip_databaza.ToList())
                            {
                                if (adresa_siete_rip.Equals(zaznam.cielova_siet) && zaznam.maska.Equals(rip_zaznam.maska) && (zaznam.next_hop.Equals(rip_zaznam.next_hop)))
                                {
                                    pridaj_do_databazy = false;
                                    if (zaznam.metrika == 16)
                                    {
                                        continue;
                                    }

                                    if (rip_zaznam.metrika == 16)
                                    {
                                        zaznam.metrika = 16;
                                        continue;
                                    }
                                    else if (rip_zaznam.metrika != zaznam.metrika)
                                    {
                                        zaznam.metrika = rip_zaznam.metrika;
                                        zaznam.nastav_casovace(0, 0, 0);
                                    }
                                    else if (rip_zaznam.metrika == zaznam.metrika)
                                    {
                                        zaznam.nastav_casovace(0, 0, 0);
                                        break;
                                    }
                                }
                            }
                            if (rip_zaznam.metrika == 16)
                            {
                                pridaj_do_databazy = false;
                            }

                            if (pridaj_do_databazy)
                            {
                                rip_databaza.Add(rip_zaznam);
                            }
                            pridaj_do_databazy = true;

                            posunutie_ip = posunutie_maska = posunutie_metrika = posunutie_ip + 20;
                        }
                    }
                    else if ((int)eth.Bytes[42] == 1)
                    {
                        posli_update(rozhranie, cislo_rozhrania, oznamovatel, eth.SourceHwAddress);
                    }
                }
            }
        }