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); } } } }
public void SendPacket(Packet p, INetworkController src) { // пусть это будет хаб - посылает пакет на все порты, кроме исходного foreach (var i in Interfaces) if (i != src) Lan.SendPacket(p, i); }
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); }
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); }