コード例 #1
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);
            }
        }
コード例 #2
0
        public void preposli(Rozhranie rozhranie, EthernetPacket eth, Smerovaci_zaznam smerovaci_zaznam, string via, IPAddress ciel_adres)
        {
            bool naslo     = false;
            int  pokus_arp = 3;

            while (pokus_arp > 0)
            {
                foreach (var zaznam in arp_tabulka.ToList())
                {
                    if (zaznam.ip == via || (via == null && zaznam.ip == ciel_adres.ToString()))
                    {
                        naslo = true;
                        eth.DestinationHwAddress = PhysicalAddress.Parse(zaznam.mac);
                        eth.SourceHwAddress      = rozhranie.adapter.MacAddress;
                        rozhranie.adapter.SendPacket(eth);
                        pokus_arp = 0;
                        break;
                    }
                }
                if (!naslo)
                {
                    if (via != null)
                    {
                        arp_request(rozhranie, IPAddress.Parse(via));
                    }
                    else
                    {
                        arp_request(rozhranie, ciel_adres);
                    }

                    System.Threading.Thread.Sleep(500);
                }
            }
            Thread.CurrentThread.Abort();
        }
コード例 #3
0
        public Smerovaci_zaznam najdi_najlepsiu_v_databaze(IPAddress adresa_siete, IPAddress maska)
        {
            Smerovaci_zaznam smerovaci_zaznam = null;
            int najlepsia = 99;

            foreach (var zaznam in rip_databaza.ToList())
            {
                if (zaznam.cielova_siet.Equals(adresa_siete) && zaznam.maska.Equals(maska))
                {
                    if ((zaznam.metrika < najlepsia) && zaznam.metrika != 16)
                    {
                        najlepsia        = zaznam.metrika;
                        smerovaci_zaznam = zaznam;
                    }
                }
            }
            if (smerovaci_zaznam == null)
            {
                return(null);
            }
            else
            {
                return(smerovaci_zaznam);
            }
        }
コード例 #4
0
 public void updatni_casovace()
 {
     lock (this)
     {
         if (povolene_rip1 == true || povolene_rip2 == true)
         {
             foreach (var zaznam in rip_databaza.ToList())
             {
                 zaznam.flush++;
                 if (zaznam.flush >= flush_casovac)
                 {
                     smerovacia_tabulka.Remove(zaznam);
                     rip_databaza.Remove(zaznam);
                     continue;
                 }
                 if (zaznam.invalid >= invalid_casovac)
                 {
                     if (smerovacia_tabulka.Contains(zaznam))
                     {
                         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
                         {
                             zaznam.metrika = 16;
                             zaznam.holddown++;
                         }
                     }
                     else
                     {
                         rip_databaza.Remove(zaznam);
                     }
                 }
                 else
                 {
                     zaznam.invalid++;
                 }
             }
             update_casovac++;
             if (update_casovac >= update_casovac_hodnota)
             {
                 if (povolene_rip1)
                 {
                     posli_update(rozhranie1, 1, IPAddress.Parse("224.0.0.9"), PhysicalAddress.Parse("01005E000009"));
                 }
                 if (povolene_rip2)
                 {
                     posli_update(rozhranie2, 2, IPAddress.Parse("224.0.0.9"), PhysicalAddress.Parse("01005E000009"));
                 }
                 update_casovac = 0;
             }
         }
     }
 }
コード例 #5
0
        public void zmaz_smerovaci_zaznam()
        {
            Smerovaci_zaznam smerovaci_zaznam = najdi_najlepsiu_v_databaze(smerovacia_tabulka.ElementAt(main_view.lb_smerovaci_zaznam_index).cielova_siet, smerovacia_tabulka.ElementAt(main_view.lb_smerovaci_zaznam_index).maska);

            if (smerovaci_zaznam != null)
            {
                smerovacia_tabulka.Add(smerovaci_zaznam);
            }

            if (smerovacia_tabulka.ElementAt(main_view.lb_smerovaci_zaznam_index).typ != "R")
            {
                smerovacia_tabulka.RemoveAt(main_view.lb_smerovaci_zaznam_index);
            }
        }
コード例 #6
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();
        }
