Identifição de sistemas operacionais

Assuntos relacionados a configuração de redes e conexões em geral.
Regras do fórum Leia as Regras Gerais do Manjaro Brasil em "Normatividade" e pesquise antes de postar.
Se sua dúvida foi respondida, não esqueça de marcar RESOLVIDO em seus tópicos, botão com a marca verde Imagem

Identifição de sistemas operacionais

Mensagempor pactux » 12 Jul 2015, 22:42  •  MS 1

Olá a todos,

No texto de hoje falarei a respeito de uma técnica de terminal que possibilita a identificação do SO (sistema operacional) de outro computador através do comando ping.

- O comando

O ping é um comando presente na maioria dos sistemas operacionais, e ele é utilizado para teste de conectividade entre dispositivos da rede através do protocolo de controle de mensagens (ICMP). Basicamente o ping transmite e recebe pacotes de outros equipamentos da rede para verificar se estes estão disponíveis para troca de informações.

O comando em si é muito rico em opções e possibilidades de uso, por esse motivo incentivo a leitura das informações a respeito dele. Para ler tudo sobre essa ferramenta, abra o terminal e execute

Código: Selecionar todos
$ info ping


ou se preferir

Código: Selecionar todos
$ man ping


- Protocolo ICMP

O ICMP (Internet Control Message Protocol) é um protocolo que funciona na camada de Rede do modelo OSI e sua função é reportar mensagens (de controle e de erros acontecidos na transmissão de pacotes) ao host originador, ou seja, a máquina que realiza o ping para verificar se a outra está ativa. Esse protocolo foi concebido, pois um datagrama IP pode se perder, se atrasar ou ser duplicado durante o envio, e isso ocorre por vários motivos, dentre eles: Falhas na conexão, Destino inativo, Excesso de tráfego, etc.

Como o foco do texto não é a explicação detalhada do ping e do ICMP, não vou me aprofundar, o que fiz foi apenas "dar uma luz" para quem não conhecia o comando e o protocolo.

- Identificar um Sistema Operacional

Agora que temos uma noção do que é a ferramenta e seu respectivo protocolo, vamos a aplicação da técnica. E para uma explicação mais didática vamos a prática. Abra o terminal e execute a instrução abaixo:

Código: Selecionar todos
# ping -c 3 127.0.0.1


O resultado do que foi executado deve ser algo parecido com a saída abaixo:

Código: Selecionar todos
from 127.0.0.1: icmp_seq= ttl=64 time=
from 127.0.0.1: icmp_seq= ttl=64 time=
from 127.0.0.1: icmp_seq= ttl=64 time=

--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss,


Da saída acima precisaremos apenas do campo ttl, pois ele é quem diz qual é o SO por trás da maquina.

- TTL

O campo TTL (Time To Live), refere-se ao tempo de vida de um pacote na rede e o valor dele possui duas particularidades importantes. A primeira delas é o valor padrão, ou seja, cada SO possui um valor default que é atribuído a um pacote no momento de sua criação pelo sistema, no GNU/Linux e Mac OS X esse valor é 64, no MS Windows o valor é 128 e em sistemas Unix (como o Oracle Solaris por exemplo) 255.

A segunda particularidade importante é o decremento do valor padrão a cada salto do pacote realizado em roteadores. Para melhor exemplificar isso, vamos a um exemplo prático: Digamos que o site manjaro-linux.com.br esteja hospedado em um servidor localizado na Antartida e você (localizado no Brasil) queira simplesmente testar se a máquina está ativa e respondendo, então você abrirá o shell e escreverá o seguinte:

Código: Selecionar todos
# ping -c 5 manjaro-linux.com.br


Logo em seguida, a máquina que recebeu o ping devolverá o pong com uma saída semelhante a essa:

Código: Selecionar todos
from 200.0.2.6: icmp_seq= ttl=60 time=
from 200.0.2.6: icmp_seq= ttl=60 time=
from 200.0.2.6: icmp_seq= ttl=60 time=


Repare que o valor de TTL é 60. Mas o que isso realmente quer dizer? Simples, o computador que hospeda o site do Manjaro Linux Brasil é uma máquina com GNU/Linux e para chegar até ela, meu pacote com a requisição teve que passar por quatro roteadores. Se a máquina em questão fosse um Solaris, o valor de TTL seria 251 (255 que é o valor padrão subtraído por quatro roteadores).

