Как идентифицировать пакеты traceroute?

Я работаю на C и использую библиотеку pcap для анализа файла шапки, в котором есть пакеты, которые были отправлены/получены во время выполнения traceroute. Проблема, с которой я сталкиваюсь, заключается в идентификации пакетов, которые были отправлены/получены от traceroute, поскольку файл кепки включает и другие пакеты.

Существуют ли какие-либо конкретные критерии, по которым я мог бы проверить, пытаясь определить, отправлен ли какой-либо данный пакет из traceroute? Или это невозможно?

Был бы признателен за любую помощь / совет, который вы могли бы предложить.


person The Legendary Programmer    schedule 07.03.2016    source источник


Ответы (2)


$ man traceroute

TRACEROUTE(8)             BSD System Manager's Manual            TRACEROUTE(8)

NAME
     traceroute -- print the route packets take to network host

    ...


     -I      Use ICMP ECHO instead of UDP datagrams.  (A synonym for "-P
             icmp"). 

    ...


     This program attempts to trace the route an IP packet would follow to   
     some internet host by launching UDP probe packets with a small ttl (time
     to live) then listening for an ICMP "time exceeded" reply from a gateway.
     We start our probes with a ttl of one and increase by one until we get an
     ICMP "port unreachable" (which means we got to "host") or hit a max 
     (which defaults to net.inet.ip.ttl hops & can be changed with the -m
     flag).  Three probes (changed with -q flag) are sent at each ttl setting
     and a line is printed showing the ttl, address of the gateway and round
     trip time of each probe.  If the probe answers come from different gate-
     ways, the address of each responding system will be printed.  If there is
     no response within a 5 sec. timeout interval (changed with the -w flag),
     a "*" is printed for that probe.

     We don't want the destination host to process the UDP probe packets so
     the destination port is set to an unlikely value (if some clod on the  
     destination is using that value, it can be changed with the -p flag).

Таким образом, по умолчанию пакеты traceroute представляют собой пакеты UDP, отправляемые на какой-то случайный порт; из-за этого их трудно отличить от другого трафика.

Если кто-то использует опцию -I, он будет использовать пакеты ICMP ECHO, которые легче отличить от другого трафика, хотя и не легче отличить, например, от трафика от команды "ping".

Вы можете попробовать найти пакеты с маленьким значением TTL.

person Community    schedule 07.03.2016
comment
Я думаю, что окончательный вывод заключается в том, что нет реального способа проверить, принадлежат ли эти пакеты к traceroute. - person The Legendary Programmer; 08.03.2016

Программа traceroute работает, отправляя пакеты UDP/ICMP с увеличивающимся полем IP TTL. Эти поля IP TTL обычно очень малы по сравнению с тем, что отправляет обычное приложение (в моем случае это 64).

Итак, если вы захватите фильтр с

ip.ttl ‹ 20

Вы можете получить эти пакеты (вы можете настроить количество в фильтре выше), помните, если вы находитесь рядом с хостом, на котором запущена программа traceroute, вы даже можете поймать его по "ip.ttl ‹ 5".

person packetie    schedule 17.03.2016