Com o comando ping podemos identificar o Sistema Operacional utilizado.
O comando ping trabalha com o protocolo ICMP enviando mensagens. Quando uma maquina 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). Este valor indica quanto tempo o pacote vai ficar circulando antes de ser descartado.
Cada Sistema Operacional trabalha com um TTL padrão e desta forma podemos identificar o tipo de sistema.
Exemplo1.
$ 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
Exemplo2.
$ 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
Representamos na tabela abaixo o valor padrão do TTL para alguns sistemas operacionais:
Sistema TTL
UNIX 255
Linux 64
Windows 128
Com estes números já podemos determinar o Sistema Operacional dos exemplos acima. No caso do Exemplo1 o ttl=64 nos diz que o sistema utilizado é Linux, e para o Exemplo2 podemos dizer que o sistema usado é Windows.
Os roteadores estão programados para decrementar o TTL a cada pacote que passa por ele. Se uma maquina Windows for "pingada" e o valor TTL for 126 significa que antes de chegar ao destino existem 2 roteadores.