using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using System.Text.RegularExpressions; namespace EduNetworkBuilder { [Serializable] public class NetworkInterface { public IPAddress myIP; public string nic_name; //eth0, eth0:0, etc public HostNicID AttachedToHostNic; //We should have a feature: none, IP_in_IP_Tunnel, encrypted_vpn, vlan, etc public NetworkInterface(string name, string IP, string Mask, HostNicID AttachedTo) { nic_name = name; myIP = new IPAddress(IP, Mask,IPAddressType.ip); AttachedToHostNic = AttachedTo; } public NetworkInterface(XmlNode theNode, HostNicID AttachedTo) { AttachedToHostNic = AttachedTo; foreach (XmlNode Individual in theNode.ChildNodes) { XmlNodeType myNodetype = Individual.NodeType; if (myNodetype == XmlNodeType.Element) { switch (Individual.Name.ToLower()) { case "myip": myIP = new IPAddress(Individual); break; case "nicname": nic_name = Individual.InnerText; break; } } } } public void Save(XmlWriter writer) { writer.WriteStartElement("interface"); writer.WriteElementString("nicname", nic_name); myIP.Save(writer, "myip"); writer.WriteEndElement(); } public string InterfaceString(bool UseCidr = false) { string tstring = myIP.GetIP.ToIpString(); if (!UseCidr) { tstring += " - " + myIP.GetMask.ToIpString(); } else { string mask = myIP.GetMask.ToBitString(); mask = Regex.Replace(mask, "0", ""); int count = mask.Length; tstring += "/" + count.ToString(); } return tstring; } public string RouteString(string nic_name, string GW) { string tstring = myIP.IPFormat(GW); ; return tstring; } /// /// Pop up a window to edit this address. /// public void EditAddress() { Network myNet = NB.GetNetwork(); NetworkDevice ND = myNet.GetDeviceFromID(AttachedToHostNic); IPAddressEntry ipe = new IPAddressEntry(myIP,ND); ipe.ShowDialog(); } public bool isLocal(IPAddress tIp, bool AllowZeroMatch = true) { if (tIp == null) return false; if (!AllowZeroMatch && (myIP == null || myIP.GetIP == 0)) return false; if (myIP.IsLocal(tIp)) return true; return false; } /// /// We are sending the packet out this interface. /// /// public void ProcessOutboundPacket(Packet tPacket) { if (tPacket.sourceIP == null || tPacket.sourceIP.GetIP.ToIpString() == NB.ZeroIPString) { //This happens if we are starting a new packet. We should also do this if we are masquerading. tPacket.sourceIP = new IPAddress(myIP.GetIP.ToIpString(), "", IPAddressType.ip_only); //We only want the IP address } } public void ProcessInboundPacket(Packet tPacket) { bool isgood = false; if (tPacket.destIP != null && tPacket.destIP.GetIP == myIP.GetIP) isgood = true; if (tPacket.destIP != null && myIP.IsLocal(tPacket.destIP)) isgood = true; if (myIP.NetworkAddress == myIP.GetIP) isgood = true; if(isgood) { //anything we should do here? //Mainly vlan if we are a vlan. } } } }