コード例 #7
0
 public Smerovaci_zaznam rekurzivne_prehladanie(Smerovaci_zaznam smerovaci_zaznam, ref string via)
 {
     while (true)
     {
         if (smerovaci_zaznam.exit_interface == -1)
         {
             via = smerovaci_zaznam.next_hop;
             smerovaci_zaznam = najdi_zaznam_v_smerovacej_tabulke(IPAddress.Parse(smerovaci_zaznam.next_hop));
             if (smerovaci_zaznam == null)
             {
                 return(null);
             }
         }
         else
         {
             return(smerovaci_zaznam);
         }
     }
 }
コード例 #8
0
        public void trigger_update(int cislo_rozhrania, Smerovaci_zaznam zaznam)
        {
            IPv4Packet ip_paket;
            UdpPacket  udp_paket;

            Byte[]    ip;
            Byte[]    hlava     = new byte[] { 0x00, 0x02, 0x00, 0x00 };
            Byte[]    rip_hlava = new byte[] { 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00 };
            Byte[]    next_hop  = new byte[] { 0x00, 0x00, 0x00, 0x00 };
            Byte[]    metrika   = new byte[] { 0x00, 0x00, 0x00, 0x10 };
            Rozhranie rozhranie;

            if (cislo_rozhrania == 1)
            {
                rozhranie = rozhranie2;
            }
            else
            {
                rozhranie = rozhranie1;
            }

            EthernetPacket eth = new EthernetPacket(rozhranie.adapter.MacAddress, PhysicalAddress.Parse("01005E000009"), EthernetPacketType.IpV4);

            ip_paket            = new IPv4Packet(IPAddress.Parse(rozhranie.ip_adresa), IPAddress.Parse("224.0.0.9"));
            ip_paket.TimeToLive = 2;
            udp_paket           = new UdpPacket(520, 520);

            rip_hlava = rip_hlava.Concat(zaznam.cielova_siet.GetAddressBytes()).ToArray();
            rip_hlava = rip_hlava.Concat(zaznam.maska.GetAddressBytes()).ToArray();
            rip_hlava = rip_hlava.Concat(next_hop).ToArray();

            rip_hlava = rip_hlava.Concat(metrika).ToArray();

            udp_paket.PayloadData = rip_hlava;
            // udp_paket.UpdateUDPChecksum();

            ip_paket.PayloadPacket = udp_paket;
            ip_paket.UpdateIPChecksum();

            eth.PayloadPacket = ip_paket;

            rozhranie.adapter.SendPacket(eth);
        }
コード例 #9
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();
        }
コード例 #10
0
        public void posli_ping(string ip)
        {
            if (ip.Equals(rozhranie1.ip_adresa) || ip.Equals(rozhranie2.ip_adresa))
            {
                main_view.lbl_ping = "!!!!!";
            }
            else
            {
                string       cmdString  = "abcdefghijklmnoprstu";
                byte[]       sendBuffer = Encoding.ASCII.GetBytes(cmdString);
                ICMPv4Packet ping       = new ICMPv4Packet(new ByteArraySegment(sendBuffer));
                string       via        = null;
                Rozhranie    rozhranie  = null;
                ping.Checksum = 0;
                ping.TypeCode = ICMPv4TypeCodes.EchoRequest;
                ping.Sequence = 1;
                ping.UpdateCalculatedValues();
                byte[] bytes = BitConverter.GetBytes(GetCrc(ping.Bytes));
                Array.Reverse(bytes);
                ushort result = BitConverter.ToUInt16(bytes, 0);


                ping.Checksum = result;

                Smerovaci_zaznam smerovaci_zaznam = najdi_zaznam_v_smerovacej_tabulke(IPAddress.Parse(ip));

                if (smerovaci_zaznam != null && smerovaci_zaznam.exit_interface == -1)
                {
                    smerovaci_zaznam = rekurzivne_prehladanie(smerovaci_zaznam, ref via);
                }

                if (smerovaci_zaznam != null && smerovaci_zaznam.exit_interface != -1 && smerovaci_zaznam.next_hop != "X")
                {
                    via = smerovaci_zaznam.next_hop;
                }

                if (smerovaci_zaznam != null)
                {
                    if (smerovaci_zaznam.exit_interface == 2)
                    {
                        rozhranie = rozhranie2;
                    }
                    if (smerovaci_zaznam.exit_interface == 1)
                    {
                        rozhranie = rozhranie1;
                    }

                    IPv4Packet ip_pak = new IPv4Packet(IPAddress.Parse(rozhranie1.ip_adresa), IPAddress.Parse(ip));
                    ip_pak.SourceAddress      = IPAddress.Parse(rozhranie.ip_adresa);
                    ip_pak.DestinationAddress = IPAddress.Parse(ip);
                    ip_pak.PayloadPacket      = ping;
                    ip_pak.UpdateIPChecksum();
                    string label = "";

                    EthernetPacket eth = new EthernetPacket(rozhranie.adapter.MacAddress, rozhranie.adapter.MacAddress, EthernetPacketType.IpV4);
                    eth.PayloadPacket = ip_pak;
                    int pokus = 5;

                    while (pokus-- > 0)
                    {
                        Thread posielanie = new Thread(() => preposli(rozhranie, eth, smerovaci_zaznam, via, IPAddress.Parse(ip)));
                        posielanie.Start();
                        zapis_ping = true;
                        Thread.Sleep(1000);
                        if (zapis_ping.Equals(true))
                        {
                            main_view.lbl_ping += ".";                         // main_view.lbl_ping = label;//main_view.vypis(".", 85);
                        }
                    }
                }
                else
                {
                    main_view.lbl_ping = "neviem smerovat";
                }
            }

            Thread.CurrentThread.Abort();
        }
