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?

Diogo
fonte
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:

16

Não é definitivo, mas o nmap fará isso com o comando nmap -O -v( consulte a documentação para obter mais detalhes) Se você estiver executando o Windows ou quiser uma interface gráfica , consulte o zenmap

Journeyman Geek
fonte
1
Lembre-se: alguns provedores detectam a verificação de portas usando o nmap como abuso.
Jeroen Baert #
2
@JeroenBaert namelly AWS me enviou um e
Jonathan dos Santos
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.

Harry Johnston
fonte
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
          )
       )
    )
)
vento do rio
fonte
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.

Apache
fonte
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/

tao
fonte
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é.

Johnathon64
fonte
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.

FoxBuster
fonte