Tracert works better with VPN. VPN-Endpoints did not decrement tracert ttls. Now it works as it ought.

This commit is contained in:
Tim Young 2017-06-08 09:18:26 -05:00
parent d4acde7b18
commit 9071ea404a
1 changed files with 39 additions and 28 deletions

View File

@ -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;
}
/// <summary>
/// Return true if this is a switch/hub/wap
/// </summary>