Manuais para a linha de comandos

Man » Manual online do traceroute - documentação online detalhada para a página de manual do traceroute

🌍
traceroute - exibe o trajeto dos pacotes até o host de rede.

SINTAXE

traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...]
[-i device] [-m max_ttl] [-p port] [-s src_addr]
[-q nqueries] [-N squeries] [-t tos]
[-l flow_label] [-w waittimes] [-z sendwait] [-UL] [-D]
[-P proto] [--sport=port] [-M method] [-O mod_options]
[--mtu] [--back]
host [tamanho_do_pacote]
traceroute6  [opções]
tcptraceroute  [opções]
lft  [opções]

DESCRIÇÃO

traceroute rastreia o trajeto dos pacotes de uma rede IP enquanto eles viajam até um determinado host.
Ele utiliza o campo TTL (Time To Live) do protocolo IP e tenta obter uma resposta ICMP TIME_EXCEEDED de cada gateway ao longo do caminho para o host.

traceroute6 é equivalente a traceroute -6

tcptraceroute é equivalente a traceroute -T

lft, o Layer Four Traceroute, executa um traceroute TCP, como traceroute -T, mas tenta fornecer
compatibilidade com a implementação original, também chamada de "lft".

O único parâmetro obrigatório é o nome ou endereço IP do host de destino. O tamanho do pacote opcional é o tamanho total do pacote de sondagem (padrão de 60 bytes para IPv4 e 80 para IPv6). O tamanho especificado pode ser ignorado em algumas situações ou aumentado até um valor mínimo.

Este programa tenta rastrear o trajeto que um pacote IP seguiria até um host de internet, lançando pacotes de sondagem com um pequeno TTL (tempo de vida) e, em seguida, aguardando uma resposta ICMP "tempo excedido" de um gateway. Começamos nossas sondagens com um TTL de um e aumentamos em um até atingirmos um ICMP "porta inatingível" (ou reset TCP), o que significa que chegamos ao "host" ou atingimos um máximo (que por padrão é de 30 saltos). Três sondagens (por padrão) são enviadas em cada configuração de TTL e uma linha é impressa mostrando o TTL, o endereço do gateway e o tempo de resposta de cada sondagem. O endereço pode ser seguido por informações adicionais, quando solicitado. Se as respostas da sondagem vierem de gateways diferentes, o endereço de cada sistema que responde será impresso. Se não houver resposta dentro de um determinado tempo limite, um "*" (asterisco) será impresso para essa sondagem.

Após o tempo de resposta, algumas anotações adicionais podem ser impressas: !H, !N ou !P (host, rede ou protocolo inatingíveis), !S (roteamento de origem falhou), !F (fragmentação necessária), !X (comunicação administrativamente proibida), !V (violação da precedência do host), !C (corte de precedência em efeito) ou ! (código ICMP inatingível ). Se quase todas as sondagens resultarem em algum tipo de inatibilidade, o traceroute desistirá e sairá.

Não queremos que o host de destino processe os pacotes de sondagem UDP, então a porta de destino é definida para um valor improvável (você pode alterá-la com a flag -p). Não há esse problema para ICMP ou traceroute TCP (para TCP, usamos a técnica de conexão "meia aberta", que impede que nossas sondagens sejam vistas por aplicativos no host de destino).

No ambiente de rede moderno, os métodos tradicionais de traceroute nem sempre podem ser aplicados, devido ao uso generalizado de firewalls. Esses firewalls filtram as portas UDP "improváveis" ou até mesmo os ecos ICMP. Para resolver isso, alguns métodos adicionais de traceroute são implementados (incluindo TCP), veja a LISTA DE MÉTODOS DISPONÍVEIS abaixo. Esses métodos tentam usar um protocolo e porta de origem/destino específicos, a fim de contornar os firewalls (para que sejam vistos pelos firewalls apenas como o início de um tipo de sessão de rede permitido).

OPÇÕES

--help  Imprime informações de ajuda e sai.

