Esempio n. 1
0
 public void preposli(Rozhranie rozhranie, EthernetPacket eth)
 {
     statistiky(rozhranie, eth, false);
     rozhranie.adapter.SendPacket(eth);
     Thread.Sleep(500);
     Thread.CurrentThread.Abort();
 }
Esempio n. 2
0
        private void btn_rozhrania_Click(object sender, EventArgs e)
        {
            if (cb_rozhranie1.SelectedIndex >= 0 && cb_rozhranie2.SelectedIndex >= 0)
            {
                rozhranie1 = nastav_adapter(rozhranie1, 1);
                rozhranie2 = nastav_adapter(rozhranie2, 2);
                try
                {
                    if (vlakno_rozhranie1 == null)
                    {
                        vlakno_rozhranie1 = new Thread(() => pocuvaj_rozhranie1(rozhranie1));
                        vlakno_rozhranie1.Start();
                    }

                    if (vlakno_rozhranie2 == null)
                    {
                        vlakno_rozhranie2 = new Thread(() => pocuvaj_rozhranie2(rozhranie2));
                        vlakno_rozhranie2.Start();
                    }
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.ToString());
                }
            }
            else
            {
                MessageBox.Show("zvol adatper!");
            }
        }
Esempio n. 3
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();
        }
Esempio n. 4
0
        public void arp_reply(EthernetPacket eth, Rozhranie rozhranie, IPAddress odosielatel_address, IPAddress ciel_adres)
        {
            if (rozhranie.adapter.MacAddress != null)
            {
                EthernetPacket ethernet_packet = new EthernetPacket(rozhranie.adapter.MacAddress, eth.SourceHwAddress, EthernetPacketType.Arp);
                arp_packet = new ARPPacket(ARPOperation.Response, eth.SourceHwAddress, odosielatel_address, rozhranie.adapter.MacAddress, ciel_adres);

                ethernet_packet.PayloadPacket = arp_packet;
                rozhranie.adapter.SendPacket(ethernet_packet);
            }
        }
Esempio n. 5
0
        public void arp_request(Rozhranie rozhranie, IPAddress hladana_ip)
        {
            if (rozhranie.adapter.MacAddress != null)
            {
                EthernetPacket ethernet_packet = new EthernetPacket(rozhranie.adapter.MacAddress, PhysicalAddress.Parse("FF-FF-FF-FF-FF-FF"), EthernetPacketType.Arp);
                arp_packet = new ARPPacket(ARPOperation.Request, PhysicalAddress.Parse("00-00-00-00-00-00"), hladana_ip, rozhranie.adapter.MacAddress, IPAddress.Parse(rozhranie.ip_adresa));

                ethernet_packet.PayloadPacket = arp_packet;
                rozhranie.adapter.SendPacket(ethernet_packet);
            }
        }
Esempio n. 6
0
 public Rozhranie nastav_adapter(Rozhranie rozhranie, int cislo_rozhrania)
 {
     if (cislo_rozhrania == 1)
     {
         rozhranie = new Rozhranie(zoznam_adapterov[cb_rozhranie1.SelectedIndex], cislo_rozhrania);
     }
     if (cislo_rozhrania == 2)
     {
         rozhranie = new Rozhranie(zoznam_adapterov[cb_rozhranie2.SelectedIndex], cislo_rozhrania);
     }
     return(rozhranie);
 }
Esempio n. 7
0
        public void statistiky(Rozhranie rozhranie, EthernetPacket eth, bool in_nout)
        {
            IPv4Packet ip;
            int        riadok;

            lock (this)
            {
                if (rozhranie.cislo_rozhrania == 1 && in_nout)
                {
                    riadok = 0;
                }
                else if (rozhranie.cislo_rozhrania == 1 && !in_nout)
                {
                    riadok = 1;
                }
                else if (rozhranie.cislo_rozhrania == 2 && in_nout)
                {
                    riadok = 2;
                }
                else
                {
                    riadok = 3;
                }
                dg_statistiky[1, riadok].Value = (int)(dg_statistiky[1, riadok].Value) + 1;
                if (eth.PayloadPacket is ARPPacket)
                {
                    dg_statistiky[2, riadok].Value = (int)(dg_statistiky[2, riadok].Value) + 1;
                }
                if (eth.PayloadPacket is IPv4Packet)
                {
                    dg_statistiky[3, riadok].Value = (int)(dg_statistiky[3, riadok].Value) + 1;
                    ip = (IPv4Packet)eth.PayloadPacket;
                    if (ip.PayloadPacket is TcpPacket)
                    {
                        dg_statistiky[4, riadok].Value = (int)(dg_statistiky[4, riadok].Value) + 1;
                        //   if (ip.PayloadPacket.PayloadPacket. is ) dg_statistiky[7, 0].Value = (int)(dg_statistiky[7, 0].Value) + 1;
                    }
                    if (ip.PayloadPacket is UdpPacket)
                    {
                        dg_statistiky[5, riadok].Value = (int)(dg_statistiky[5, riadok].Value) + 1;
                    }
                    if (ip.PayloadPacket is ICMPv4Packet)
                    {
                        dg_statistiky[6, riadok].Value = (int)(dg_statistiky[6, riadok].Value) + 1;
                    }
                }
            }
        }
