dev.net.ua

Українська Спільнота Розробникiв
 
Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога | Увійти Live ID
в Пошук

Получить количество пройденных хостов при пинге.

Останнє повідомлення 07-10-2007, 12:49 від Molinari. 5 відповіді.
Сортувати: Попереднє Наступне
  •  06-10-2007, 4:56 4345

    Получить количество пройденных хостов при пинге.

    Добрый день
    У меня такой вопрос - как при выполнении пинга узнать количество серверов, через которые прошел пакет пока не достиг конечной точки?
    Я пробовал после пинга в (использовал System.Net.Networkinformation.Ping) PingResult смотреть свойство PingResultl.Options.Ttl но он возвращает разные числа, которые не описывают количество проходов пакета, которое я получаю например при роутинге. Буду благодарен если вы мне обьясните, что именно возвращает PingResul.Options.Ttl? И как же всётаки получить количество серверов, через которые прошел пинг? Меня интересует именно количество, остальная информация о серверах не нужна.
  •  07-10-2007, 7:54 4348 у відповідь на 4345

    Re: Получить количество пройденных хостов при пинге.

    Molinari:
    Буду благодарен если вы мне обьясните, что именно возвращает PingResul.Options.Ttl?

    MSDN:
    Tthe number of routing nodes that can forward the Ping data before it is discarded.

    По замовчуванню, ТТЛ рівен 128, кожна нода вікидає по одиниці. Отже 128 - ТТЛ, буде кількість нод, через які пройшов пінг.

    Пробуйте, розповідайте....


    MCPD(Web,Windows,Enterprise), MCTS (WPF, WCF)
  •  07-10-2007, 11:24 4352 у відповідь на 4345

    Re: Получить количество пройденных хостов при пинге.

    Спасибо за ответ. Еще вопрос.
    Вот  код, который выолняет роутиг хоста посылая пинги с постоянно увеличивающимя на еденицу Ttl:
    static void Main(string[] args)
            {
                string host = "ya.ru";
                for (int TTL = 1; TTL < 256; TTL++)
                {
                    //i-значение TTL
                    Ping Ping = new Ping();
                    byte[] buffer = ASCIIEncoding.ASCII.GetBytes("test packet");
                    PingOptions options = new PingOptions(TTL, true);
                    PingReply Result = Ping.Send(host, 1000, buffer, options);                               
                    if((Result.Status & IPStatus.TtlExpired)!=IPStatus.TtlExpired)
                    {
                        break;
                    }               
                    Console.WriteLine(TTL.ToString() + " " + Result.Address.ToString());
                }
               
                Console.ReadLine();
            }

     

    Дело в том, что конечной точки хоста ya.ru этот пинг у меня достигает за 10 хопов, в то время как tracert ya.ru достигает за 15. Почему такая разница?

  •  07-10-2007, 11:41 4353 у відповідь на 4352

    Re: Получить количество пройденных хостов при пинге.

    Навіть не знаю... Моя попередня відповідь з МСДН. Певне треба почекати ще, можливо хтось стикався з цією проблемою. Якщо буде вже зовсім проблематично, то можна виконати tracert, і пропарисити відповідь. Шлях зрозуміло не дуже...

    З таким кодом, в мене результат ідентичний до tracert. І там, і там 16 хостів, я навіть кожну ІП адрессу первірив. Коли консоль була до первірки виводило без останнього хоста. 

    PingOptions options = new PingOptions(TTL, true);
    PingReply Result = Ping.Send(host, 1000, buffer, options);                              
    Console.WriteLine(TTL.ToString() + " " + Result.Address.ToString());
    if((Result.Status & IPStatus.TtlExpired)!=IPStatus.TtlExpired)
    {
          break;
     }               

     


    MCPD(Web,Windows,Enterprise), MCTS (WPF, WCF)
  •  07-10-2007, 12:14 4354 у відповідь на 4353

    Re: Получить количество пройденных хостов при пинге.

    Дело в том, что роутинг выполняет web приложение через web-сервис, который обращается к библиотеке, которая выполняет роутинг. Да еще и все хопы запускаются паралельно. Так, что tracert я не могу запустить. Я могу сделать роутинг через сокеты, но там проблема с паралельным запуском хопов.

  •  07-10-2007, 12:49 4356 у відповідь на 4345

    Re: Получить количество пройденных хостов при пинге.

    Я разобрался. Дело в том, что в моем случае роутинг для ya.ru проходил через 2 шифрующихся сервера. Которые как раз и находились на 11 и 12 хопе. Я лишь основывался на статусе TlExpired для продолжения роутинга. А шифрованный сервер возвращал TimedOut, который я воспринимал как ответ от конечной точки и прекращал роутинг.

    Я это исправил. Вот код:



    static void Main(string[] args)
            {
                string host = "ya.ru";
                for (int TTL = 1; TTL < 256; TTL++)
                {
                   
                    Ping Ping = new Ping();
                    byte[] buffer = ASCIIEncoding.ASCII.GetBytes("test packet");
                    PingOptions options = new PingOptions(TTL, true);
                    PingReply Result = Ping.Send(host, 1000, buffer, options);

                    if (Result.Address != null)
                    {
                        Console.WriteLine(TTL.ToString() + " " + Result.Address.ToString());
                    }
                    else
                    {
                        Console.WriteLine(TTL.ToString() +  " ENCRYPTED SERVER");
                    }

                    if (Result.Status != IPStatus.TtlExpired & Result.Status != IPStatus.TimedOut)
                    {
                        break;
                    }
                   
                }
               
                Console.ReadLine();
            }

Переглядати як новосний Блог RSS в XML