-4, -6  Força explicitamente o traceroute IPv4 ou IPv6. Por padrão, o programa tentará resolver o nome fornecido e escolher o protocolo apropriado automaticamente. Se a resolução de um nome de host retornar endereços IPv4 e IPv6, o traceroute usará IPv4.

-I, --icmp
Usa ICMP ECHO para sondagens

-T, --tcp
Usa TCP SYN para sondagens

-d, --debug
Habilita a depuração no nível do socket (quando o kernel Linux o suporta)

-F, --dont-fragment
Não fragmenta os pacotes de sondagem. (Para IPv4, também define o bit DF, que diz aos roteadores intermediários para não fragmentar remotamente também).

Variando o tamanho do pacote de sondagem pelo parâmetro da linha de comando packet_len, você pode obter manualmente informações sobre o MTU de saltos de rede individuais. A opção --mtu (veja abaixo) tenta fazer isso automaticamente.

Observe que os recursos não fragmentados (como -F ou --mtu) funcionam corretamente desde o kernel Linux 6.22. Antes dessa versão, o IPv6 sempre era fragmentado, o IPv4 só podia usar o MTU final descoberto (do cache de rotas), que pode ser menor que o MTU real de um dispositivo.

-f first_ttl, --first=first_ttl
Especifica com qual TTL começar. O padrão é 1.

-g gateway, --gateway=gateway
Diz ao traceroute para adicionar uma opção de roteamento de origem IP ao pacote de saída que diz à rede para rotear o pacote através do gateway especificado (a maioria dos roteadores desativou o roteamento de origem por motivos de segurança). Em geral, vários gateways são permitidos (separados por vírgula). Para IPv6, o formato num,addr,addr... é permitido, onde num é um tipo de cabeçalho de rota (o padrão é o tipo 2). Observe que o tipo 0 do cabeçalho de rota agora está desativado (rfc5095).

-i interface, --interface=interface
Especifica a interface através da qual o traceroute deve enviar pacotes. Por padrão, a interface é selecionada de acordo com a tabela de roteamento.

-m max_ttl, --max-hops=max_ttl
Especifica o número máximo de saltos (valor máximo de tempo de vida) que o traceroute irá sondar. O padrão é 30.

-N squeries, --sim-queries=squeries
Especifica o número de pacotes de sonda enviados simultaneamente. O envio de vários pacotes de sonda
concorrentemente pode acelerar consideravelmente o traceroute. O valor padrão é 16.
Observe que alguns roteadores e hosts podem usar o controle de taxa ICMP. Nesses casos, especificar um número muito grande pode levar à perda de algumas respostas.

-n     Não tente mapear endereços IP para nomes de host ao exibi-los.

-p port, --port=port
Para rastreamento UDP, especifica a porta de destino base que o traceroute usará (o número da porta de destino será incrementado para cada sonda).
Para rastreamento ICMP, especifica o valor inicial da sequência ICMP (também incrementado para cada sonda).
Para TCP e outros, especifica apenas a porta de destino (constante) para conectar. Ao usar o wrapper tcptraceroute, -p especifica a porta de origem.

-t tos, --tos=tos
Para IPv4, define o valor de Tipo de Serviço (TOS) e Precedência. Valores úteis são 16 (baixa latência) e 8 (alto rendimento). Observe que, para usar alguns valores de precedência de TOS, você deve ser um superusuário.
Para IPv6, define o valor de Controle de Tráfego.

-l flow_label, --flowlabel=flow_label
Use o flow_label especificado para pacotes IPv6.

-w max[,here,near], --wait=max[,here,near]
Determina por quanto tempo esperar por uma resposta a uma sonda.

Existem três valores de ponto flutuante (em geral) separados por uma vírgula (ou uma barra). Max especifica o tempo máximo (em segundos, padrão 5,0) para esperar, em qualquer caso.

A implementação tradicional do traceroute sempre esperava o tempo máximo completo para qualquer sonda. Mas, se já tivermos algumas respostas do mesmo salto, ou mesmo de algum salto seguinte, podemos usar o tempo de ida e volta de tal resposta como uma dica para determinar a quantidade real de tempo a ser esperada.

