GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Erfahren Sie, wie Sie Netzwerkgeräte mit Scientific Linux 7.1 und Python erkennen

Manchmal haben Sie möglicherweise Netzwerk- oder Firewall-Probleme in einem internen Netzwerk, die einen Netzwerkscan erfordern, um herauszufinden, welche IP-Adressen verwendet werden. Zu diesem Zweck können wir vorgefertigte Tools wie nmap, zmap oder wütendIP verwenden. Aber wenn wir keinen Internetzugang haben, um diese Tools herunterzuladen, können wir den Scan nur mit manuellen Befehlen durchführen. Das manuelle Scannen kann jedoch ziemlich mühsam sein, wenn man bedenkt, dass dies für jede in unserem Netzwerk angegebene IP-Adresse durchgeführt werden sollte.

Unter Berücksichtigung des oben Gesagten zeige ich in diesem Tutorial, wie wir diese Aufgabe mithilfe von Python automatisieren können, da ich weiß, dass Python in fast allen auf dem Markt erhältlichen Linux-Distributionen verfügbar ist.

Python ist dafür die perfekte Wahl, weil es uns erlaubt, jede Aufgabe zu automatisieren, die das Betriebssystem ausführen kann, wir müssen nur die richtigen Bibliotheken verwenden.

Linux-Bibliotheken in Python verwenden

Der Schwerpunkt unserer aktuellen Studie liegt auf dem Ping-Sweep-Befehl, um alle angeschlossenen und eingeschalteten Geräte in unserem Netzwerk zu erkennen. Das Skript, das wir erstellen, sendet einen Ping an jede IP-Adresse im Netzwerk. Zum Beispiel verwenden wir die Subnetzmaske / 24, sie wird nur durch die ersten 3 Oktette der IP geschleift. Das erste, was wir für dieses Skript berücksichtigen müssen, ist, welche Systembibliotheken für die Aufgabe verwendet werden können. Wir müssen die Sys- und Subprozessbibliotheken importieren. Diese Bibliotheken ermöglichen die Verwendung bestimmter Befehle des Python-Interpreters und des Betriebssystems selbst, in diesem Fall Scientific Linux 7.1.

import sys, subprocess

Ich werde mein Skript unter dem Namen networkmonitor.py speichern.

Das richtige Argument erkennen

Wenn wir das Skript mit dem Befehl

ausführen

>>python networkmonitor.py 10.0.0.

auf der Shell, wenn das Argument des Befehls falsch ist (wenn len(sys.argv)<>2:), zeigt das Skript ein korrektes Beispiel an. (Drucken Sie "networkmonitor.py 10.0.0.").

Das Argument ist die IP-Adresse des gescannten Subnetzes, es werden nur die ersten 3 Oktetts verwendet. Wenn also das Argument korrekt ist, wird das Ergebnis des Befehls "ping -c1 "+sys.argv[1] in einer Variablen gespeichert, in unserem Fall cmdping, sys.argv[1] ist die "Argument"-Variable im sys-Modul und speichert das erste Argument, das an das Skript übergeben wird. In UNIX-Umgebungen müssen wir ping -c1 verwenden, weil der Ping-Befehl endlos laufen würde.

if len(sys.argv)<>2:
    print "networkmonitor 10.0.0."

Unterprozess-Befehl, seine Argumente und die for-Schleife


In der nächsten Zeile beginnt die for-Schleife, die ausgeführt wird, bis sie das von uns festgelegte Limit (Stoppbedingung) erreicht, die Bedingung ist der IP-Bereich, den wir scannen möchten. An dieser Stelle ist es wichtig, die Zeit zu berücksichtigen, die das Skript benötigt, um den Bereich zu scannen. Je größer der Bereich, desto länger läuft das Skript. Der  subprocess.Popen  ermöglicht es uns, einen Shell-Befehl zu starten und zu warten, bis er beendet ist. Nach Abschluss überprüfen wir den Status, den der Befehl zurückgegeben hat. Das cmdping+str(x), ausgeführt vom Unterprozess.Popen , erhöht den Index für die durch das Argument angegebene IP bei jedem Zyklus der for-Schleife.

Shell=true bedeutet, dass der Prozess auf der Shell ausgeführt wird. Die Website für Python-Dokumente warnt jedoch vor der Gefahr der Verwendung von shell=true, seien Sie also vorsichtig, welchen Befehl Sie ausführen. Die Verwendung von subprocess.PIPE als stderr-Argument gibt an, dass Python eine Pipe zum Standardstream öffnen soll.

for x in range(99,110):
        p = subprocess.Popen(cmdping+str(x), shell=True, stderr=subprocess.PIPE)

In diesem Fall haben wir nur elf IP-Adressen (von 99 bis 110) getestet.

Jetzt müssen wir den Inhalt von stderr überprüfen, wir werden aufhören (brechen), wenn die Variable leer ist, andernfalls zeigen wir die stdout  Inhalt.

out = p.stderr.read(1)
            if out == '' and p.poll() != None:
                break
            if out != '':
                sys.stdout.write(out)
                sys.stdout.flush()

Dieser letzte Code muss ausgeführt werden, wenn die Shell im True-Zustand bleibt.

Der vollständige Code lautet jetzt:

import sys, subprocess
if len(sys.argv)<>2:
    print "networkmonitor 10.0.0."
else:
    cmdping ="ping -c1 "+sys.argv[1]
    for x in range(99,110):
        p = subprocess.Popen(cmdping+str(x), shell=True, stderr=subprocess.PIPE)
        while True:
            out = p.stderr.read(1)
            if out == '' and p.poll() != None:
                break
            if out != '':
                sys.stdout.write(out)
                sys.stdout.flush()

Die Ausgabe unseres kleinen Skripts ist:



Wie im Screenshot zu sehen, macht das Tool nur einen Ping, um eine positive oder negative Antwort zu erhalten, und wechselt dann zur nächsten IP-Adresse und so weiter, um den gesamten Adressbereich zu analysieren.

Es sollte erwähnt werden, dass ich die Urheberschaft des oben analysierten Codes nicht beanspruche. Ich erkläre nur Schritt für Schritt seine Funktionalität, um ein besseres Verständnis der Systembefehle und Netzwerkfunktionen zu bekommen. Ich gebe dem Autor Anerkennung.


Linux
  1. So installieren Sie Python unter Linux

  2. So legen Sie eine statische IP-Adresse fest und konfigurieren das Netzwerk unter Linux

  3. Vektoralgebra auf Scientific Linux 7.1 mit Python-Skript:Teil 1

  4. Wie überwache ich die Netzwerknutzung mit nload unter Linux?

  5. Erfahren Sie, wie Sie Dateien unter Linux komprimieren und entpacken, und werden Sie ein Zip-Meister

So überwachen Sie die Netzwerknutzung mit nload unter Linux

Einführung in VPN und hier erfahren Sie, wie Sie es unter Linux verwenden

So installieren und verwenden Sie Python-Mistune unter Linux

So erkennen und verwalten Sie Geräte unter Linux

So installieren Sie Anaconda Navigator und JupyterLab unter Linux

So installieren und konfigurieren Sie Linux Malware Detect (LMD) unter Linux