TraceRoute and Ping in C#

后端 未结 6 724
我在风中等你
我在风中等你 2020-11-27 14:25

Does anyone have C# code handy for doing a ping and traceroute to a target computer? I am looking for a pure code solution, not what I\'m doing now, which is invoking the p

6条回答
  •  自闭症患者
    2020-11-27 15:28

    As am improvement to Scotts code answer above, I found that his solution doesn't work if the route tapers off into nothing before reaching the destination - it never returns. A better solution with at least a partial route could be this (which I've tested and it works well). You can change the '20' in the for loop to something bigger or smaller or try to detect if it's taking too long if you want to control the number of iterations some other way. Full credit to Scott for the original code - thanks.

        using System.Collections.Generic;
        using System.Net.NetworkInformation;
        using System.Text;
        using System.Net;
    
        ...
    
        public static void TraceRoute(string hostNameOrAddress)
        {
            for (int i = 1; i < 20; i++)
            {
                IPAddress ip = GetTraceRoute(hostNameOrAddress, i);
                if(ip == null)
                {
                    break;
                }
                Console.WriteLine(ip.ToString());
            }
        }
    
        private static IPAddress GetTraceRoute(string hostNameOrAddress, int ttl)
        {
            const string Data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            Ping pinger = new Ping();
            PingOptions pingerOptions = new PingOptions(ttl, true);
            int timeout = 10000;
            byte[] buffer = Encoding.ASCII.GetBytes(Data);
            PingReply reply = default(PingReply);
    
            reply = pinger.Send(hostNameOrAddress, timeout, buffer, pingerOptions);
    
            List result = new List();
            if (reply.Status == IPStatus.Success || reply.Status == IPStatus.TtlExpired)
            {
                return reply.Address;
            }
            else
            {
                return null;
            }
        }
    

提交回复
热议问题