Comment savoir si une machine distante utilise Windows ou Linux?


10

Existe-t-il un moyen d'exécuter une commande (comme un message ICMP ou un autre protocole), d'obtenir une réponse d'une machine distante (pas sur mon propre réseau local privé) et d'analyser le message pour trouver des preuves que cette machine exécute Windows ou un système d'exploitation Linux?


Que comptez-vous faire de ces informations? Ce n'est peut-être pas fiable ...
pjc50

En fait, j'étais sur un client la semaine dernière et il utilisait un système qui empêche quiconque d'utiliser un système Windows sur son réseau. Il a été fait par un serveur distant qui n'était pas sur le même réseau, je le trouve très étrange car je ne savais pas comment c'était fait.
Diogo

Il existe plusieurs façons de procéder. Par exemple, si vous utilisez DHCP pour fournir des adresses réseau, la demande DHCP inclut des informations sur le système d'exploitation client.
Harry Johnston

Réponses:



10

Si vous êtes sur un réseau IPv4, utilisez simplement ping. Si la réponse a un TTL de 128, la cible exécute probablement Windows. Si le TTL est 64, la cible exécute probablement une variante d'Unix.


Qu'entendez-vous par propablement?
Dchris

Qu'en est-il de TTL = 255? Je pense que c'est Unix ..
Dchris

1
Je ne pense pas avoir jamais vu un TTL de 255.
Harry Johnston

Quelle est l'explication de cela / Pourquoi est-ce le cas?
Hervian

1
@Hervian, si vous voulez dire pourquoi ces TTL particuliers ont été choisis, vous devrez demander aux programmeurs d'origine. Si vous voulez dire pourquoi la plupart ou toutes les variantes UNIX sont toutes identiques et / ou pourquoi le TTL est le même pour chaque version de Windows, ce serait juste de l'inertie - en l'absence de raison particulière de changer quelque chose, il a tendance à rester le même.
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
          )
       )
    )
)

Cela peut-il être modifié pour fonctionner avec une gamme d'IP? Si je voulais l'exécuter pour trouver tous les ttl pour toute ma pile de serveurs.
Eddie Studer

1

Une façon de procéder consiste à utiliser NMap . D'après la réponse, il peut deviner le système d'exploitation distant.


1

Package: xprobe 'OU' xprobe2
Description: Identification du système d'exploitation à distance Xprobe2 vous permet de déterminer quel système d'exploitation s'exécute sur un hôte distant. Il envoie plusieurs paquets à un hôte et analyse les réponses retournées. La fonctionnalité de Xprobe2 est comparable à la fonction d'empreinte digitale du système d'exploitation dans nmap.

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

Référence:
http://www.sys-security.com/html/projects/X.html
http://sourceforge.net/projects/xprobe/


0

Ancien message, mais j'ai pensé que j'ajouterais à cela aussi, si le périphérique est compatible SNMP, vous pouvez également demander le sysDescr qui vous indiquera le système d'exploitation qu'il utilise.

Téléchargez un navigateur MIB, un bon que j'utilise est ici: http://www.ireasoning.com/downloadmibbrowserfree.php . Vous lui donnez essentiellement l'adresse IP de l'appareil et effectuez une opération de marche.


Pouvez-vous développer votre réponse pour expliquer comment y parvenir? Merci.
fixer1234

Vous pouvez télécharger un navigateur MIB, un bon que j'utilise est ici ireasoning.com/downloadmibbrowserfree.php . Vous lui donnez essentiellement l'adresse IP de l'appareil et effectuez une opération de marche
Johnathon64

0

Suivant la suggestion de Johnathon64, vous pouvez utiliser SNMP pour interroger directement sur le serveur - en supposant que le serveur distant lui-même est configuré pour utiliser SNMP. Vous pouvez lancer une requête en ligne de commande telle que celle ci-dessous pour le faire:

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

Expliquer la commande elle-même:

  1. snmpget interrogera l'objet sysDescr, qui contient le nom par défaut de l'objet.
  2. Les éléments suivants sedexcluront la sortie de début, qui ne contient que l'OID interrogé et le début de la chaîne.
  3. La dernière commande tr,, exclura les guillemets doubles, généralement trouvés dans la requête SNMP.

Les deux dernières commandes servent uniquement à formater la sortie - si vous n'en avez pas besoin, vous pouvez utiliser la toute première commande pour extraire la sortie complète.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.