O opcional here (padrão 3,0) especifica um fator para multiplicar o tempo de ida e volta de uma resposta já recebida do mesmo salto. O valor resultante é usado como o tempo limite para a sonda, em vez de (mas não mais que) max. O opcional near (padrão 10,0) especifica um fator semelhante para uma resposta de algum salto seguinte. (O tempo do primeiro resultado encontrado é usado em ambos os casos).

Primeiro, procuramos o mesmo salto (da sonda que será impressa primeiro a partir de agora). Se nada for encontrado, procuramos algum salto seguinte. Se nada for encontrado, use max. Se here e/ou near tiverem valores zero, o cálculo correspondente é ignorado.
Here e near são sempre definidos como zero se apenas max for especificado (para compatibilidade com versões anteriores).

-q nqueries, --queries=nqueries
Define o número de pacotes de sonda por salto. O valor padrão é 3.

-r     Ignora as tabelas de roteamento normais e envia diretamente para um host em uma rede conectada. Se o host não estiver em uma rede conectada, um erro é retornado. Esta opção pode ser usada para enviar um ping para um host local por meio de uma interface que não tem rota.

-s source_addr, --source=source_addr
Escolhe um endereço de origem alternativo. Observe que você deve selecionar o endereço de uma das interfaces. Por padrão, o endereço da interface de saída é usado.

-z sendwait, --sendwait=sendwait

Intervalo mínimo entre as sondas (padrão 0). Se o valor for maior que 10, ele especifica um número em milissegundos; caso contrário, é um número de segundos (valores de ponto flutuante também são permitidos). Útil quando alguns roteadores usam limitação de taxa para mensagens ICMP.

-e, --extensions

Mostra as extensões ICMP (rfc4884). O formato geral é CLASS/TYPE:, seguido por um despejo hexadecimal. O MPLS (rfc4950) é mostrado analisado, em um formato: MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL (mais objetos separados por /). A Informação da Interface (rfc5837) também é mostrada analisada, no seguinte formato: {INC|SUB|OUT|NXT}:index,IP_addr,"name",mtu=MTU (todos os quatro campos podem estar ausentes).

-A, --as-path-lookups

Realiza pesquisas de caminho AS nos registros de roteamento e imprime os resultados imediatamente após os endereços correspondentes.

-V, --version

Imprime a versão e sai.

Existem opções adicionais destinadas a uso avançado (como métodos de rastreamento alternativos, etc.):

--sport=port

Escolhe a porta de origem a ser usada. Implica -N 1 -w 5. Normalmente, as portas de origem (se aplicável) são escolhidas pelo sistema.

--fwmark=mark

Define a marca de firewall para pacotes de saída (desde o kernel Linux 2.6.25).

-M method, --module=name

Usa o método especificado para operações de traceroute. O método UDP tradicional tem como padrão o nome default, o ICMP (-I) e o TCP (-T) têm os nomes icmp e tcp, respectivamente. As opções específicas do método podem ser passadas por -O. A maioria dos métodos tem seus atalhos simples (-I significa -M icmp, etc.).

-O option, --options=options

Especifica algumas opções específicas do método. Várias opções são separadas por vírgula (ou use várias opções -O na linha de comando). Cada método pode ter suas próprias opções específicas, ou pode não ter nenhuma. Para imprimir informações sobre as opções disponíveis, use -O help.

-U, --udp

Usa UDP para uma porta de destino específica para tracerouting (em vez de incrementar a porta para cada sonda). A porta padrão é 53 (dns).

-UL    Usa UDPLITE para tracerouting (a porta padrão é 53).

-D, --dccp

Usa solicitações DCCP para sondas.

-P protocol, --protocol=protocol

Usa um pacote bruto do protocolo especificado para tracerouting. O protocolo padrão é 253 (rfc3692).

--mtu  Descobre a MTU ao longo do caminho que está sendo rastreado. Implica -F -N 1. A nova MTU é impressa uma vez no formato F=NUM na primeira sonda de um salto que requer que essa MTU seja alcançada. (Na verdade, a mensagem ICMP de "fragmentação necessária" correspondente é normalmente enviada pelo salto anterior).

