Трассировка сетевого маршрута

Оглавление

1. Что такое трассировка. Для чего нужна трассировка узлов

2. Принципы работы трассировки

3. Виды трассировки

4. Программы для трассировки

5. traceroute

5.1 Как пользоваться traceroute

5.2 Методы трассировки в traceroute

5.3 Как ускорить трассировку. Как отключить обратное преобразование IP в имена хостов при трассировке

5.4 Трассировка IPv6

5.5 Изменение порта

5.6 Как начать трассировку с определённого узла. Как уменьшить или увеличить число узлов для трассировки

5.7 Выбор интерфейса для трассировки

5.8 Как показать к какой автономной системе принадлежит узел при трассировке

5.9 Опции traceroute

6. tracepath

7. mtr и mtr-gtk (консольная и графическая версия)

8. lft

9. tcptraceroute

10. Трассировка сети в Nmap

11. Трассировка программой ping

12. Трассировка в Windows

13. Заключение


Что такое трассировка. Для чего нужна трассировка узлов

Трассировка маршрута пакета до сетевого хоста показывает все промежуточные узлы, через которые проходит пакет, пока доберётся до указанной цели. То есть с помощью трассировки можно узнать, по каким узлам, с какими IP адресами, передаётся пакет прежде чем быть доставленным до точки назначения.

Трассировка может применяться для выявления связанных с работой компьютерной сети проблем, а также для исследования сети (определения структуры сети, поиска промежуточных сетевых узлов).

Принципы работы трассировки

Пересылаемые сетевые пакеты состоят из двух областей: заголовки и данные. В заголовках находится разная информация, например, IP адреса пункта отправки и пункта назначения, порты отправки и назначения, тип пакета, контрольная сумма пакета и прочее. Среди полей заголовка, у IP протокола есть такое поле как time to live (TTL) — время жизни пакета. Это счётчик с числом, которое уменьшается на единицу каждый раз, когда пакет проходит новый узел. Этот счётчик сделан для того, чтобы проблемный пакет (например, при ошибке, повлекшей закольцованный маршрут) не путешествовал по сети бесконечно. То есть любой пакет пройдя определённое количество узлов в конце-концов достигнет точки назначения или будет отброшен одним из узлов сети, когда закончится «время жизни».

Когда счётчик TTL становится равным нулю, очередной шлюз просто не пересылает этот пакет дальше. Но при этом шлюз на тот IP адрес, откуда пришёл пакет с истёкшим временем жизни, отправляет по протоколу ICMP ответ TIME_EXCEEDED (время жизни кончилось). И этот ответ содержит IP адрес шлюза, где пакет закончил своё существование.

Так вот, суть трассировки в том, что отправляется один пакет с временем жизни (TTL) установленным на единицу — первый шлюз уменьшает значение на единицу, смотрит, что счётчик стал равен нулю, никуда не отправляет этот пакет, зато нам отправляет ответ, что пакет «умер». Мы и так знаем, что пакет умер — из этого ответа нас интересует только IP адрес шлюза, где с пакетом случилось это несчастье. Затем отправляется пакет со счётчиком установленным на 2 — пакет проходит первый шлюз (его IP мы уже знаем), но несчастье (счётчик достигает нуля) с ним случается уже на втором шлюзе — мы получаем ICMP ответ с IP этого шлюза. Затем отправляется следующий пакет и т. д., пока не будут определены все узлы до нужного нам сетевого хоста.

Виды трассировки

Имеется несколько видов трассировки. В основном они различаются отправляемым пакетом — это может быть пакет транспортного протокола TCP или UDP, либо протокола межсетевых управляющих сообщений ICMP, либо сырой IP пакет.

Иногда из-за файерволов или настройки сетевых узлов не удаётся получить IP адрес узла. В этом случае можно попробовать использовать другой метод, который может дать результаты.

Это можно проиллюстрировать на следующих двух примерах трассировки до одного и того же хоста:

traceroute hackware.ru

Звёздочки говорят о том, что мы не узнали часть узлов.

sudo traceroute -I hackware.ru

