2017-10-10 24 views
0

Comment identifier un système d'exploitation hôte distant (Unix/Windows) à l'aide de Python? Une solution que j'ai trouvée est de vérifier si le port22 est ouvert mais a appris que certains hôtes Windows avaient aussi le port 22 ouvert mais les connexions refusées. S'il vous plaît laissez-moi savoir la manière efficace de faire la même chose. Merci d'avance.Comment trouver un système d'exploitation hôte distant à l'aide de Python

+0

En général, vous ne pouvez pas. La seule façon que je peux penser est d'identifier un service qui est écrit en Python (le serveur sert un site web Django, ou héberge une application qui est écrite en Python). Mais alors, cela fonctionne parce que vous avez la connaissance qu'une telle application utilise Python. Il pourrait être juste le même codé dans une autre langue, vous ne pourriez pas faire la différence. Ceci est un détail d'implémentation interne. –

+0

Avez-vous accès à ces serveurs distants ou essayez-vous de déterminer le système d'exploitation via des services annoncés comme SSH, etc.? – Kyle

+1

Un outil couramment utilisé qui fait ce dont vous avez besoin est [Nmap] (https://nmap.org). Je suppose que pour contourner ce problème, vous pourriez écrire un wrapper _Python_ dessus, ou jeter un oeil à [\ [Python \]: python-nmap] (https://pypi.python.org/pypi/python-nmap). – CristiFati

Répondre

1

Pour des raisons de sécurité, la plupart des systèmes d'exploitation n'annoncent pas les informations sur le réseau. Alors que des outils tels que nmap peuvent déduire le système d'exploitation fonctionnant sur un système distant en analysant les ports sur le réseau, la seule façon de connaître le système d'exploitation de manière fiable consiste à se connecter au système. Dans de nombreux cas, le système d'exploitation sera signalé dans le cadre du processus de connexion, de sorte que l'établissement d'une connexion sur le réseau suffira à déterminer le système d'exploitation. Exécuter "uname -a" sur le système distant permettra également de récupérer le type de système d'exploitation sur les systèmes Linux.

Cela va récupérer la chaîne de bienvenue de HOST qui inclut généralement le type de système d'exploitation. Substituez un nom d'utilisateur valide pour UNAME et le nom d'hôte pour HOST.

 
    #!/usr/bin/env python3 

    import sys 
    import subprocess 

    CMD="uname -a" 

    conn = subprocess.Popen(["ssh", "[email protected]", CMD], 
      shell=False, 
      stdout=subprocess.PIPE, 
      stderr=subprocess.PIPE) 
    res = conn.stdout.readlines() 
    print(res)