Python - Ermittelt die IP-Adresse und den Hostnamen des Computers im Netzwerk, auf dem die gleiche Anwendung läuft

7

Nur um es klarzustellen: Ich habe Python vor zwei Wochen gestartet, aber ich bin ein C #, ASP, PHP, JavaScript Entwickler.

Ich habe gerade ein neues Projekt mit Python und PyQt gestartet und möchte, dass mein Projekt ein Server ist, der mit anderen Instanzen dieses Servers auf anderen Computern kommunizieren kann.

Ich muss also die IP-Adresse und den Hostnamen des Computers abrufen.

Zuerst dachte ich über die Verwendung des MSDOS "net view" -Befehls nach, aber das war bevor ich diesen Befehl in meinem Job ausprobierte und sah, dass das ungefähr 15s dauern konnte (was ich für zu langsam halte).

Ich hatte diese Idee von: Ссылка

Der Befehl "net view" kann auch Computer zurückgeben, die sich nicht mehr im Netzwerk befinden und beim Versuch, ihre IP-Adressen nach Hostnamen abzurufen, eine Ausnahme auslösen (wodurch der Prozess jedes Mal verlangsamt wird, wenn auf einen Computer nicht zugegriffen werden kann).

Meine Frage: Gibt es eine Möglichkeit, die IP- und Hostnamen aller Computer im lokalen Netzwerk zu erhalten, ohne dabei net view unter Windows zu übergeben, weil net view eine langsame Operation sein könnte?

Gibt es auch eine Möglichkeit, nur Computer zu erhalten, auf denen meine Anwendung ausgeführt wird? (also wäre es schneller)

Vielen Dank im Voraus

    
RPDeshaies 28.10.2013, 14:02
quelle

2 Antworten

4

Wenn Sie die IP-Adresse des Hosts abrufen möchten, auf dem das Python-Skript ausgeführt wird, ist die Antwort user2096338 der richtige Weg.

Um alle Computer in einem Netzwerk in einem LAN zu finden, können Sie scapy . Ссылка ist ein Link, den ich beim Durchsuchen eines ähnlich SO Frage; die alle Computer in einem Netzwerk (LAN) entdeckt.

Wenn Sie sicherstellen möchten, dass das obige Skript nur die Computer zurückgibt, auf denen der Server ausgeführt wird, gibt es mehrere Möglichkeiten, die nachfolgend in der Reihenfolge der Portabilität aufgeführt sind:

  1. Immer wenn Sie Ihren Server auf einem Host installieren, registrieren Sie sich selbst in einer zentralen Datenbank, die dann von einer neuen Instanz Ihres Dienstes abgefragt werden kann, um alle Computer zu identifizieren, auf denen die Peer-Server laufen
  2. Verwenden Sie WMI (da Sie sich in Windows befinden), um alle Prozesse abzufragen, die auf dem Peer-System ausgeführt werden, und überprüfen Sie, ob Ihr Serverprozess einer davon ist.
  3. Ihr Server wird einen Prüfport offen lassen und eine neue Serverinstallation wird für jeden der Hosts im Netzwerk einen Ping an den Server an diesem Prüfport senden. Wenn es eine Antwort erhält, führt dieser Computer den Serverprozess aus.

Meiner Meinung nach ist Methode 1 die sicherste und portabelste Methode, da sie das Öffnen unnötiger Ports (wie Methode 3) verhindert, die Sicherheitslücken darstellen (je nachdem, in wessen Kontext Ihr Python-Skript läuft). Es hängt auch nicht von der Verfügbarkeit des WMI-Dienstes auf den Remote-Hosts ab (einige Systeme können WMI deaktiviert haben).

Hoffe das hilft

    
Prahalad Deshpande 28.10.2013, 15:41
quelle
17

Für den Hostnamen und die IP-Adresse des Localhost können Sie die Methoden socket module und gethostname sowie gethostbyname verwenden:

%Vor%     
Peter Party Bus 28.10.2013 15:02
quelle