Observe que alguns roteadores podem armazenar em cache as informações vistas sobre uma fragmentação. Assim, você pode receber a MTU final de um salto mais próximo. Tente especificar um tos incomum com -t, isso pode ajudar em uma tentativa (então, pode ser armazenado em cache lá também).
Veja a opção -F para mais informações.

--back Imprime o número de saltos de retorno quando parece diferente da direção de avanço.
Esse número é estimado com a suposição de que os saltos remotos enviam pacotes de resposta com o ttl inicial definido como 64, 128 ou 255 (o que parece ser uma prática comum). É impresso como um valor negativo no formato '-NUM'.

LISTA DE MÉTODOS DISPONÍVEIS

Em geral, um método específico de traceroute pode ter que ser escolhido por -M nome, mas a maioria dos métodos tem seus próprios interruptores de linha de comando (você pode vê-los após o nome do método, se presentes).

default

O método tradicional e antigo de traceroute. Usado por padrão.

Os pacotes de sonda são datagramas UDP com as chamadas "portas de destino improváveis". A "porta improvável" do primeiro pacote de sonda é 33434, e então, para cada pacote de sonda subsequente, ela é incrementada em um. Como se espera que essas portas não sejam usadas, o host de destino normalmente retorna "icmp unreach port" como a resposta final. (Ninguém sabe o que acontece quando algum aplicativo escuta nessas portas, embora).

Este método é permitido para usuários não privilegiados.

icmp       -I

O método mais comum atualmente, que usa pacotes ICMP echo para sondas. Se você pode pingar(8) o host de destino, o traceroute ICMP também é aplicável.

