¿Cómo sé si una máquina remota está usando Windows o Linux?


10

¿Hay alguna manera de ejecutar un comando (como un mensaje ICMP u otro protocolo), obtener una respuesta de una máquina remota (no en mi propia red local privada) y analizar el mensaje para encontrar alguna evidencia de que esta máquina está ejecutando Windows o un sistema operativo Linux?


¿Qué planeas hacer con esta información? Puede no ser confiable ...
pjc50

En realidad, estaba en un cliente la semana pasada y él estaba usando un sistema que evitaba que alguien usara un sistema Windows en su red. Fue hecho por un servidor remoto que no era de la misma red, me pareció muy extraño porque no sabía cómo se hizo.
Diogo

Hay muchas maneras de hacerlo. Por ejemplo, si está utilizando DHCP para proporcionar direcciones de red, la solicitud de DHCP incluye información sobre el sistema operativo del cliente.
Harry Johnston

Respuestas:



10

Si estás en una red IPv4, solo usa ping. Si la respuesta tiene un TTL de 128, el objetivo probablemente esté ejecutando Windows. Si el TTL es 64, el objetivo probablemente esté ejecutando alguna variante de Unix.


¿Qué quieres decir con propagable?
Dchris

¿Qué pasa con TTL = 255? Creo que es Unix ..
Dchris

1
Creo que nunca he visto un TTL de 255.
Harry Johnston

¿Cuál es la explicación de esto? / ¿Por qué es este el caso?
Hervian

1
@Hervian, si te refieres a por qué se eligieron esos TTL particulares, tendrías que preguntar a los programadores originales. Si quiere decir por qué la mayoría o todas las variantes de UNIX son todas iguales y / o por qué el TTL es el mismo para todas las versiones de Windows, eso sería solo inercia; en ausencia de una razón particular para cambiar algo, tiende a permanecer mismo.
Harry Johnston el

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
          )
       )
    )
)

¿Se puede modificar para trabajar con una gama de IP? Si quisiera ejecutar esto para encontrar todos los ttl para toda mi pila de servidores.
Eddie Studer

1

Una forma de hacerlo es usar NMap . A partir de la respuesta, puede adivinar el sistema operativo remoto.


1

Paquete: xprobe 'OR' xprobe2
Descripción: Identificación remota del sistema operativo Xprobe2 le permite determinar qué sistema operativo se ejecuta en un host remoto. Envía varios paquetes a un host y analiza las respuestas devueltas. La funcionalidad de Xprobe2 es comparable a la función de huellas digitales del sistema operativo en nmap.

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

Referencia:
http://www.sys-security.com/html/projects/X.html
http://sourceforge.net/projects/xprobe/


0

Publicación anterior, pero pensé que también agregaría a esto, si el dispositivo está habilitado para SNMP, también puede consultar el sysDescr que le indicará el sistema operativo que está utilizando.

Descargue un navegador MIB, uno bueno que uso aquí: http://www.ireasoning.com/downloadmibbrowserfree.php . Básicamente le das la dirección IP del dispositivo y haces una operación de caminata.


¿Puedes ampliar tu respuesta para explicar cómo lograr eso? Gracias.
fixer1234

Puede descargar un navegador MIB, uno bueno que uso aquí ireasoning.com/downloadmibbrowserfree.php . Básicamente le das la dirección IP del dispositivo y haces una operación de caminata
Johnathon64

0

Siguiendo la sugerencia de Johnathon64, puede usar SNMP para consultar directamente en el servidor, suponiendo que el servidor remoto esté configurado para usar SNMP. Puede iniciar una consulta de línea de comandos como la siguiente para hacerlo:

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

Explicando el comando en sí:

  1. snmpget consultará el objeto sysDescr, que contiene el nombre predeterminado del objeto.
  2. Lo siguiente sedexcluirá el resultado inicial, que solo contiene el OID sondeado y el comienzo de la cadena.
  3. El último comando, trexcluirá las comillas dobles, que generalmente se encuentran en la consulta SNMP.

Los dos últimos comandos son solo para formatear la salida; si no los necesita, puede usar el primer comando para extraer la salida completa.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.