diff --git a/EduNetworkBuilder/NetworkDevice.cs b/EduNetworkBuilder/NetworkDevice.cs index 14637a0..f1a3875 100644 --- a/EduNetworkBuilder/NetworkDevice.cs +++ b/EduNetworkBuilder/NetworkDevice.cs @@ -1689,6 +1689,10 @@ namespace EduNetworkBuilder nPacket.Tracking.AddMessage(DebugLevel.info, this, NB.Translate("ND_ProcessArrival_CommingOut")); myNet.addPacket(nPacket); tPacket.payloadPacket = null; + if (ProcessTracertPacket(nPacket)) + { + return; //the packet stops if it gets bounced. + } return; } else @@ -1832,7 +1836,7 @@ namespace EduNetworkBuilder } return; } - //Tracert_request is processed on the link arrivak + //Tracert_request is processed on the link arrival if (tPacket.MyType == PacketType.tracert_reply) { ResponseToPacket response = HowToRespondToPacket(tPacket); @@ -2520,33 +2524,7 @@ namespace EduNetworkBuilder //Traceroute bounce-back if(tPacket.MyType == PacketType.tracert_request) { - tPacket.TTL--; - //If it is a router, or this is the destination - if(tPacket.TTL < 1 && (RoutesPackets() || HasMac(tPacket.destMAC))) - { - //The packet reached the end of its ttl. Bounce back. - //this packet ends, another begins. - Network myNet = NB.GetNetwork(); - - //We create a new packet - Packet nPacket = new Packet(this, tPacket.sourceIP, tPacket.payloadData, PacketType.tracert_reply, tPacket.packetID); - nPacket.OrigTTL = tPacket.OrigTTL; - nPacket.OriginalDestIP = tPacket.destIP; - nPacket.isFresh = true; //So it starts from here - nPacket.Tracking = new PacketMessage(); - - //The original packet stops here - tPacket.AddMessage(DebugLevel.info, NB.Translate("ND_ProcessArrival_TracerouteArrived") + " " + hostname); - tPacket.Tracking.Status = NB.LeftPad(hostname) + " Traceroute: " + NB.Translate("ND_ProcessArrival_TracerouteArrived") + " "+ hostname; - tPacket.MyStatus = PacketStatus.finished_ok; - //Console.WriteLine(" Tracert bounce: " + tPacket.OrigTTL + " " + hostname + " " + tPacket.payloadData); - - //Finish setting up the new packet - sending it back - nPacket.sourceIP = new IPAddress(NB.ZeroIPString); - nPacket.TsourceIP = new IPAddress(NB.ZeroIPString); - myNet.addPacket(nPacket); - //Console.WriteLine(" Tracert bounce pkt:" + nPacket.OrigTTL + nPacket.payloadData); - } + if (ProcessTracertPacket(tPacket)) return; //the packet stops if it gets bounced. } if (tPacket.MyType == PacketType.dhcp_request && !isDHCPServer) @@ -2588,6 +2566,39 @@ namespace EduNetworkBuilder tPacket.StartOnDevice(this); } + public bool ProcessTracertPacket(Packet tPacket) + { + tPacket.TTL--; + //If it is a router, or this is the destination + if (tPacket.TTL < 1 && (RoutesPackets() || HasMac(tPacket.destMAC))) + { + //The packet reached the end of its ttl. Bounce back. + //this packet ends, another begins. + Network myNet = NB.GetNetwork(); + + //We create a new packet + Packet nPacket = new Packet(this, tPacket.sourceIP, tPacket.payloadData, PacketType.tracert_reply, tPacket.packetID); + nPacket.OrigTTL = tPacket.OrigTTL; + nPacket.OriginalDestIP = tPacket.destIP; + nPacket.isFresh = true; //So it starts from here + nPacket.Tracking = new PacketMessage(); + + //The original packet stops here + tPacket.AddMessage(DebugLevel.info, NB.Translate("ND_ProcessArrival_TracerouteArrived") + " " + hostname); + tPacket.Tracking.Status = NB.LeftPad(hostname) + " Traceroute: " + NB.Translate("ND_ProcessArrival_TracerouteArrived") + " " + hostname; + tPacket.MyStatus = PacketStatus.finished_ok; + //Console.WriteLine(" Tracert bounce: " + tPacket.OrigTTL + " " + hostname + " " + tPacket.payloadData); + + //Finish setting up the new packet - sending it back + nPacket.sourceIP = new IPAddress(NB.ZeroIPString); + nPacket.TsourceIP = new IPAddress(NB.ZeroIPString); + myNet.addPacket(nPacket); + //Console.WriteLine(" Tracert bounce pkt:" + nPacket.OrigTTL + nPacket.payloadData); + return true; + } + return false; + } + /// /// Return true if this is a switch/hub/wap ///