コード例 #11
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);
                    }
                }
            }
        }
コード例 #12
0
        public void analyzuj(Rozhranie rozhranie, EthernetPacket eth, Packet paket)
        {
            if (eth.Type.ToString().Equals("Arp"))
            {
                IPAddress odosielatel_adres = new IPAddress(paket.Bytes.Skip(28).Take(4).ToArray());
                IPAddress ciel_adres        = new IPAddress(paket.Bytes.Skip(38).Take(4).ToArray());

                if (ciel_adres.ToString().Equals("255.255.255.255") || ciel_adres.ToString().Equals(rozhranie.ip_adresa))
                {
                    if (paket.Bytes[21] == 1)
                    {
                        arp_reply(eth, rozhranie, odosielatel_adres, ciel_adres);                            //dosla mi request tak odpovedam
                    }
                    else if (paket.Bytes[21] == 2 && !eth.SourceHwAddress.ToString().Equals("02004C4F4F50")) //IGNORUJEM LOOPBACK
                    {
                        bool pridaj_arp_zaznam = true;
                        arp = new Arp(odosielatel_adres.ToString(), eth.SourceHwAddress.ToString(), arp_casovac);

                        foreach (var zaznam in arp_tabulka)
                        {
                            if (zaznam.ip.Equals(arp.ip) && zaznam.mac.Equals(arp.mac))
                            {
                                zaznam.casovac    = arp_casovac;
                                pridaj_arp_zaznam = false;
                            }
                            if (zaznam.ip.Equals(arp.ip))
                            {
                                pridaj_arp_zaznam = false;
                            }
                        }

                        if (pridaj_arp_zaznam)
                        {
                            arp_tabulka.Add(arp);
                        }
                    }
                }
                else
                {
                    if (paket.Bytes[21] == 1)       // PROXY ARP
                    {
                        Smerovaci_zaznam naslo_zaznam = null;
                        naslo_zaznam = najdi_zaznam_v_smerovacej_tabulke(ciel_adres);
                        if (naslo_zaznam != null && naslo_zaznam.exit_interface == -1)
                        {
                            string via = null;
                            naslo_zaznam = rekurzivne_prehladanie(naslo_zaznam, ref via);
                        }
                        if (naslo_zaznam != null && naslo_zaznam.exit_interface != -1 && (rozhranie.cislo_rozhrania != naslo_zaznam.exit_interface))
                        {
                            arp_reply(eth, rozhranie, odosielatel_adres, ciel_adres);
                        }
                    }
                }
            }
            else if (eth.Type.ToString().Equals("IpV4"))
            {
                if ((--paket.Bytes[22]) > 0)
                {
                    IPAddress        odosielatel_address = new IPAddress(paket.Bytes.Skip(26).Take(4).ToArray());
                    IPAddress        ciel_adres          = new IPAddress(paket.Bytes.Skip(30).Take(4).ToArray());
                    Smerovaci_zaznam smerovaci_zaznam    = null;
                    string           via = null;

                    IPv4Packet ip_pak = (IPv4Packet)eth.PayloadPacket;

                    ip_pak.UpdateIPChecksum();

                    if ((ciel_adres.ToString() == rozhranie1.ip_adresa || ciel_adres.ToString() == rozhranie2.ip_adresa) && (int)eth.Bytes[23] == 1)
                    {
                        ICMPv4Packet ping = (ICMPv4Packet)ip_pak.PayloadPacket;
                        if ((int)eth.Bytes[34] == 8)
                        {
                            ping.Checksum = 0;
                            ping.TypeCode = ICMPv4TypeCodes.EchoReply;

                            byte[] bytes = BitConverter.GetBytes(GetCrc(ping.Bytes));
                            Array.Reverse(bytes);
                            ushort result = BitConverter.ToUInt16(bytes, 0);

                            ping.Checksum = result;

                            ip_pak.SourceAddress      = ciel_adres;
                            ip_pak.DestinationAddress = odosielatel_address;
                            ip_pak.PayloadPacket      = ping;
                            ip_pak.UpdateIPChecksum();

                            eth.PayloadPacket = ip_pak;

                            smerovaci_zaznam = najdi_zaznam_v_smerovacej_tabulke(odosielatel_address);

                            if (smerovaci_zaznam != null && smerovaci_zaznam.exit_interface == -1)
                            {
                                smerovaci_zaznam = rekurzivne_prehladanie(smerovaci_zaznam, ref via);
                            }

                            if (smerovaci_zaznam != null && smerovaci_zaznam.exit_interface != -1 && smerovaci_zaznam.next_hop != "X")
                            {
                                via = smerovaci_zaznam.next_hop;
                            }

                            if (smerovaci_zaznam != null)
                            {
                                if (smerovaci_zaznam.exit_interface == 2)
                                {
                                    rozhranie = rozhranie2;
                                }
                                if (smerovaci_zaznam.exit_interface == 1)
                                {
                                    rozhranie = rozhranie1;
                                }


                                Thread posielanie = new Thread(() => preposli(rozhranie, eth, smerovaci_zaznam, via, odosielatel_address));
                                posielanie.Start();
                            }
                        }
                        else if ((int)eth.Bytes[34] == 0)
                        {
                            if (zapis_ping)
                            {
                                // main_view.vypis("!", 99);
                                main_view.lbl_ping += "!";
                                zapis_ping          = false;
                            }
                        }
                    }

                    else if ((ciel_adres.ToString() == rozhranie.ip_adresa || ciel_adres.ToString() == "224.0.0.9") && ((int)eth.Bytes[43] == 2))
                    {
                        spracuj_rip(eth, paket, rozhranie, odosielatel_address);
                    }
                    else
                    {
                        smerovaci_zaznam = najdi_zaznam_v_smerovacej_tabulke(ciel_adres);

                        if (smerovaci_zaznam != null && smerovaci_zaznam.exit_interface == -1)
                        {
                            smerovaci_zaznam = rekurzivne_prehladanie(smerovaci_zaznam, ref via);
                        }

                        if (smerovaci_zaznam != null && smerovaci_zaznam.exit_interface != -1 && smerovaci_zaznam.next_hop != "X")
                        {
                            via = smerovaci_zaznam.next_hop;
                        }

                        if (smerovaci_zaznam != null)
                        {
                            if (smerovaci_zaznam.exit_interface == 1)
                            {
                                rozhranie = rozhranie1;
                            }
                            if (smerovaci_zaznam.exit_interface == 2)
                            {
                                rozhranie = rozhranie2;
                            }

                            Thread posielanie = new Thread(() => preposli(rozhranie, eth, smerovaci_zaznam, via, ciel_adres));
                            posielanie.Start();
                        }
                    }
                }
            }
            if (zastav_vlakno)
            {
                rozhranie.adapter.Close();
            }
        }