Comando traceroute do Linux
Em sistemas operacionais do tipo Unix, o comando traceroute imprime a rota que os pacotes seguem para um host de rede .
Este documento cobre a versão Linux do traceroute .
Descrição
A Internet é uma agregação grande e complexa de hardware de rede , conectada por gateways . Rastrear a rota que seus pacotes seguem (ou encontrar um gateway que descarte seus pacotes) pode ser difícil. O comando traceroute utiliza o campo “time to live” do protocolo IP e tenta obter uma resposta ICMP TIME_EXCEEDED de cada gateway ao longo do caminho para algum host.
O único parâmetro obrigatório é o nome do host ou o número IP de destino . O comprimento padrão do datagrama do probe é 40 bytes, mas isso pode ser aumentado especificando um tamanho de pacote (em bytes) após o nome do host de destino.
o traceroute tenta rastrear a rota que um pacote IP seguiria para algum host da Internet, iniciando pacotes de análise com um pequeno ttl (tempo de vida) e, em seguida, ouvindo uma resposta de “tempo excedido” do ICMP de um gateway. Ele inicia suas análises com um ttl de um e aumenta isso em um até obter uma “porta inacessível” (ou redefinição de TCP ) do ICMP , o que significa que chegamos ao “host” ou atingimos um máximo (o padrão é 30 saltos)) Três sondas (por padrão) são enviadas em cada configuração ttl e uma linha é impressa mostrando o ttl, o endereço do gateway e o tempo de ida e volta de cada sonda. O endereço pode ser seguido por informações adicionais quando solicitado. Se as respostas da sonda vierem de diferentes gateways, o endereço de cada sistema respondente será impresso. Se não houver resposta dentro de 5,0 segundos (padrão), um ” * ” (asterisco) será impresso para essa sonda.
Após o tempo de viagem, alguns anotação adicional pode ser impresso: ! H , ! N , ou ! P (host, rede ou protocolo inacessível), ! S (de rota de origem não), F! (Fragmentação necessária), X! (Comunicação administrativamente proibido) ,! V (violação de precedência do host) ,! C (corte de precedência em vigor) ou ! < num > (código inacessível do ICMP < num > ). Se quase todas as sondas resultarem em algum tipo de inacessível, o traceroute desiste e sai.
Você não deseja que o host de destino processe os pacotes de análise UDP ; portanto, a porta de destino é configurada com um valor improvável (você pode alterá-lo com o sinalizador -p ). Não existe esse problema para rastreamento de ICMP ou TCP (para TCP usamos a técnica semi-aberta, o que impede que nossas análises sejam vistas pelos aplicativos no host de destino).
No ambiente de rede moderno, os métodos tradicionais de traceroute nem sempre são aplicáveis, devido ao uso generalizado de firewalls . Esses firewalls filtram as portas UDP “improváveis” ou mesmo ecos de ICMP. Para resolver isso, alguns métodos adicionais de rastreamento são implementados (incluindo o tcp); veja LISTA DE MÉTODOS DISPONÍVEIS abaixo. Esses métodos tentam usar um protocolo específico e uma porta de origem / destino, para ignorar os firewalls (para serem vistos pelos firewalls apenas como um início do tipo permitido de uma sessão 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 waittime ] [-z sendwait ] [-UL] [-D] [-P proto ] [--sport = port ] [-M method ] [-O mod_options ] [ --mtu ] [--back] host [ packet_len ]
Opções
–Socorro | Exiba uma mensagem de ajuda e saia. |
-4 , -6 | Forçar explicitamente o rastreamento 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á o IPv4. |
-EU | Use o ICMP ECHO para análises. |
-T | Use TCP SYN para análises. |
-d | Habilite a depuração no nível do soquete (se o kernel suportar). |
-F | Não fragmente pacotes de análise. (Para o IPv4, também define o bit DF, que informa aos roteadores intermediários que não devem se fragmentar remotamente também). Variando o tamanho do pacote de análise 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 2.6.22 apenas. Antes dessa versão, o IPv6 era sempre fragmentado, o IPv4 podia usar apenas o mtu final descoberto (a partir do cache de rota ), que pode ser menor que o mtu real de um dispositivo. |
-f first_ttl | Especifica com qual TTL iniciar. O padrão é 1. |
-g gateway | Diz ao rastreador para adicionar uma opção de roteamento de origem IP ao pacote de saída que informa à 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, a especificação de vários gateways é permitida (como uma lista separada por vírgula). Para IPv6, a forma de num , addr , addr … é permitida, onde num é um tipo de cabeçalho de rota (o padrão é o tipo 2). (Nota: o cabeçalho da rota do tipo 0 agora está obsoleto, de acordo com a rfc 5095). |
interface -i | 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 | Especifica o número máximo de saltos (valor máximo de tempo de vida útil) que o traceroute analisará. O padrão é 30. |
-N squeries | Especifica o número de pacotes de análise enviados simultaneamente. O envio simultâneo de várias sondas pode acelerar consideravelmente o traceroute . O valor padrão é 16 . Observe que alguns roteadores e hosts podem usar a otimização da taxa ICMP. Em tal situação, 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. |
porta -p | Para o rastreamento UDP, especifica o traceroute da porta de destino que será usado (o número da porta de destino será incrementado por cada análise). Para rastreamento de ICMP, especifica o valor inicial da sequência de ICMP (incrementado por cada análise também). Para TCP e outros, especifica apenas a porta de destino (constante) a ser conectada. Ao usar o wrapper tcptraceroute , -p especifica a porta de origem. |
-t tos | Para IPv4, defina o valor do Tipo de serviço (TOS) e Precedência. Os valores úteis são 16 (baixo atraso) e 8 (alto rendimento). Observe que, para usar alguns valores de precedência do TOS, você precisa ser superusuário . Para IPv6, defina o valor do Controle de Tráfego. |
-l flow_label | Use o flow_label especificado para pacotes IPv6. |
-w waittime | Defina o tempo (em segundos) para aguardar uma resposta a uma análise (o padrão é 5.0 ). |
-q nqueries | Define o número de pacotes de análise por salto. O padrão é 3 . |
-r | Ignore as tabelas de roteamento normais e envie diretamente para um host em uma rede conectada. Se o host não estiver em uma rede conectada diretamente, um erro será retornado. Esta opção pode ser usada para executar ping em um host local por meio de uma interface que não possui rota. |
-s 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 | Intervalo de tempo mínimo entre análises (padrão 0). Se o valor for maior que 10, ele especificará um número em milissegundos , caso contrário, será um número de segundos ( valores de ponto flutuante também são permitidos). Útil quando alguns roteadores usam limite de taxa para mensagens ICMP. |
-e | Mostrar extensões ICMP. A forma geral é CLASS / TYPE: seguida por um dump hexadecimal . Os dados MPLS (Multiprotocol Label Switching) são mostrados analisados , em uma forma: MPLS: L = rótulo , E = exp_use , S = stack_bottom , T = TTL (com quaisquer outros objetos separados por uma barra (” / “)). |
-UMA | Execute pesquisas de caminho AS nos registros de roteamento e imprima os resultados diretamente após os endereços correspondentes. |
-V | Imprima as informações da versão e saia. |
As seguintes opções destinam-se a um uso avançado (outros métodos de rastreamento, etc.):
–sport = porta | Escolhe a porta de origem a ser usada. Implica -N 1 . Normalmente, as portas de origem (se aplicável) são escolhidas pelo sistema. |
–fwmark = marca | Defina a marca de firewall para pacotes de saída (desde o kernel do Linux 2.6.25). |
Método -M | Use o método especificado para operações de traceroute. O método udp tradicional padrão é chamado padrão , e icmp ( -I ) e tcp ( -T ) têm os nomes icmp e tcp , respectivamente. Opções específicas do método podem ser passadas por -O . A maioria dos métodos possui atalhos simples ( -I significa -M icmp , etc). |
-O opção | Especifica alguma opção específica do método. Várias opções são separadas por vírgula (ou use várias especificações -O na linha de comando). Cada método pode ter suas próprias opções específicas, ou muitos nem sequer as têm. Para imprimir informações sobre as opções disponíveis, use -O ajuda. |
-VOCÊ | Use o UDP para uma porta de destino específica para rastreamento de rastreamento (em vez de aumentar a porta por cada análise). A porta padrão é 53 (dns). |
-UL | Use UDPLITE para rastreamento (a porta padrão é 53). |
-D | Use Solicitações DCCP para análises. |
Protocolo -P | Use pacote bruto do protocolo especificado para rastreamento. O protocolo padrão é 253 , conforme rfc3692. |
–mtu | Descubra o MTU ao longo do caminho que está sendo rastreado. Implica -F -N 1 . O novo mtu é impresso uma vez na forma de F = NUM na primeira sonda de um salto que exige que o mtu seja alcançado. (Na verdade, a mensagem icmp correspondente “frag needed” normalmente é enviada pelo salto anterior). Observe que alguns roteadores podem armazenar em cache uma vez as informações vistas em uma fragmentação. Assim, você pode receber o mtu final de um salto mais próximo. Tente especificar um número incomum de to -t , isso pode ajudar em uma tentativa (então também pode ser armazenado em cache lá). Veja a opção -F para mais informações. |
–de volta | Imprima o número de saltos para trás quando parecer diferente com a direção para frente. Esse número é calculado na suposição de que os saltos remotos enviam pacotes de resposta com ttl inicial definido como 64 , 128 ou 255 (o que é uma prática comum). É impresso como um valor negativo na forma de ‘ – NUM ‘. |
Lista de métodos disponíveis
Em geral, um método de traceroute específico pode ter que ser escolhido com ” -M name “, mas a maioria dos métodos possui suas opções simples de linha de comando (você pode vê-las após o nome do método, se presente).
padrão | O método tradicional e antigo de rastreamento. Usado por padrão. Pacotes de teste são datagramas de udp com as chamadas portas de destino “improváveis”. A porta “improvável” do primeiro probe é 33434 e, para cada próximo probe, ele é incrementado em um. Como as portas não devem ser utilizadas, o host de destino normalmente retorna “porta icmp unreach” como resposta final. (Ninguém sabe o que acontece quando algum aplicativo escuta tais portas). Este método é permitido para usuários sem privilégios. | ||||||||||||||
icmp , -I | O método mais comumente usado, que usa pacotes icmp echo para análises. Se você puder executar ping no host de destino, o icmp tracerouting também será aplicável. Este método pode ser permitido para usuários sem privilégios desde o kernel 3.0 (somente IPv4), que suporta novos soquetes dgram icmp (ou “ping”). Para permitir esses soquetes, o sysadmin deve fornecer o intervalo sysctl net / ipv4 / ping_group_range para corresponder a qualquer grupo do usuário. Opções:
| ||||||||||||||
tcp , -T | Método moderno conhecido, destinado a contornar firewalls. Usa a porta de destino constante (o padrão é 80, http ). Se alguns filtros estiverem presentes no caminho da rede, provavelmente todas as portas udp “improváveis” (como no método padrão) ou até os ecos do icmp (como no icmp) serão filtrados, e todo o rastreamento de rastreamento será interrompido nesse firewall. Para ignorar um filtro de rede, precisamos usar apenas combinações de protocolo / porta permitidas. Se rastrearmos para alguns, digamos, servidor de e-mail, é mais provável que -T -p 25 possa alcançá-lo, mesmo quando -I não puder. Esse método usa a conhecida “técnica semi-aberta”, que impede que os aplicativos no host de destino vejam nossos testes. Normalmente, um tcp syné enviado. Para portas não ouvidas, recebemos tcp reset, e tudo está feito. Para portas de escuta ativa, recebemos tcp syn + ack, mas respondemos por tcp reset (em vez do esperado tcp ack), dessa forma a sessão tcp remota é interrompida, mesmo sem o aplicativo perceber. O método tcp pode ser um dos seguintes:
O método tcp padrão é syn, sysctl . | ||||||||||||||
tcpconn | Uma implementação do método tcp usando uma chamada connect () simples , que executa a abertura completa da sessão tcp. Não recomendado para uso normal, porque um aplicativo de destino é sempre afetado (e pode ser confuso). | ||||||||||||||
udp , -U | Use datagrama udp com porta de destino constante (padrão 53, dns ). Pretendia ignorar o firewall também. Observe que, diferentemente do método tcp , o aplicativo correspondente no host de destino sempre recebe suas análises (com dados aleatórios) e a maioria pode ser facilmente confundida por elas. Na maioria dos casos, ele não responde aos seus pacotes; portanto, você nunca verá o salto final no rastreamento. (Os servidores DNS geralmente respondem com algo irritado). Este método é permitido para usuários sem privilégios. | ||||||||||||||
udplite , -UL | Use datagrama udplite para análises (com porta de destino constante, padrão 53). Este método é permitido para usuários sem privilégios. Opções:
| ||||||||||||||
dccp , -D | Use pacotes de solicitação DCCP para análises (rfc4340). Este método usa a mesma “técnica semi-aberta” usada para o TCP. A porta de destino padrão é 33434. Opções:
| ||||||||||||||
crua , -P proto | Envie pacote bruto de protocolo proto . Nenhum cabeçalho específico do protocolo é usado, apenas o cabeçalho IP. Implica -N 1 . Opções:
|
Notas
Para acelerar o trabalho, normalmente várias sondas são enviadas simultaneamente. A desvantagem é que 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 análises simultâneas ou defina-o como 1 (como na implementação inicial do traceroute ), ou seja, -N 1
O host final (alvo) pode eliminar algumas das análises simultâneas e pode até responder apenas as mais recentes. Isso pode levar a lúpulos extras “parecidos com expirados” perto do salto final. O traceroute usa um algoritmo inteligente para detectar automaticamente essa situação, mas se não puder ajudar no seu caso, basta usar -N 1 .
Para uma estabilidade ainda maior, você pode retardar o trabalho do programa com a opção -z . Por exemplo, use -z 0,5 para uma pausa de meio segundo entre as análises.
Se alguns saltos não reportarem nada para todos os métodos, a última chance de obter algo é usar o comando ping com a opção -R (IPv4 e apenas para os 8 saltos mais próximos).
Exemplos
traceroute computerhope.com
Rastreie a rota que os pacotes seguem entre o sistema e o host denominado computerhope.com , usando o método padrão (datagrama udp, 16 análises simultâneas). Os resultados serão semelhantes à seguinte saída:
traceroute para computerhope.com (166.70.10.23), 30 saltos no máximo, pacotes de 60 bytes 1 176.221.87.1 (176.221.87.1) 1.474 ms 1.444 ms 1.390 ms 2 f126.broadband2.quicknet.se (92.43.37.126) 10.047 ms 19.868 ms 23.156 ms 3 10.5.12.1 (10.5.12.1) 24.098 ms 24.340 ms 25.311 ms 4 212.247.178.9 (212.247.178.9) 25.777 ms 27.184 ms 27.625 ms 5 vst-ncore-1.bundle-ether1.tele2.net (130.244.39.46) 30.632 ms 31.610 ms 32.194 ms 6 kst5-core-1.bundle-ether6.tele2.net (130.244.71.178) 33.608 ms 15.274 ms 16.449 ms 7 kst5-peer-1.ae0-unit0.tele2.net (130.244.205.125) 252.53 ms 11.169 ms 12.158 ms 8 avk6-peer-1.ae0-unit0.tele2.net (130.244.64.71) 19.661 ms 25.765 ms 26.730 ms 9 peer-as3257.avk6.tele2.net (130.244.200.106) 25.390 ms 24.863 ms xe-5-0-0.nyc30.ip4.tinet.net (89.149.181.109) 23.626 ms 10 fortress-gw.ip4.tinet.net (216.221.158.90) 29.943 ms 31.112 ms 29.002 ms 11 208.116.63.254 (208.116.63.254) 32.102 ms 29.862 ms 29.337 ms
Comandos relacionados
netstat – Imprime informações sobre conexões de rede, tabelas de roteamento, estatísticas de interface, conexões mascaradas e associações multicast.
ping – Enviepacotes ICMP ECHO_REQUEST aos hosts da rede.