Благодаря изменению метода трассировки удалось узнать все промежуточные узлы. Другие методы могут дать отличные от показанных результаты.

Некоторые программы позволяют выбирать метод трассировки, менять номер порта, а также устанавливать значения некоторых полей в заголовке пакета.

Программы для трассировки

Имеется много разных утилит для трассировки, некоторые из них поддерживают различные методы трассировки. Примеры таких программ:

  • traceroute
  • tracepath
  • mtr и mtr-gtk (соответственно, консольная и графическая версия)
  • lft
  • tcptraceroute

Ещё определять узлы маршрута пакета можно с помощью Nmap (несколькими способами) и даже с помощью ping!

В этой статье я рассмотрю все перечисленные выше программы. Начнём знакомство с traceroute, поскольку в ней реализовано больше всего методов сканирования.

traceroute

Как пользоваться traceroute

Для запуска трассировки достаточно указать IP или сайт, до которого вы хотите проследить маршрут:

traceroute IP_или_ДОМЕН

Если вас интересуют ближайшие узлы (локальная сеть, например), то в качестве конечного пункта можно выбрать любой сайт.

Методы трассировки в traceroute

В современном сетевом окружении традиционные методы трассировки не всегда применимы из-за широкого распространения файерволов. Такие файерволы фильтруют «маловероятные» UDP порты или даже ICMP echo пакеты. Для решения этой проблемы реализованы некоторые дополнительные методы трассировки сети (включая tcp). Эти методы пытаются использовать другие протокол и порт источника/назначения, чтобы обойти файерволы (чтобы файерволы воспринимали их как просто начало сетевой сессии разрешённого типа).

У разных методов есть специфичные для них опции — они зависят от используемого протокола. Эти опции метода можно указать с помощью опции -O. Несколько опций разделяются запятой (или используйте в командной строке несколько -O). Каждый метод может иметь свои собственные особенные опции или может не иметь из вовсе.

default

Метод по умолчанию — используется если не указан другой, либо можно указать явно опцией -M default. Это традиционный, древний метод трассировки маршрута.

Пакетами зондирования являются udp датаграммы с так называемым "unlikely" (маловероятным) портом назначения. Первым "unlikely" портом зондирования является 33434 затем для каждого следующего зонда он увеличивается на единицу. Поскольку ожидается, что порт не используется, то хост назначения обычно возвращает конечный ответ "icmp unreach port". Номер порта можно поменять (об этом ниже).

Данный метод могут выполнять непривилегированные пользователи.

icmp

Сейчас это самый типичный метод, он использует в качестве зондов пакеты icmp echo. Если вы можете пинговать хост назначения, то icmp трассировка также применима. Для выбора этого метода используется опция -M icmp или её короткий вариант -I.

Этот метод разрешён для непривилегированных пользователей.

У этого метода имеется две специфичные опции

raw

Использовать только сырые сокеты (традиционный способ).

По умолчанию этот методы пробуется первым (по причинам совместимости), затем новые сокеты dgram icmp в качестве резервного варианта.

dgram

Использовать только сокеты dgram icmp

tcp

Хорошо известный современный метод, предназначен для обхода файерволов. Для использования укажите опцию -M tcp либо короткий вариант -T. Использует постоянный порт назначения (по умолчанию это 80, http).

Если на сетевом пути трассировки присутствуют какие-либо фильтры, то весьма вероятно, что фильтруются «необычные» udp порты (такие, как используется методом по умолчанию) или даже icmp echo (как для icmp), и весь процесс трассировки остановится на таком файерволе. Для обхода сетевого фильтра нам нужно использовать только комбинации из разрешённой пары протокол/порт. Если мы делаем трассировку, допустим, до почтового сервера, то весьма вероятно, что с помощью -T -p 25 мы можем достичь его, даже если с помощью -I не получается это сделать.

Этот метод использует хорошо известную «технику полуоткрытых соединений», благодаря которой приложения на компьютере назначения вовсе не видят наши пакеты для исследования (зонды). Обычно отправляется tcp syn. Для портов, которые не прослушиваются, мы получаем ответ tcp reset — и всё готово. Для активно прослушиваемых портов мы получаем tcp syn+ack, но отвечаем на это tcp reset (вместо ожидаемого tcp ack), таким образом удалённая tcp сессия сбрасывается, а прослушивающее порт приложение даже не получает уведомление.

