Пример #1
0
        public void SendPacket(Packet p, INetworkController src = null)
        {
            // перебор всех интерфейсов, поиск того, с которого можно отправить
            INetworkController sender = null;
            foreach (var i in Interfaces)
            {
                if (IP.CompareBySubnets(p.DestinationIP, i.IP, i.Netmask))
                {
                    sender = i;
                    break;
                }
            }

            if (sender != null && src != sender)
            {
                p.SourceIP = sender.IP;
                Lan.SendPacket(p, sender);
            }
            else
            {
                if (defaultIface == null)
                {
                    // пакет никуда не уходит
                    Lan.SendPacket(p, null);
                }
                else
                {
                    if (src != defaultIface)
                    {
                        p.SourceIP = defaultIface.IP;
                        Lan.SendPacket(p, defaultIface);
                    }
                }
            }
        }
Пример #2
0
 public void SendPacket(Packet p, INetworkController src)
 {
     // пусть это будет хаб - посылает пакет на все порты, кроме исходного
     foreach (var i in Interfaces)
         if (i != src)
             Lan.SendPacket(p, i);
 }
Пример #3
0
        private void button1_Click(object sender, EventArgs e)
        {
            LocalAreaNetwork lan1 = new LocalAreaNetwork();

            PersonalComputer pc1 = new PersonalComputer("pc1");
            pc1.AddInterface(new EthernetController("192.168.100.1", "255.255.255.0"));

            PersonalComputer pc2 = new PersonalComputer("pc2");
            pc2.AddInterface(new EthernetController("192.168.100.2", "255.255.255.0"));

            PersonalComputer pc3 = new PersonalComputer("pc3");
            pc3.AddInterface(new EthernetController("192.168.100.3", "255.255.255.0"));

            Switch sw = new Switch(3, "sw");

            lan1.AddDevice(pc1);
            lan1.AddDevice(pc2);
            lan1.AddDevice(pc3);
            lan1.AddDevice(sw);

            lan1.AddLink(new WiredLink(pc1.Interfaces[0] as EthernetController, sw.Interfaces[0] as EthernetController));
            lan1.AddLink(new WiredLink(pc2.Interfaces[0] as EthernetController, sw.Interfaces[1] as EthernetController));
            lan1.AddLink(new WiredLink(pc3.Interfaces[0] as EthernetController, sw.Interfaces[2] as EthernetController));

            Packet p = new Packet("192.168.100.1", "192.168.100.3", "ping");
            pc1.SendPacket(p);
        }
Пример #4
0
        public void SendPacket(Packet p, INetworkController iface)
        {
            // пакет никуда не уходит, что-нибудь сообщить...
            if (iface == null)
                ;

            // ищем интерфейс, с которым связан iface
            foreach (var i in Links)
            {
                if (i.Point1 == iface)
                    i.Point2.ReceivePacket(p);
                else if (i.Point2 == iface)
                    i.Point1.ReceivePacket(p);
            }
        }
 public void SendPacket(Packet p)
 {
     Device.SendPacket(p, this);
 }
        public void ReceivePacket(Packet p)
        {
            // пакет дошел
            if (p.DestinationIP == IP)
                switch (p.Message)
                {
                    case "ping":
                        p.Message = "pong";
                        p.DestinationIP = p.SourceIP;
                        p.SourceIP = this.IP;
                        p.TTL--;
                        this.Device.Lan.SendPacket(p, this);
                        break;
                    case "pong":
                        System.Windows.Forms.MessageBox.Show("PING: \n" + p.DestinationIP + " -> " + p.SourceIP);
                        break;
                    default:
                        System.Windows.Forms.MessageBox.Show("Неизвестный пакет");
                        break;
                }

                else
                    SendPacket(p);
        }