Como sei se uma máquina remota está usando o Windows ou Linux?


10

Existe alguma maneira de executar um comando (como mensagem ICMP ou outro protocolo), obter uma resposta de uma máquina remota (não em minha própria rede local privada) e analisar a mensagem para encontrar alguma evidência de que esta máquina está executando um Windows ou um sistema operacional Linux?


O que você planeja fazer com essas informações? Pode não ser confiável ...
pjc50

Na verdade, eu estava com um cliente na semana passada e ele estava usando um sistema que impede que alguém use um sistema Windows em sua rede. Foi feito por um servidor remoto que não era da mesma rede, mas achei muito estranho porque não sabia como foi feito.
Diogo

Existem várias maneiras de fazer isso. Por exemplo, se você estiver usando o DHCP para fornecer endereços de rede, a solicitação de DHCP incluirá informações sobre o SO do cliente.
Harry Johnston,

Respostas:



10

Se você estiver em uma rede IPv4, use ping. Se a resposta tiver um TTL de 128, o destino provavelmente está executando o Windows. Se o TTL for 64, o alvo provavelmente está executando alguma variante do Unix.


O que você quer dizer com propably?
Dchris

E quanto ao TTL = 255? Eu acho que é o Unix ..
Dchris

1
Eu não acho que eu já vi um TTL de 255.
Harry Johnston

Qual é a explicação para isso / Por que isso acontece?
Hervian

1
@ Hervian, se você quer dizer por que foram escolhidos os TTLs em particular, teria de perguntar aos programadores originais. Se você quer dizer por que a maioria ou todas as variantes do UNIX são iguais e / ou o TTL é o mesmo para todas as versões do Windows, isso seria apenas inércia - na ausência de qualquer motivo específico para mudar alguma coisa, ele tende a permanecer mesmo.
Harry Johnston

2
: Presumes ping service enabled on Windows local and remote hosts
:
del _IX.txt, Windows.txt
ping -n 1 [computername|ipaddress] | findstr /i /c:"Reply" > ttl.txt
for /f "tokens=1-9* delims=:=< " %%a in (ttl.txt) do (
    if %%i leq 130 (
       if %%i geq 100 (
          echo Windows & rem or echo %%c >> Windows.txt
       ) else (
          if %%i equ 64 (
             echo *IX & rem or echo %%c >> _IX.txt
          )
       )
    )
)

Isso pode ser modificado para funcionar com vários IPs? Se eu quisesse executar isso para encontrar todos os ttl's para toda a minha pilha de servidores.
Eddie Studer #

1

Uma maneira de ir é usar o NMap . A partir da resposta, ele pode adivinhar o sistema operacional remoto.


1

Pacote: xprobe 'OR' xprobe2
Descrição: A identificação remota do SO Xprobe2 permite determinar qual sistema operacional está sendo executado em um host remoto. Ele envia vários pacotes para um host e analisa as respostas retornadas. A funcionalidade do Xprobe2 é comparável ao recurso de impressão digital do SO no nmap.

Exemplo:
$ sudo apt-get install xprobe
$ sudo xprobe2 -T21-23,80,53,110 ###.. ###. ###. ###

Referência:
http://www.sys-security.com/html/projects/X.html
http://sourceforge.net/projects/xprobe/


0

Post antigo, mas pensei em acrescentar isso também, se o dispositivo estiver ativado para SNMP, você também poderá consultar o sysDescr, que informará o sistema operacional que está usando.

Faça o download de um navegador MIB, um bom que eu uso está aqui: http://www.ireasoning.com/downloadmibbrowserfree.php . Você basicamente fornece o endereço IP do dispositivo e faz uma operação a pé.


Você pode expandir sua resposta para explicar como fazer isso? Obrigado.
fixer1234

Você pode baixar um navegador MIB, um bom que eu uso aqui é ireasoning.com/downloadmibbrowserfree.php . Você basicamente dar-lhe o endereço IP do dispositivo e fazer uma operação de caminhada
Johnathon64

0

Seguindo a sugestão de Johnathon64, você pode usar o SNMP para consultar diretamente no servidor - supondo que o próprio servidor remoto esteja configurado para usar o SNMP. Você pode iniciar uma consulta de linha de comando, como a abaixo, para fazer isso:

snmpget -v1 -c public <RemoteServerIP> sysDescr.0 | sed -n 's/.*STRING: //p' | tr -d \"

Explicando o próprio comando:

  1. snmpget consultará o objeto sysDescr, que contém o nome padrão do objeto.
  2. O seguinte sedexcluirá a saída inicial, que contém apenas o OID consultado e o início da sequência.
  3. O último comando tr,, excluirá as aspas duplas, geralmente encontradas na consulta SNMP.

Os dois últimos comandos são apenas para formatar a saída - se você não precisar deles, pode usar o primeiro comando para extrair a saída completa.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.