Perl, Ping Определение расстояния до узла
Решил по принципу Ping, расст=MinTTL с которым пакет доходит, слегка оптимизировав процесс перебора TTL...
Но Ping пакет помимо начального TTL должен содержать и реальное значение счетчика... Расст=StartTTL-EndTTL
Что позволит определить расстояние с 1 пинга...
Но как выдрать конечный TTL? :confused:
Заранее спасибо.
Цитата: Sania
Задача: определить расстояние до узла.
Решил по принципу Ping, расст=MinTTL с которым пакет доходит, слегка оптимизировав процесс перебора TTL...
Но Ping пакет помимо начального TTL должен содержать и реальное значение счетчика... Расст=StartTTL-EndTTL
Что позволит определить расстояние с 1 пинга...
Но как выдрать конечный TTL? :confused:
Заранее спасибо.
Решил по принципу Ping, расст=MinTTL с которым пакет доходит, слегка оптимизировав процесс перебора TTL...
Но Ping пакет помимо начального TTL должен содержать и реальное значение счетчика... Расст=StartTTL-EndTTL
Что позволит определить расстояние с 1 пинга...
Но как выдрать конечный TTL? :confused:
Заранее спасибо.
начнем с начала. что значит "расстояние до узла"? в километрах, маршрутизаторах, попугаях?
Цитата: squirL
начнем с начала. что значит "расстояние до узла"? в километрах, маршрутизаторах, попугаях?
Ну если вы мне подскажите, как считать в километрах и попугаях (да хотяб в удавах), то буду удивлен и благодарен... (хотя исходя из времени отклика узла определит физическое расстояние до него сложновато).
Но исходя из того, что в вопросе упомянут TTL, можно предположить, что требуется расстояние в хопах(к-во узлов до компа).
[кстати расстояние в КМ дано :D ]
Что качается TTL, то мне помнится, что начальный TTL записан в Ping пакете, а конечный TTL кажись запрятан на уровне TCP/IP фрейма... Хотя я могу ошибаться...
пример. допустим между вами и пунктом назначения A один роутер.
вы посылаете ping A c TTL 1. первый же роутер дает вам ICMP TIME_EXCEEDED. посчитали. посылаем с TTL 2. Получаем ICMP echo reply. вывод - мы прошли один хоп до пункта назначения ;)
насчет километров - приблизительно можно посчитать ;) просчитав среднее время хождения определенного количества пакетов до узла и зная скорость распространения э/м волны по проводам ;)
squirL, вы первый пост читали???
Я уже решил эту задачу подбором TTL... (можно считать что это trace).
с помощью обычного ping
1. Перебор TTL по порядку занимает столько же времени, сколько хопов до узла, в моем случае это от 4 до 25...
2. Бинарный поиск позволяет определить minTTL за 8 ping'ов, т.е. в большинстве случаев - быстрее.
3. В ответ на первый ping нам приходит пакет, в котором указан TTL их сервера (в пределах России это обычно 128 или 64), что позволяет сэкономить еще 1-2 пинга (т.е. 6-7).
4. Найти узел, до которого больше 32 узлов, сложновато т.е. мы определяем расстояние до любого узла за 5 пингов+1двухпакетный пинг для определения доступности узла (на 1й ping пакет многие узлы не отвичают... видимо DOS боятся:D )
В итоге получаем 7 пакетов...
Мой вопрос: как определить расстояние в 1-2 пакета...
Ну можете еще подсказать, как на Perl'е асинхрон пишется...
Обьяснить задачу подробнее?
Цитата: Sania
:mad:
squirL, вы первый пост читали???
squirL, вы первый пост читали???
читал. ваш алгоритм не кажется мне оптимальным. вы можете еще раз описать его пошагово?