Для метода tcp имеется несколько опций:

syn,ack,fin,rst,psh,urg,ece,cwr

Устанавливает определённые tcp флаги для пакета зондирования, можно использовать любую их комбинацию.

flags=ЧИСЛО

Устанавливает поле флагов в tcp заголовке на точное ЧИСЛО.

ecn

Отправляет пакет syn с флагами tcp ECE и CWR (для Explicit Congestion Notification, rfc3168).

sack,timestamps,window_scaling

Использует соответствующую опцию tcp заголовка в исходящем пакете зондирвоания.

sysctl

Использует настройки текущей sysctl (/proc/sys/net/*) для опций tcp заголовка для вышеприведённых опций и ecn. Всегда установлено на значение по умолчанию, если ничего не указано.

mss=ЧИСЛО

Использовать значение ЧИСЛО для опции tcp заголовка maxseg (когда syn).

info

Печатать tcp флаги финальных tcp ответов когда достигнут целевой хост. Помогает определить, прослушивает ли приложение порт и другие полезные вещи.

Опциями по умолчанию являются syn,sysctl.

tcpconn

Начальная реализация tcp метода просто использующего вызов connect(2), который открывает полную tcp сессию. Не рекомендуется для нормального использование, поскольку всегда влияет на приложение прослушивающее порт на хосте назначения.

Для задействования этого метода используйте опцию -M tcpconn.

udp

Использует udp датаграммы с постоянным портом назначения (по умолчанию 53, dns). Также предназначена для обхода файерволов. Для использования этого метода трассировки укажите опцию -M udp или сокращённый вариант -U.

Обратите внимание, что в отличие от tcp метода, соответствующее приложение на хосте назначения всегда получает наши зонды (со случайными данными) что может смутить его. В большинстве случаев оно не ответит на наши пакеты, поэтому мы никогда не увидим последний хоп (узел) в пути трассировки. (К счастью, кажется что по крайней мере DNS серверы присылают какой-то ответ).

Этот метод не требует повышенных прав.

udplite

Использует для зондов датаграммы udplite (с постоянным портом назначения, по умолчанию 53). Для активации этого метода укажите опцию -M udplite или -UL.

Этот метод не требует повышенных прав.

Опции:

coverage=ЧИСЛО

Устанавливает покрытие отправки udplite на ЧИСЛО.

dccp

Использует для зондов пакеты DCCP Request (rfc4340). Этот метод можно задействовать опциями -M dccp или -D.

Этот метод использует такую же «технику полуоткрытых соединений», которая используется для TCP. Портом назначения по умолчанию является 33434.

Опции:

service=ЧИСЛО

Устанавливает сервисный код DCCP на ЧИСЛО (по умолчанию это 1885957735).

raw

Этим методом отправляются сырые пакеты указанного протокола. Для вызова этого метода используйте опцию -M raw или -P ПРОТОКОЛ.

Не используется специфичные для транспортных протоколов заголовки, только заголовки IP протокола.

Подразумевает -N 1 -w 5 .

Опции:

protocol=ПРОТОКОЛ

Использовать IP ПРОТОКОЛ (по умолчанию 253).

Список протоколов, инкапсулируемых в IP на Википедии, в первоисточнике.

Как ускорить трассировку. Как отключить обратное преобразование IP в имена хостов при трассировке

Чуть выше описаны принципы работы трассировки — отправка пакетов с постоянно увеличивающимся сроком жизни. На самом деле — все пакеты (с TTL 1, с TTL 2, с TTL 3 и т. д.) можно отправить одновременно. И именно так это и происходит — по умолчанию отправляются 16 пакетов за раз (количество можно изменить опцией -N). Это делается для ускорения трассировки.

Поэтому в действительности трассировка выполняется очень быстро. Те 1-2 секунды, которые как нам кажется определяются узлы сети, на самом деле тратятся на получение имён хостов для IP. С помощью опции -n это можно отключить.

Используя программу time можно замерить время выполнения программы с опцией -n и без неё:

time traceroute -n google.com

time traceroute google.com

Время выполнения самой трассировки 0,206s, а время трассировка+определение имени хостов получилось 2,360s, то есть в 10 раз дольше.

Трассировка IPv6

По умолчанию программа получает IP для указанного для трассировки хоста и на основе полученного IP адреса автоматически определяет, какой протокол используется: IPv4 или IPv6. Если получены IP для обоих протоколов, то по умолчанию используется IPv4.

С помощью опций -4 и -6 можно явно указать желаемый протокол.

Например:

traceroute -6 -n google.com

Сеть, из которой делается трассировка с опцией -6, должна поддерживать IPv6, иначе ничего не получится.

Изменение порта

Поменять порт назначения можно с помощью опции:


-p ПОРТ, --port=ПОРТ

Для UDP трассировки указанный порт будет использовать в качестве базового (номер порта назначения будет увеличиваться для каждого зонда).

Для ICMP трассировки указанное число будет использоваться в качестве начальное значение ICMP последовательности (также увеличенное для каждого зонда).

Для TCP и других указанный порт будет использоваться в качестве постоянного порта назначения к которому нужно подключиться.

Обычно это не требуется, но также можно указать и порт источника, это делается опцией:

--sport=ПОРТ

Эта опция подразумевает -N 1 -w 5 . Обычно исходные порты (если это примениму к выбранному методу трассировки) выбираются системой.

Как начать трассировку с определённого узла. Как уменьшить или увеличить число узлов для трассировки

С помощью опции -f можно указать номер узла, с которого следует начать трассировку. По умолчание значение равно 1.

С помощью опции -m можно указать максимальное число хопов для трассировки, по умолчанию установлено на 30.

Выбор интерфейса для трассировки

По умолчанию пакеты отправляются с того интерфейса, для которого настроен маршрут по умолчанию. Но следующей опцией можно сделать так, что traceroute будет отправлять пакеты с указанного в строке команды интерфейса:

-i ИНТЕРФЕЙС, --interface=ИНТЕРФЕЙС

Как показать к какой автономной системе принадлежит узел при трассировке

Каждый IP адрес привязан к Автономной системе (AS). С помощью опции -A вы можете включить запрос номера AS для каждого узла по пути трассировки, например:

sudo traceroute -A -n suip.biz

Пример вывода:

 1  192.168.1.1 [AS198949]  1.102 ms  1.708 ms  2.720 ms
 2  10.20.48.1 [*]  7.121 ms  7.168 ms  11.242 ms
 3  10.246.245.241 [*]  15.368 ms  15.812 ms  15.788 ms
 4  10.185.252.29 [*]  16.243 ms  16.213 ms  16.181 ms
 5  58.97.121.237 [AS38082/AS7470]  16.802 ms  16.776 ms  16.976 ms
 6  171.102.247.244 [AS38082/AS7470]  17.405 ms 171.102.247.114 [AS38082/AS7470]  16.320 ms 171.102.247.74 [AS38082/AS7470]  21.324 ms
 7  171.102.250.1 [AS38082/AS7470]  20.946 ms  20.521 ms  21.542 ms
 8  171.102.254.232 [AS38082/AS7470]  21.896 ms  22.789 ms  23.755 ms
 9  171.102.250.156 [AS38082/AS7470]  23.431 ms  23.036 ms  24.393 ms
10  122.155.224.197 [as4651]  26.448 ms 122.155.226.85 [as4651]  25.531 ms 122.155.226.89 [as4651]  26.770 ms
11  61.19.9.66 [AS4651/AS3549]  76.868 ms  77.298 ms  56.532 ms
12  * * *
13  87.226.181.87 [AS12389]  306.596 ms  306.452 ms 87.226.183.87 [AS12389]  306.332 ms
14  81.177.108.86 [AS12389]  307.373 ms  307.322 ms  307.328 ms
15  94.142.138.40 [AS48666]  307.290 ms  307.268 ms  307.211 ms
16  185.117.153.79 [AS48666]  307.185 ms  307.181 ms  306.512 ms

Как можно видеть, автономная система не определена для локальных IP 10.*.*.* - что вполне логично, так как эти адреса никому не назначены. Что касается адреса 192.168.1.1 и автономной единицы AS198949, то это какая-то ошибка.

Как можно увидеть из вывода предыдущей команды, первые четыре узла имеют локальный IP адреса. Узлы с 5 по 9 принадлежат одной автономной системе AS38082/AS7470. Предпоследние два узла принадлежат одной автономной системе AS12389 и последние два узла также принадлежат одной автономной системе AS48666 — интернет-провайдеру, на котором размещён сайт suip.biz.

Опции traceroute

У команды traceroute имеются и другие опции которые могут вам пригодиться. Вы можете ознакомиться с ними в справочной странице данной программы:

man traceroute

tracepath

Программа tracepath схожа с traceroute, но использует только одну технику трассировки: UDP, для которой можно указать свой порт. Из-за выбранной техники, программа не требует повышенных привилегий.

Пример запуска:

tracepath suip.biz

Пример вывода:

 1?: [LOCALHOST]                      pmtu 1500
 1:  _gateway                                              1.247ms 
 1:  _gateway                                              1.031ms 
 2:  10.20.48.1                                            9.097ms 
 3:  10.246.245.241                                       14.034ms 
 4:  10.185.252.194                                       14.379ms 
 5:  10.185.252.29                                        11.530ms asymm  4 
 6:  58-97-121-237.static.asianet.co.th                   13.849ms asymm  5 
 7:  171-102-247-184.static.asianet.co.th                 15.737ms asymm  6 
 8:  171-102-250-1.static.asianet.co.th                   64.185ms asymm  7 
 9:  171-102-254-232.static.asianet.co.th                 14.962ms asymm  8 
10:  171-102-250-156.static.asianet.co.th                 13.509ms asymm  9 
11:  122.155.226.89                                       18.793ms 
12:  61.19.9.66                                           58.829ms 
13:  no reply
14:  87.226.181.87                                       399.972ms asymm 23 
15:  81.177.108.86                                       263.969ms asymm 14 
16:  j37-ae9-3001.marosnet.net                           307.140ms 
17:  suip.biz                                            304.644ms reached
     Resume: pmtu 1500 hops 17 back 17

В первой колонке рядом с номера узла может стоять знак вопроса — он означает, что в присланном ответе отсутствует номер TTL и программа пытается его предположить.

Вместо звёздочек, если IP не узнан, пишется no reply.

В последнем столбце может быть цифра и слово asymm. Слово asymm означает, что маршрут является ассиметричным — то есть от нас до этого узла пакет идёт по одному пути, а от этого узла к нам пакет проходит по другому пути. Цифра означает возможное количество хопов от этого узла до нас — но информация не является надёжной.

У tracepath не очень много опций:

-4

Использовать только IPv4

-6

Использовать только IPv6

-n

Не печатать имя хоста, а печатать цифровое значение IP.

-b

Печатать и имя хоста и IP адрес в цифровом виде.

-l

Установить начальную длину пакета вместо 65535 для tracepath или 128000 для tracepath6.

-m

Установить максимальное число хопов (или максимум TTL) — то есть количество максимально «простукиваемых» узлов. По умолчанию 30.

-p

Установить начальный порт назначения.

mtr и mtr-gtk (консольная и графическая версия)

Программа mtr совмещает в себе функциональность программа traceroute и ping в едином инструменте диагностики сети. То есть эта программа показывает маршрут до указанного узла и непрерывно пингует каждые хоп и при этом собирает общую статистику потерь — на основе этих данных можно определить проблемный узел, на котором теряются пакеты.

Пример запуска:

mtr suip.biz

Пример вывода:

Данная программа поддерживает несколько методов трассировки.

Также она поддерживает разные форматы вывода для сохранения результатов, например, опция -C, --csv для сохранения результатов в формате CSV (обратите внимание, что на самом в качестве разделителя используется не запятая, а точка с запятой), а также опция -j, --json для сохранения в формате вывода JSON.

С помощью опции -n, --no-dns можно отключить преобразование IP в имена хостов.

Опцией -b, --show-ips можно включить отображение и имён хостов, и IP адресов.

Опцией -y n, --ipinfo n можно настроить вывод дополнительной информации о каждом IP хопа. В качестве n нужно указать цифру, которая означает:

              0   Показывать номер автономной системы (AS) (эквивалент -z)
              1   Показывать префикс IP
              2   Показать код страны на основе AS
              3   Показать RIR (ripencc, arin, ...)
              4   Показать дату выделения IP префикса

У меня при любых значениях -y всегда показывается только номер автономной системы. К счастью, между различными видами можно переключаться по кругу используя кнопку y:

Опция -z, --aslookup отображает номер Автономной Системы (AS) для каждого хопа.

Опция -f NUM используется для установки номера первого TTL. По умолчанию равно 1.

Опция -m указывать максимальное число хопов (максимальное значение time-to-live) которое будет обрабатываться при трассировке. По умолчанию равно 30.

Опция -U ЧИСЛО устанавливает максимум незнакомых хостов. По умолчанию равно 5. Видимо, после достижения этого значения дальнейшая трассировка будет остановлена.

С помощью опции -u, --udp программа будет использовать датаграммы UDP вместо ICMP ECHO.

А опцией -T, --tcp можно установить использование TCP SYN пакетов вместо ICMP ECHO. PACKETSIZE игнорируется, поскольку SYN пакеты не могут содержать данные.

В mtr можно использовать даже SCTP протокол для трассировки, для этого укажите опцию -S, --sctp и будет задействованы пакеты Stream Control Transmission Protocol вместо ICMP ECHO.

Порты:

       -P ПОРТ, --port ПОРТ
              Номер целевого порта для TCP/SCTP/UDP трассировок.

       -L ЛОКАЛЬНЫЙ_ПОРТ, --localport ЛОКАЛЬНЫЙ_ПОРТ
              Номер исходного порта для UDP трассировок.

Во время работы программы доступны интерактивные команды. Если нажать на d, то можно переключаться между различными отображениями:

Кнопкой r можно сбросить статистику.

Кнопкой o можно поменять порядок полей. Кстати, опцией -o можно установить, какие поля вы хотите отображать и их последовательность. Подробности смотрите по:

man mtr

lft

Программа lft имеет много опций трассировки и из описание следует, что программа пробует несколько комбинаций и автоматически выбирает лучшее решение. Честно говоря, я этого не заметил: результаты с ручным перебором разных методов трассировки позволяют подобрать наилучший вариант.

Программа хорошо документирована и при желании может использоваться в качестве альтернативы traceroute.

tcptraceroute

В программе tcptraceroute используются пакеты только одного протокола TCP. В заголовках этих пакетов опциями можно установить разные флаги. В программе traceroute также можно устанавливать флаги протокола TCP, причём возможностей для настройки больше.

Трассировка сети в Nmap

В Nmap для трассировки есть опция --traceroute, пример трассировки до сайта suip.biz:

sudo nmap --traceroute suip.biz

Если вы не хотите сканировать порты, а хотите просто выполнить трассировку, то добавьте опцию -sn:

sudo nmap --traceroute -sn suip.biz

Кстати, это значительно сократить время до вывода результатов.

Бывает, что выводимые при трассировке программой nmap данные не являются полными. В этом случае попробуйте дополнительно добавить опцию -PE:

sudo nmap --traceroute -sn -PE suip.biz

Источник.

В Nmap можно установить опции в заголовке пакета IP протокола. Среди этих опций имеется такая, которая сохраняет в заголовке пакета пройденный маршрут. Но у этого варианта есть ряд ограничений:

  • всего 9 слотов
  • некоторые устройства игнорируют эту опцию
  • некоторые устройства вообще не пропускают пакеты с установленной этой опцией

Тем не менее иногда это работает, пример команды:

sudo nmap -sn --ip-options "R" -n --packet-trace suip.biz

Пример вывода:

Binary ip options to be send:
\x01\x07\x27\x04\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00 
Parsed ip options to be send:
 NOP RR{#0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0}
Starting Nmap 7.70 ( https://nmap.org ) at 2019-07-12 18:02 MSK
SENT (0.8154s) ICMP [192.168.1.57 > 185.117.153.79 Echo request (type=8/code=0) id=64674 seq=0] IP [ttl=42 id=53218 iplen=68 ipopts={ NOP RR{#0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0}}]
SENT (0.8154s) TCP 192.168.1.57:36579 > 185.117.153.79:443 S ttl=43 id=9871 iplen=84 ipopts={ NOP RR{#0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0}} seq=1013479372 win=1024 <mss 1460>
SENT (0.8154s) TCP 192.168.1.57:36579 > 185.117.153.79:80 A ttl=41 id=45814 iplen=80 ipopts={ NOP RR{#0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0}} seq=0 win=1024 
SENT (0.8155s) ICMP [192.168.1.57 > 185.117.153.79 Timestamp request (type=13/code=0) id=32210 seq=0 orig=0 recv=0 trans=0] IP [ttl=55 id=35087 iplen=80 ipopts={ NOP RR{#0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0}}]
RCVD (1.1526s) ICMP [185.117.153.79 > 192.168.1.57 Echo reply (type=0/code=0) id=64674 seq=0] IP [ttl=48 id=44985 iplen=68 ipopts={ RR{ 10.246.245.242 10.185.252.193 10.185.252.29 10.185.0.12 171.102.250.3 171.102.250.128 203.144.128.48 203.144.144.8 103.3.177.50#} EOL}]
Nmap scan report for suip.biz (185.117.153.79)
Host is up (0.34s latency).
Other addresses for suip.biz (not scanned): 2a02:f680:1:1100::3d5f
Nmap done: 1 IP address (1 host up) scanned in 1.20 seconds

Обратите внимание на строку:

RCVD (1.1526s) ICMP [185.117.153.79 > 192.168.1.57 Echo reply (type=0/code=0) id=64674 seq=0] IP [ttl=48 id=44985 iplen=68 ipopts={ RR{ 10.246.245.242 10.185.252.193 10.185.252.29 10.185.0.12 171.102.250.3 171.102.250.128 203.144.128.48 203.144.144.8 103.3.177.50#} EOL}]

В ней перечислены первые 9 узлов через которые прошёл пакет.

Трассировка программой ping

Программа ping также умеет записывать маршрут — для этого программу нужно запустить с опцией -R. Она в пакет ECHO_REQUEST добавляет опцию RECORD_ROUTE и отображает буфер маршрута возвращаемых пакетов. Эта та же опция, которую использует Nmap. Ограничения такие же: максимум 9 слотов, многие хосты игнорирует или отбрасывают эту опцию.

Пример запуска:

ping -R suip.biz

Пример вывода:

IP маршрута выводятся при каждом пинге. Если маршрут не меняется, то выводится надпись, что маршрут не изменился.

Несмотря на все ограничения опции RECORD_ROUTE, иногда она бывает единственным вариантом получить хоть какую-то информацию о маршруте, поскольку команда ping практически всегда присутствует и не требует повышенных привилегий для запуска.

Трассировка в Windows

В Windows для трассировки сети имеется встроенная команда tracert. У неё практически отсутствуют опции. Для запуска команды достаточно указать имя удалённого хоста:

tracert suip.biz

Если вам недостаточно такой функциональности, то вы можете установить Nmap в Windows.

Заключение

Трассировка может быть полезной для изучения структуры сети (например, сети вашего Интернет-провайдера), а также для исправления проблем с передачей данных (например, для определения узла, дальше которого пакеты не проходят).

Самой богатой по функционалу для трассировки сети является программа traceroute. Другие программы также или содержат интересные опции или могут использоваться в качестве альтернатив, если ничего другое не доступно или если запуск traceroute прав суперпользователя.

Рекомендуется Вам:

Добавить комментарий

Ваш e-mail не будет опубликован.