Com o comando ping podemos identificar o sistema operacional utilizado.
O ping trabalha com o protocolo ICMP enviando mensagens, quando uma máquina de destino recebe um echo request, ela retorna um echo reply.
Para descobrir qual sistema operacional está sendo utilizado vamos usar o TTL (Time to Live), ele vai dizer quanto tempo o pacote vai ficar circulando antes de ser descartado.
Cada sistema operacional trabalha com um TTL padrão, por isso podemos identificar o sistema através dele.
Exemplo 1:
ping 127.0.0.1
PING 127.0.0.1 bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.028 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.030 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.029 ms
Exemplo 2:
ping 127.0.0.1
PING 127.0.0.1 bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=128 time=0.176 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=128 time=0.183 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=128 time=0.189 ms
Segue o TTL padrão de alguns sistemas operacionais:
Com estes números já podemos determinar o sistema operacional dos exemplos acima. No caso do exemplo 1, o ttl=64 nos diz que o sistema utilizado é Linux e no exemplo 2 podemos dizer que o sistema usado é Windows.
Os roteadores estão programados para decrementar o TTL a cada pacote que passa por ele, ou seja, se uma máquina Windows for "pingada" e o valor TTL for 126, significa que antes de chegar ao destino existem 2 roteadores.
[1] Comentário enviado por smmusashi em 05/05/2010 - 08:31h
Bom dia Denis, só complementando sua informação, não podemos confiar muito no valor do TTL pois é possível alterá-lo, nos meus servidores linux por exemplo eu deixo o ttl padrão como 128, isso é feito facilmente alterando o /proc.
Nos servidores windows ou maquinas windows é possível alterar o valor do TTL através do regedit. Com Unix não tenho experiência, mas creio que também seja possível realizar esta tarefa.
[4] Comentário enviado por cenoura em 05/05/2010 - 09:33h
Não é muito confiável utilizar este método para detectar o SO pois, além de ser possível mudar o TTL (conforme já dito acima), muitas redes bloqueiam tráfego ICMP no firewall, impedindo o uso do ping.
[8] Comentário enviado por edisonsousa em 06/05/2010 - 11:53h
Boa essa dica, podemos utiliza-la quando trabalhamos com uma grande rede e temos uma diversificação gigantesca, onde sabemos que nenhum engraçadinho vai ficar mudando o ttl, de resto não é muito confiável, mais valeu mesmo.