Este método pode ser permitido para usuários não privilegiados desde o kernel 3.0 (IPv4, para IPv6 desde a versão 11, que suporta novos sockets ICMP dgram (ou "ping"). Para permitir esses sockets, o administrador do sistema deve fornecer o intervalo sysctl net/ipv4/ping_group_range para corresponder a qualquer grupo do usuário. Opções:

raw    Use apenas sockets raw (o método tradicional).

Este método é tentado primeiro por padrão (por razões de compatibilidade) e, em seguida, os novos sockets ICMP dgram como fallback.

dgram  Use apenas sockets ICMP dgram.

tcp        -T

Método moderno bem conhecido, destinado a contornar firewalls. Usa a porta de destino constante (o padrão é 80, http).

Se houver alguns filtros presentes no caminho da rede, então é muito provável que quaisquer portas UDP "improváveis" (como para o método padrão) ou até mesmo ecos ICMP (como para ICMP) sejam filtrados, e todo o traceroute simplesmente parará em um firewall. Para contornar um filtro de rede, temos que usar apenas combinações de protocolo/porta permitidas. Se estivermos rastreando, por exemplo, um servidor de email, então é mais provável que -T -p 25 possa alcançá-lo, mesmo quando -I não puder.

Este método usa a conhecida "técnica de meio-abertura", que impede que os aplicativos no host de destino vejam nossas sondas. Normalmente, um SYN TCP é enviado. Para portas não ouvidas, recebemos um RESET TCP, e está tudo pronto. Para portas ativas, recebemos um SYN+ACK TCP, mas respondemos com um RESET TCP (em vez do ACK TCP esperado), desta forma, a sessão TCP remota é descartada, mesmo sem que o aplicativo perceba.

Existem algumas opções para o método TCP:

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

Define as flags TCP especificadas para o pacote de sonda, em qualquer combinação.

flags=num

Define o campo flags no cabeçalho TCP exatamente para num.

ecn    Envia um pacote SYN com as flags TCP ECE e CWR (para Notificação Explícita de Congestionamento, rfc3168).

sack,timestamps,window_scaling

Use a opção de cabeçalho TCP correspondente no pacote de sonda de saída.


sysctl Use a configuração atual de sysctl (/proc/sys/net/*) para as opções de cabeçalho TCP acima e ecn.

Sempre definido por padrão, se nada mais for especificado.

fastopen

Use a opção TCP fastopen (durante o SYN) para negociação inicial de cookie.

mss=[num]

Use o valor de num (ou inalterado) para a opção de cabeçalho maxseg tcp (durante o SYN) e descubra seu ajuste ao longo do caminho que está sendo rastreado. O novo valor de mss alterado é impresso uma vez no formato M=NUM no primeiro probe em que foi detectado. Observe que alguns roteadores podem retornar um fragmento original muito curto na mensagem de tempo excedido, tornando a verificação impossível. Além disso, as respostas podem chegar em uma ordem diferente. Tudo isso pode levar a um local posterior do relatório (usar -N 1 pode ajudar na ordem).

info Imprime os sinalizadores TCP e as opções suportadas das respostas TCP finais quando o host de destino é
atingido. Permite determinar se um aplicativo está escutando a porta e outras informações úteis.
As opções TCP suportadas são todas aquelas que podem ser definidas por -T -O, ou seja, mss, sack, timestamps, window_scaling e fastopen, com o formato de saída semelhante (um valor para mss e
apenas presença para outros).

As opções padrão são syn, sysctl.

tcpconn

Uma implementação inicial do método TCP, usando uma simples chamada connect(2), que abre uma sessão TCP completa. Não recomendado para uso normal, pois um aplicativo de destino é sempre afetado (e pode ser confundido).

udp -U

Use datagramas UDP com porta de destino constante (padrão 53, DNS). Destinado a contornar o firewall.

Observe que, ao contrário do método TCP, o aplicativo correspondente no host de destino sempre recebe nossos probes (com dados aleatórios) e a maioria pode ser facilmente confundida por eles. Na maioria dos casos, ele não responderá aos nossos pacotes, então nunca veremos o salto final no rastreamento. (Felizmente, parece que pelo menos os servidores DNS respondem com algo irritado).

Este método é permitido para usuários não privilegiados.

udplite -UL

Use datagramas udplite para probes (com porta de destino constante, padrão 53).

Este método é permitido para usuários não privilegiados. Opções:

coverage=num

Defina a cobertura de envio udplite para num.

dccp -D

Use pacotes de solicitação DCCP para probes (rfc4340).

Este método usa a mesma "técnica de meio aberta" usada para TCP. A porta de destino padrão é 3343.

Opções:

service=num

Defina o código de serviço DCCP para num (o padrão é 1885957735).

raw -P proto

Envie um pacote bruto do protocolo proto. Nenhum cabeçalho específico do protocolo é usado, apenas o cabeçalho IP. Implica -N 1 -w 5. Opções:

protocol=proto

Use o protocolo IP proto (o padrão é 253).

NOTAS

Para acelerar o trabalho, normalmente vários probes são enviados simultaneamente. Por outro lado, isso cria uma "tempestade de pacotes", especialmente na direção da resposta. Os roteadores podem limitar a taxa de respostas ICMP e algumas respostas podem ser perdidas. Para evitar isso, diminua o número de probes simultâneos, ou até mesmo defina-o como 1 (como na implementação inicial do traceroute), ou seja, -N 1.

O host de destino pode descartar algumas das sondas simultâneas e até mesmo responder apenas às últimas. Isso pode levar a ocorrências adicionais de "parece ter expirado" perto do último salto. Usamos um algoritmo inteligente para detectar automaticamente essa situação, mas se ele não puder ajudar no seu caso, basta usar -N 1.

Para uma estabilidade ainda maior, você pode diminuir a velocidade de execução do programa com a opção -z, por exemplo, use -z 5 para uma pausa de meio segundo entre as sondas.

Para evitar uma espera extra, usamos um algoritmo adaptativo para os tempos limite (veja a opção -w para mais informações). Isso pode levar a uma expiração prematura (especialmente quando os tempos de resposta variam) e à impressão de "*" em vez do tempo. Nesse caso, desative este algoritmo, especificando -w com o tempo limite desejado (por exemplo, -w 5).

Se alguns saltos não relatarem nada para nenhum método, a última chance de obter algo é usar o comando ping -R (IPv4 e apenas para os 8 saltos mais próximos).

VEJA TAMBÉM

ping(8), ping6(8), tcpdump(8), netstat(8)