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; } } }
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); } }
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(); }
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(); }
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); } } } }