traceroute works, at least rudimentarily
This commit is contained in:
parent
1ebf932edb
commit
9e33a6f392
@ -252,6 +252,7 @@ namespace EduNetworkBuilder
|
|||||||
|
|
||||||
public static UInt32 ParseIp(this string ipAddress)
|
public static UInt32 ParseIp(this string ipAddress)
|
||||||
{
|
{
|
||||||
|
if (ipAddress == null) ipAddress = "";
|
||||||
var gw = ipAddress.Split('/'); //Pull off any cdr
|
var gw = ipAddress.Split('/'); //Pull off any cdr
|
||||||
var mySplitVal = gw[0].Split('.');
|
var mySplitVal = gw[0].Split('.');
|
||||||
if (mySplitVal.Count() != 4)
|
if (mySplitVal.Count() != 4)
|
||||||
|
@ -1053,6 +1053,15 @@ namespace EduNetworkBuilder
|
|||||||
return; //exit early. Rest is done in tick
|
return; //exit early. Rest is done in tick
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ResetPacketTimeout()
|
||||||
|
{
|
||||||
|
//We should only do this when we know we are starting new packets.
|
||||||
|
//Traceroute does this when resetting
|
||||||
|
AlreadyChosenTimeout = false; //we do this at the beginning of processing
|
||||||
|
NumberOfSecondsForTimeout = DefaultTimeout;
|
||||||
|
NetworkStartTime = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
public void Tick()
|
public void Tick()
|
||||||
{
|
{
|
||||||
EraseOldPackets();
|
EraseOldPackets();
|
||||||
@ -1069,7 +1078,7 @@ namespace EduNetworkBuilder
|
|||||||
ProcessPacketsOnce();
|
ProcessPacketsOnce();
|
||||||
if(!ProcessingShouldContinue())
|
if(!ProcessingShouldContinue())
|
||||||
{
|
{
|
||||||
//We it has all been taken care of
|
//It has all been taken care of
|
||||||
}
|
}
|
||||||
DrawPackets();
|
DrawPackets();
|
||||||
//myPBox.Refresh();
|
//myPBox.Refresh();
|
||||||
|
@ -823,9 +823,9 @@ namespace EduNetworkBuilder
|
|||||||
todo = destination.Edit(ItemClickedOn, this, NB.Translate("_Traceroute"));
|
todo = destination.Edit(ItemClickedOn, this, NB.Translate("_Traceroute"));
|
||||||
if (todo)
|
if (todo)
|
||||||
{
|
{
|
||||||
//ItemClickedOn.PingFromHere(destination);
|
ItemClickedOn.TracerouteFromHere(destination);
|
||||||
//myNetwork.ProcessPackets();
|
myNetwork.ProcessPackets();
|
||||||
//UpdateMessages();
|
UpdateMessages();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1279,11 +1279,10 @@ namespace EduNetworkBuilder
|
|||||||
|
|
||||||
public void TracerouteFromHere(IPAddress Destination)
|
public void TracerouteFromHere(IPAddress Destination)
|
||||||
{
|
{
|
||||||
//We need to create a packet
|
//We need to create a traceroute packet - start with 1 TTL
|
||||||
Packet TracertPacket = new Packet(this, Destination, NB.Translate("_Traceroute"), PacketType.tracert_request, -1, 1);
|
//We pass it the destination as the payload string, so we have that for all traceroutes.
|
||||||
|
Packet TracertPacket = new Packet(this, Destination, Destination.GetIPString, PacketType.tracert_request, -1, 1);
|
||||||
Network myNet = NB.GetNetwork();
|
Network myNet = NB.GetNetwork();
|
||||||
//string dHost = myNet.ReverseDNSLookup(this, Destination);
|
|
||||||
//myNet.RegisterPingTest(hostname, dHost);
|
|
||||||
myNet.addPacket(TracertPacket);
|
myNet.addPacket(TracertPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1821,7 +1820,29 @@ namespace EduNetworkBuilder
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(tPacket.MyType == PacketType.arp_request)
|
//Tracert_request is processed on the link arrivak
|
||||||
|
if (tPacket.MyType == PacketType.tracert_reply)
|
||||||
|
{
|
||||||
|
//The reply got here. This packet is done
|
||||||
|
tPacket.AddMessage(DebugLevel.info, NB.Translate("ND_ProcessArrival_TracertReply") + " " + tPacket.sourceIP.GetIPString);
|
||||||
|
tPacket.Tracking.Status = NB.LeftPad(hostname) + " " + string.Format(NB.Translate("ND_ProcessArrival_TracertReply") + " " + tPacket.sourceIP.GetIPString);
|
||||||
|
tPacket.MyStatus = PacketStatus.finished_ok;
|
||||||
|
|
||||||
|
IPAddress origStart = new IPAddress(tPacket.payloadData);
|
||||||
|
int ttl = tPacket.OrigTTL + 1;
|
||||||
|
|
||||||
|
Console.WriteLine("Tracert: " + tPacket.OrigTTL + " " + tPacket.sourceIP.GetIPString);
|
||||||
|
Console.WriteLine("Tracert: -- " + tPacket.sourceIP.GetIPString + " " + origStart.GetIPString);
|
||||||
|
//If we had not landed on the actual dest...
|
||||||
|
if (tPacket.sourceIP.GetIPString != origStart.GetIPString && ttl < 10)
|
||||||
|
{
|
||||||
|
Packet trPacket = new Packet(this, origStart, origStart.GetIPString, PacketType.tracert_request, -1, ttl);
|
||||||
|
myNet.addPacket(trPacket);
|
||||||
|
myNet.ResetPacketTimeout();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (tPacket.MyType == PacketType.arp_request)
|
||||||
{
|
{
|
||||||
//The arp request may not be asking for this IP.
|
//The arp request may not be asking for this IP.
|
||||||
if(HasIPAddress(tPacket.destIP))
|
if(HasIPAddress(tPacket.destIP))
|
||||||
@ -2478,6 +2499,38 @@ namespace EduNetworkBuilder
|
|||||||
|
|
||||||
if (!ForwardsPackets())
|
if (!ForwardsPackets())
|
||||||
{
|
{
|
||||||
|
//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 (tPacket.MyType == PacketType.dhcp_request && !isDHCPServer)
|
if (tPacket.MyType == PacketType.dhcp_request && !isDHCPServer)
|
||||||
{
|
{
|
||||||
tPacket.AddMessage(DebugLevel.debug, NB.LeftPad(hostname) + " " +string.Format(NB.Translate("ND_DoInFromLnkDeaf")));
|
tPacket.AddMessage(DebugLevel.debug, NB.LeftPad(hostname) + " " +string.Format(NB.Translate("ND_DoInFromLnkDeaf")));
|
||||||
|
@ -38,6 +38,7 @@ namespace EduNetworkBuilder
|
|||||||
public int packetID;
|
public int packetID;
|
||||||
public int VLANID = NB.UntaggedVLAN; //starts on the management vlan
|
public int VLANID = NB.UntaggedVLAN; //starts on the management vlan
|
||||||
public int TTL = 20;
|
public int TTL = 20;
|
||||||
|
public int OrigTTL = 20; //The original TTL. We need to know what we started with so we can pass it back on a traceroute
|
||||||
public int TickTTL = 50;
|
public int TickTTL = 50;
|
||||||
public int health = 100;
|
public int health = 100;
|
||||||
public IPAddress sourceIP;
|
public IPAddress sourceIP;
|
||||||
@ -95,6 +96,7 @@ namespace EduNetworkBuilder
|
|||||||
{
|
{
|
||||||
MyType = copyfrom.MyType;
|
MyType = copyfrom.MyType;
|
||||||
TTL = copyfrom.TTL;
|
TTL = copyfrom.TTL;
|
||||||
|
OrigTTL = copyfrom.OrigTTL;
|
||||||
sourceIP = copyfrom.sourceIP;
|
sourceIP = copyfrom.sourceIP;
|
||||||
TsourceIP = copyfrom.TsourceIP;
|
TsourceIP = copyfrom.TsourceIP;
|
||||||
destIP = copyfrom.destIP;
|
destIP = copyfrom.destIP;
|
||||||
@ -126,6 +128,7 @@ namespace EduNetworkBuilder
|
|||||||
packetID = NewPacketID;
|
packetID = NewPacketID;
|
||||||
}
|
}
|
||||||
if (startTTL != -1) this.TTL = startTTL;
|
if (startTTL != -1) this.TTL = startTTL;
|
||||||
|
OrigTTL = TTL;
|
||||||
WhereAmI = start;
|
WhereAmI = start;
|
||||||
payloadData = payload;
|
payloadData = payload;
|
||||||
MyType = theType;
|
MyType = theType;
|
||||||
@ -170,7 +173,7 @@ namespace EduNetworkBuilder
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (startTTL != -1) this.TTL = startTTL;
|
if (startTTL != -1) this.TTL = startTTL;
|
||||||
|
OrigTTL = TTL;
|
||||||
|
|
||||||
if (theType != PacketType.arp_answer && theType != PacketType.arp_request)
|
if (theType != PacketType.arp_answer && theType != PacketType.arp_request)
|
||||||
{
|
{
|
||||||
@ -228,6 +231,10 @@ namespace EduNetworkBuilder
|
|||||||
case PacketType.ping_request:
|
case PacketType.ping_request:
|
||||||
pencolor = Color.Blue;
|
pencolor = Color.Blue;
|
||||||
break;
|
break;
|
||||||
|
case PacketType.tracert_reply:
|
||||||
|
case PacketType.tracert_request:
|
||||||
|
pencolor = Color.LightBlue;
|
||||||
|
break;
|
||||||
case PacketType.tun_packet:
|
case PacketType.tun_packet:
|
||||||
pencolor = Color.White;
|
pencolor = Color.White;
|
||||||
break;
|
break;
|
||||||
|
@ -1657,6 +1657,14 @@
|
|||||||
<value>Device cannot respond - Packet Failed</value>
|
<value>Device cannot respond - Packet Failed</value>
|
||||||
<comment>ND_DoInputFromLink_PowerOff = Device cannot respond - Packet Failed</comment>
|
<comment>ND_DoInputFromLink_PowerOff = Device cannot respond - Packet Failed</comment>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ND_ProcessArrival_TracerouteArrived" xml:space="preserve">
|
||||||
|
<value>TTL reached.</value>
|
||||||
|
<comment>ND_ProcessArrival_TracerouteArrived = TTL reached.</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ND_ProcessArrival_TracertReply" xml:space="preserve">
|
||||||
|
<value>Traceroute Destination Reached</value>
|
||||||
|
<comment>ND_ProcessArrival_TracertReply = Traceroute Destination Reached</comment>
|
||||||
|
</data>
|
||||||
<data name="_Traceroute" xml:space="preserve">
|
<data name="_Traceroute" xml:space="preserve">
|
||||||
<value>Traceroute</value>
|
<value>Traceroute</value>
|
||||||
<comment>_Traceroute = Traceroute</comment>
|
<comment>_Traceroute = Traceroute</comment>
|
||||||
|
Loading…
Reference in New Issue
Block a user