2012-04-25 3 views
13

Согласно Стивенсу (TCP/IP Illustrated) трассировки программы посылает UDP-пакеты на хост назначения с инкрементным TTL (1, 2, 3, и т.д.), чтобы получить промежуточную информацию хмеля из ICMP TTL EXPIRED Сообщения.
«назначение достигло» условие сообщения об ICMP PORT UNREACHABLE, потому что трассировка адреса случайного порта с большим числом (то есть: вряд ли кто-то слушает там)
Так что мой вопрос: есть ли технический причины (недостатки, RFC и т. д.) использовать UDP-пакеты, а не использовать, например, ICMP-эхо-запрос сообщения (с увеличением TTL) и использовать ответ эхо-ответа в качестве конечного условия?
Я понимаю, что эхо-ответ ICMP может быть отфильтрован брандмауэрами или другими чистыми устройствами в середине, но я предполагаю, что это может произойти также UDP-пакеты;)
Почему traceroute отправляет UDP-пакеты, а не ICMP?

Большого спасибо
Sergio

ответ

13

Это на самом деле «старый» метод выполнения traceroutes. Я полагаю, основная мотивация заключалась в том, что отправка простых UDP-пакетов не требует особых привилегий, так как отправка пакетов ICMP делает (сырые сокеты или их эквивалент). Вот почему, например, ping, как правило, устанавливается в root, что является большим риском для безопасности.

В настоящее время traceroute поддерживает также пакеты зондов ICMP и TCP, поэтому вы, скорее всего, сможете прокрасться через брандмауэры, которые скорее всего будут развернуты без рассмотрения. Это также означает, что traceroute, вероятно, также является rootu setuid в вашей системе. См. Его страницу руководства, особенно часть о доступных методах: http://linux.die.net/man/8/traceroute