Friday, May 25, 2012

Trace Route using .Net Framwrok

I was working on a task where i need to work with trace route command if ICMP and in .net i was searching for any managed method of doing so, this is what i came across it seems like a simple and good approach towards trace route using .net

public string Traceroute(string ipAddressOrHostName)

{

    IPAddress ipAddress = Dns.GetHostEntry(ipAddressOrHostName).AddressList[0];

    StringBuilder traceResults = new StringBuilder();



    using(Ping pingSender = new Ping())

    {

        PingOptions pingOptions = new PingOptions();

        Stopwatch stopWatch = new Stopwatch();

        byte[] bytes = new byte[32];



        pingOptions.DontFragment = true;

        pingOptions.Ttl = 1;

        int maxHops = 30;



        traceResults.AppendLine(

            string.Format(

                "Tracing route to {0} over a maximum of {1} hops:",

                ipAddress,

                maxHops));


        traceResults.AppendLine();


        for(int i = 1; i < maxHops + 1; i++)

        {

            stopWatch.Reset();

            stopWatch.Start();

            PingReply pingReply = pingSender.Send(

                ipAddress,

                5000,

                new byte[32], pingOptions);



            stopWatch.Stop();


            traceResults.AppendLine(

                string.Format("{0}\t{1} ms\t{2}",

                i,

                stopWatch.ElapsedMilliseconds,

                pingReply.Address));


            if(pingReply.Status == IPStatus.Success)
            {
                traceResults.AppendLine();

                traceResults.AppendLine("Trace complete."); break;

            }


            pingOptions.Ttl++;

        }


    }


    return traceResults.ToString();
}

No comments: