Por que posso executar ping em um endereço IP, mas não 'traceroute'?

46

Posso executar ping em um endereço IP, mas não o posso rastrear. Como isso poderia ser?

[USERNAME@HOSTNAME ~]$ ping CENSORED.CENSORED
PING CENSORED.CENSORED (CENSORED) 56(84) bytes of data.
64 bytes from CENSORED.CENSORED (CENSORED): icmp_req=1 ttl=49 time=52.8 ms
64 bytes from CENSORED.CENSORED (CENSORED): icmp_req=2 ttl=49 time=49.4 ms
64 bytes from CENSORED.CENSORED (CENSORED): icmp_req=3 ttl=49 time=49.2 ms
64 bytes from CENSORED.CENSORED (CENSORED): icmp_req=4 ttl=49 time=50.4 ms
^C
--- CENSORED.CENSORED ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 49.276/50.494/52.804/1.401 ms
[USERNAME@HOSTNAME ~]$
[USERNAME@HOSTNAME ~]$ traceroute CENSORED.CENSORED
traceroute to CENSORED.CENSORED (CENSORED), 30 hops max, 60 byte packets
 1  CENSORED (CENSORED)  5.733 ms  6.000 ms  5.977 ms
 2  CENSORED (CENSORED)  0.428 ms  0.417 ms  0.393 ms
 3  CENSORED (CENSORED)  1.726 ms  1.718 ms  1.682 ms
 4  CENSORED (CENSORED)  26.699 ms  26.693 ms  26.670 ms
 5  CENSORED (CENSORED)  27.785 ms  27.769 ms  27.746 ms
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
[USERNAME@HOSTNAME ~]$

O quinto CENSOREDendereço IP no traceroute não é o mesmo que no "ping CENSORED.CENSORED".

LanceBaynes
fonte
Qual é a saída do traceroute?
31411 ChrisF
1
por que o IP é "censurado"?
Sathyajith Bhat
1
por que o IP é "censurado" ... talvez porque não seja público? pff
LanceBaynes
8
Presumo que o pôster tenha redigido o IP para que não tentemos invadir sua máquina.
msw
estas estrelas não significam censurado, eles significam não houve resposta
JBU

Respostas:

42

Tente usar um método diferente no seu traceroute, por exemplo, TCP SYN ou ICMP, em vez do método UDP padrão.

Por exemplo, observe a diferença entre ICMP e TCP:

x@x:~$ ping -qc4 94.254.2.51
PING 94.254.2.51 (94.254.2.51) 56(84) bytes of data.
--- 94.254.3.90 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3009ms
rtt min/avg/max/mdev = 7.781/7.807/7.836/0.067 ms

x@x:~$ sudo traceroute -I 94.254.2.51
traceroute to 94.254.2.51 (94.254.2.51), 30 hops max, 40 byte packets
1  <REDACTED>
2  <REDACTED>
3  <REDACTED>
4  <REDACTED>
5  netnod-ix-ge-a-sth-1500.bahnhof.net (194.68.123.85)  1.307 ms  1.299 ms  1.432 ms
6  sto-cr1.sto-cr3.bahnhof.net (85.24.151.165)  7.166 ms  7.364 ms  7.336 ms
7  sto-cr3.gav-cr1.bahnhof.net (85.24.151.195)  7.251 ms  7.099 ms  7.220 ms
8  zitius-a322-gw-c.bahnhof.net (85.24.153.249)  7.059 ms  7.074 ms  7.145 ms
9  h-2-51.A322.priv.bahnhof.se (94.254.2.51)  7.619 ms  7.750 ms  8.070 ms

x@x:~$ sudo traceroute -T 94.254.2.51
traceroute to 94.254.2.51 (94.254.2.51), 30 hops max, 40 byte packets
1  <REDACTED>
2  <REDACTED>
3  <REDACTED>
4  <REDACTED>
5  netnod-ix-ge-a-sth-1500.bahnhof.net (194.68.123.85)  1.621 ms  1.683 ms  1.817 ms
6  sto-cr1.sto-cr3.bahnhof.net (85.24.151.165)  8.530 ms  7.861 ms  7.820 ms
7  sto-cr3.gav-cr1.bahnhof.net (85.24.151.195)  7.724 ms  7.539 ms  7.486 ms
8  zitius-a322-gw-c.bahnhof.net (85.24.153.249)  7.572 ms  7.537 ms  7.553 ms
9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
Tzarium
fonte
2
-T não parece ser uma opção para o OSX. Existe uma alternativa para usar o TCP SYN no OSX?
Manachi 9/17
2
@Manachi:brew install tcptraceroute
iolsmit
1
@Manchi: leia a página de manual ...: "traceroute -P TCP <IP>"
benba
23