No resumo da obra, a técnica é a seguinte: "Pingue" uma máquina qualquer na rede e a partir do valor que mais se aproximar dos valores padrões você saberá qual é o SO daquela máquina. Caso o endereço de loopback seja testado, o retorno será o valor padrão, pois não há roteadores nesse caminho.

- A anti técnica

O que foi explicado acima não se aplica a todas as máquinas, logo, a certeza de que o resultado é verdadeiro restringe-se a um ambiente de rede controlado, na qual você sabe que as máquinas não sofreram configurações avançadas. Digo isso, pois o valor de TTL pode ser alterado no GNU/Linux! Como fazer isso? Veja abaixo:

Código: Selecionar todos
# more /proc/sys/net/ipv4/ip_default_ttl


A instrução acima permite que você veja o valor padrão. Já a que está abaixo o altera, nesse caso para o valor do MS Windows.

Código: Selecionar todos
# echo 128 > /proc/sys/net/ipv4/ip_default_ttl


Feito a alteração execute:

Código: Selecionar todos
# ping -c 3 127.0.0.1


E verá que sua máquina não é mais um Manjaro Linux, e sim um Windows para o resto da rede :( .

- Conclusão

Embora a técnica acima possa ser burlada, é válido conhece-la. Uma vez que muitas pessoas sequer possuem ideia disso e nesse caso ela funcionará, por outro lado nunca confie totalmente nela e busque mais de uma maneira para realizar a identificação, a não ser que você esteja em um ambiente controlado é claro.

Bom pessoal, essa foi mais uma dica. Espero que isso possa ajudar alguém e caso haja alguma informação errada ou incompleta, fiquem a vontade para comentar. Criticas e sugestões também são bem vindas.

Valeu.
Pactux - Manjaro Linux
https://github.com/pactux

Esta mensagem de pactux foi agradecido - 2
Cisão (16 Set 2016, 13:18) • Holmes (13 Jul 2015, 10:18)
Avatar do usuário
pactux
Aprendiz

 
Mensagens: 24
Artigos: 5
Registro: 09 Jun 2015, 02:55
Agradeceu: 0 vez
Agradecido: 19 vez(es)
Distro utilizada: Manjaro Linux
Versão: 17.1.8
Ambiente: Gnome
Repositório: Stable
Habilidade: Novice

Identifição de sistemas operacionais

Mensagempor jkmsjq2013 » 13 Jul 2015, 09:22  •  MS 2

Excelente dica, pactux...!!!

Tenho certeza que irá para a Wiki do Manjaro.
Imagem
LinuxUser: 548942 / Comandos básico para o Manjaro
"A verdade só é agressiva a quem vive de mentiras". Autor desconhecido.
Twitter: @jeisonkertesz
Avatar do usuário
jkmsjq2013
Guru

 
Mensagens: 1021
Artigos: 1
Registro: 18 Dez 2013, 18:24
Localização: Jequié/BA
Agradeceu: 4 vez(es)
Agradecido: 122 vez(es)
Distro utilizada: Manjaro
Versão: 16.06
Ambiente: XFCE
Repositório: Stable
Habilidade: Novice

Identifição de sistemas operacionais

Mensagempor Holmes » 13 Jul 2015, 10:19  •  MS 3

realmente boa dica e logo estarei colocando na nossa wiki...

vlw fwi, Holmes :)
Imagem

Meu Blog Kibojoe I Manjaro I JWM I Outras Coisas...

Visitem e colaborem com nosso Knowledge Base
Leia as Regras Gerais e pesquise antes de postar
Se a sua dúvida foi respondida marque Resolvido em seu tópico com o botão V na cor verde
Avatar do usuário
Holmes
Fundador

Mantenedor Kibojoe Linux
Mantenedor Kibojoe Linux
 
Mensagens: 5472
Artigos: 56
Registro: 30 Set 2012, 21:00
Localização: Brasil
Agradeceu: 173 vez(es)
Agradecido: 812 vez(es)
Distro utilizada: Kibojoe Linux
Versão: 18.02
Ambiente: JWM
Repositório: Stable
Habilidade: Intermediate


Voltar para Redes e Conectividade



Quem está online

Usuários navegando neste fórum: magpie [Crawler] e 0 visitantes

cron
^ Voltar ao Topo