Esempio n. 8
0
        public void analyzuj(Rozhranie rozhranie, int cislo_rozhrania, EthernetPacket eth, Packet paket)   //2
        {
            bool       vloz = true;
            int        vystupne_rozhranie = -1;
            Thread     posielanie         = null;
            Cam_zaznam novy_zaznam        = new Cam_zaznam(eth.SourceHwAddress, cislo_rozhrania, timer); //2

            statistiky(rozhranie, eth, true);

            lock (this)
            {
                foreach (var zaznam in CAM_tabulka)
                {
                    if (zaznam.MAC.Equals(novy_zaznam.MAC))
                    {
                        if (zaznam.rozhranie != novy_zaznam.rozhranie)
                        {
                            zaznam.rozhranie = novy_zaznam.rozhranie;
                        }
                        vloz         = false;
                        zaznam.timer = timer;
                    }
                    //      Console.WriteLine(zaznam.MAC + "      " + eth.DestinationHwAddress);
                    if (zaznam.MAC.Equals(eth.DestinationHwAddress))
                    {
                        vystupne_rozhranie = zaznam.rozhranie; //2
                    }
                }

                if (vloz)
                {
                    try
                    {
                        CAM_tabulka.Add(novy_zaznam);
                    }
                    catch (Exception ee)
                    {
                        Console.WriteLine("Omg");
                    }
                }
                //    Console.WriteLine(vystupne_rozhranie + "      " + cislo_rozhrania);
                if (vystupne_rozhranie != cislo_rozhrania)
                {
                    switch (vystupne_rozhranie)
                    {
                    case 1:
                        posielanie = new Thread(() => preposli(rozhranie1, eth));
                        break;

                    case 2:
                        posielanie = new Thread(() => preposli(rozhranie2, eth));
                        break;

                    default:
                        if (cislo_rozhrania == 1)
                        {
                            posielanie = new Thread(() => preposli(rozhranie2, eth));
                        }
                        else
                        {
                            posielanie = new Thread(() => preposli(rozhranie1, eth));
                        }
                        break;
                    }
                    posielanie.Start();
                }
            }
        }
Esempio n. 9
0
 public void pocuvaj_rozhranie2(Rozhranie rozhranie)
 {
     rozhranie.adapter.OnPacketArrival += new PacketArrivalEventHandler(zachytenie_rozhranie2);
     otvor_na_prijimanie(rozhranie.adapter);
 }
Esempio n. 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();
        }
Esempio n. 11
0
        public void posli_update(Rozhranie rozhranie, int cislo_rozhrania, IPAddress cielova_ip, PhysicalAddress cielova_mac)
        {
            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, 0x00 };
            bool   prvy      = true;

            EthernetPacket eth = new EthernetPacket(rozhranie.adapter.MacAddress, cielova_mac, EthernetPacketType.IpV4);

            ip_paket = new IPv4Packet(IPAddress.Parse(rozhranie.ip_adresa), cielova_ip);

            if (cielova_mac.ToString().Equals("01005E000009"))
            {
                ip_paket.TimeToLive = 2;
            }
            else
            {
                ip_paket.TimeToLive = 255;
            }

            udp_paket = new UdpPacket(520, 520);

            foreach (var zaznam in smerovacia_tabulka.ToList())
            {
                if ((zaznam.typ == "D" || zaznam.typ == "R") && zaznam.exit_interface != cislo_rozhrania && zaznam.metrika != 16)
                {
                    if (!prvy)
                    {
                        rip_hlava = rip_hlava.Concat(hlava).ToArray();
                    }
                    prvy      = false;
                    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();
                    if (zaznam.metrika != 16)
                    {
                        metrika[3] = (byte)(zaznam.metrika + 1);
                    }
                    else
                    {
                        metrika[3] = (byte)(zaznam.metrika);
                    }
                    rip_hlava = rip_hlava.Concat(metrika).ToArray();
                }
            }

            foreach (var zaznam in rip_databaza.ToList())
            {
                if (zaznam.metrika == 16 && zaznam.exit_interface != cislo_rozhrania)
                {
                    if (!prvy)
                    {
                        rip_hlava = rip_hlava.Concat(hlava).ToArray();
                    }
                    prvy       = false;
                    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();
                    metrika[3] = (byte)zaznam.metrika;
                    if (zaznam.metrika == 0)
                    {
                        metrika[3] = 1;
                    }
                    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);
        }
Esempio n. 12
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);
                    }
                }
            }
        }
Esempio n. 13
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();
            }
        }
Esempio n. 14
0
 public void pocuvaj_rozhranie2(Rozhranie rozhranie)
 {
     rozhranie.adapter.OnPacketArrival += new PacketArrivalEventHandler(zachytenie_rozhranie2);
     rozhranie.adapter.Open(DeviceMode.Promiscuous);
     rozhranie.adapter.StartCapture();
 }
Esempio n. 15
0
 public Rozhranie nastav_ip(Rozhranie rozhranie, int cislo_rozhrania)
 {
     rozhranie = new Rozhranie(zoznam_adapterov[main_view.adaptery_index], main_view.ip_adresa, main_view.maska, cislo_rozhrania);
     return(rozhranie);
 }