O traceroute é baseado em pacotes ICMP ou UDP. Ele efetivamente coloca cada roteador no caminho entre você e censored.censored. Aumenta o tempo de vida (TTL) de cada pacote subsequente enviado (de 1 a 30 normalmente), esperando que, à medida que cada pacote seja enviado com um TTL aumentado do último, o próximo roteador no caminho retornará um código de erro .

Se o salto 6 não estiver respondendo, provavelmente está bloqueando especificamente as mensagens ICMP / UDP. Portanto, o ping funciona porque os roteadores entre você e ele estão apenas passando os pacotes ICMP / UDP para ele, em vez de responder a eles, como fazem com um traceroute.

Rhys Gibson
fonte
2
Na maioria das distribuições (todas?) * Nix, o traceroute usa o UDP por padrão, não o ICMP.
H0tw1r3
Bom ponto, vai alterar.
Rhys Gibson
então todos os roteadores após 5 bloco UDP? isso está correto?
LanceBaynes
Acho que não. Outra pessoa pode ter uma explicação melhor, mas acho que o salto 6 não está respondendo e não está transmitindo os pacotes; caso contrário, você teria pelo menos uma última resposta do seu destino (a menos que esteja a mais de 30 saltos).
Rhys Gibson
1
Mas tenho certeza de que está a menos de 30 saltos de distância. Então a resposta não é boa. No salto 7,8,9, etc. Eu teria respostas no traceroute: \
LanceBaynes 8/11/11
12

Não vi resposta para a parte do porquê das perguntas.

Sabe-se que vários ISPs fazem com que seus roteadores furtivamente sejam rastreados de duas maneiras: eles não diminuem o TTL nos pacotes IP (tornando-se buracos de IP) ou não respondem ao TTL expirado enquanto ainda encaminham o ICMP.

O motivo é manter sua topologia de rede interna privada. Isso é tudo.

A emissão de traceroutes de / para várias fontes / destinos revela informações sobre a topologia de rede, algo que nem todo mundo aprecia.

usr-local-ΕΨΗΕΛΩΝ
fonte
2

O traceroute depende de mensagens ICMP, às quais alguns roteadores podem estar configurados para não responder.

LawrenceC
fonte
O ping também é ICMP, não explica a diferença. Tenho as vantagens de ler outras respostas que o traceroute de estado também pode usar o udp, o que eu não conhecia antes.
Rich Homolka
Bem, uma maneira de bloquear explicitamente pacotes ICMP traceroute é descartar ICMPs de entrada TTL = 1. Talvez eles estejam fazendo isso por algum motivo.
LawrenceC
2

Às vezes, vale a pena usar pingpara obter informações do tipo traceroute:

#!/bin/bash
for TTL in 1 2 3 4 5 6 7 8 9 10 11 12
do
    ping -c 1 -n -t $TTL a.b.c.d
done

Ao chamar ping com um argumento -t $ TTL, às vezes você pode iludir o firewall e descobrir endereços IP e assim por diante de roteadores atrás de firewalls.

Bruce Ediger
fonte
3
É o mesmo que chamar o traceroute com o sinalizador -I, embora (por incrível que pareça) isso exija o status de superusuário.
Tzarium
1
O @Tzarium ping também requer status de superusuário, ele apenas possui o suid bit definido, para que você o obtenha gratuitamente.
precisa saber é o seguinte
0

Todos os acenados de 6 em diante não respondem aos pacotes UDP ou o próprio nó 6 bloqueia pacotes udp. Você pode tentar os métodos de fluxo, que espero que funcionem com base em qual nó no caminho para a detinação bloqueia o ICMP / TCP SYN:

  1. Use o ICMP para rastrear: $ sudo traceroute -I

  2. Use o TCP syn para rastrear: $ sudo traceroute -T

  3. Se for o lúpulo que está excedendo, use um dos seguintes: $ sudo traceroute -I -m 60

OU

$ sudo traceroute -T -m 60

O último funcionou para mim enquanto traçava um ftp em todo o continente.

Naresh
fonte
0

Para usar o comando ping para rastrear no ambiente unix, tente o seguinte:

for ((TTL=1;TTL<30;TTL++));
do
ping -c 1 -t $TTL <IP>;
done
Naresh
fonte