В рамках одной задачи столкнулся с необходимостью аналога tracert на c#
Посмотрел на codeproject.com подобные реализации, сделал свою, вроде работает нормально, но есть одно НО
При построении трассы некоторые хосты не откликаются (превышен таймаут).
Попробовал системным ping-ом так и есть, но если попробовать системным tracert.exe, то все отклики приходят.
Подскажите в чем может быть причина? По какому принципу работает системная утилита (tracert.exe)?
Где-то нашел что такое может случиться при использовании мегафона (через usb-модем), якобы они так защищаются от DDoS
Но системная утилита показывает все отлично, а моя некоторые хосты игнорирует...
Re: Хост не пингуется, но маршрут отображается нормально
От:
Аноним
Дата:
18.11.11 08:20
Оценка:
B>Попробовал системным ping-ом так и есть, но если попробовать системным tracert.exe, то все отклики приходят. B>Подскажите в чем может быть причина? По какому принципу работает системная утилита (tracert.exe)?
А ты сниферком то глянь милчеловек. Вдруг протоколы там разные? Да за одно и принципы все как на лодни увидишь.
Re: Хост не пингуется, но маршрут отображается нормально
Здравствуйте, beevasya, Вы писали:
B>В рамках одной задачи столкнулся с необходимостью аналога tracert на c# B>Посмотрел на codeproject.com подобные реализации, сделал свою, вроде работает нормально, но есть одно НО B>При построении трассы некоторые хосты не откликаются (превышен таймаут). B>Попробовал системным ping-ом так и есть, но если попробовать системным tracert.exe, то все отклики приходят. B>Подскажите в чем может быть причина? По какому принципу работает системная утилита (tracert.exe)? B>Где-то нашел что такое может случиться при использовании мегафона (через usb-модем), якобы они так защищаются от DDoS B>Но системная утилита показывает все отлично, а моя некоторые хосты игнорирует...
Я думаю, вам нужно наращивать TTL при пинге.
IcmpSendEcho, IP_OPTION_INFORMATION. Аналог на C# не знаю, наверняка есть.
Re: Хост не пингуется, но маршрут отображается нормально
Здравствуйте, beevasya, Вы писали:
b> Попробовал системным ping-ом так и есть, но если попробовать системным tracert.exe, то все отклики приходят. b> Подскажите в чем может быть причина? По какому принципу работает системная утилита (tracert.exe)?
Наверное в том, что ping — это ICMP, а traceroute — это UDP.
Так же, следует иметь ввиду, что они могут идти совершенно разными маршрутами и результат может удивлять
Здравствуйте, Anton Batenev, Вы писали:
b>> Попробовал системным ping-ом так и есть, но если попробовать системным tracert.exe, то все отклики приходят. b>> Подскажите в чем может быть причина? По какому принципу работает системная утилита (tracert.exe)?
AB>Наверное в том, что ping — это ICMP, а traceroute — это UDP.
traceroute (*nix) — это по умолчанию UDP, а tracert.exe (Windows) — это ICMP type 8 (echo request). Домашнее задание — проверить сниффером.
AB>Так же, следует иметь ввиду, что они могут идти совершенно разными маршрутами и результат может удивлять
Разница между ping и tracert будет в том, что на tracert промежуточные хосты отвечают ICMP TTL exceeded, а если пинговать их напрямую — ICMP echo reply. В зависимости от того, как настроен этот раутер, он может выпускать ICMP TTL exceeded но фильтровать ICMP echo reply — результат будет именно такой как у автора треда.